2016-11-08 78 views
1

TL; DR執行大會的位置是未知

爲什麼

System.Reflection.Assembly.GetExecutingAssembly().Location 

回報"<Unknown>"

整個故事: 當我手動運行我的控制檯應用程序,一切順利。當我設置任務計劃程序來運行我的應用程序時,出現了一個問題:我的應用程序找不到一些依賴文件。 這些文件是這樣寫在.config文件中的: <add key="SomeFile" value="SomeFolder\SomeFile.xml"/>,我只需要相對路徑。當我手動運行我的應用程序時,'當前文件夾'='應用程序文件夾',但是當我使用任務計劃程序運行時,'當前文件夾'= C:\Windows\system32,因爲有了任務計劃程序,我的應用程序在位於system32的taskeng.exe下運行。

因此,要找到裝配路徑我想使用此代碼:

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 

從這個答案https://stackoverflow.com/a/16102640/6184866

但它不起作用。

+0

你可以得到Directory.GetCurrentDirectory與它在某些變量中相同然後Directory.SetCurrentDirectory到你需要的然後當你完成你的工作後再次將當前dir設置爲temp –

回答

0

我對控制檯應用程序也有同樣的問題。

當我只接收此錯誤:

  1. 的組件被構建爲與最佳化釋放上
  2. 該程序運行Visual Studio之外,然後處理被附接到
  3. 命令Assembly.GetExecutingAssembly().Location通過立即窗口執行。

它可以用下面的代碼複製。循環中的睡眠只是給我時間來附加調試器。

static void Main(string[] args) 
    { 
     for (int i = 0; i < 10; i++) 
     { 
      Console.WriteLine(10 - i); 
      Thread.Sleep(1000); 
     } 

     Console.WriteLine(Assembly.GetExecutingAssembly().Location); 
     Console.WriteLine(Directory.GetCurrentDirectory()); 

     Console.ReadLine(); 
    } 

設置斷點執行命令Assembly.GetExecutingAssembly().Location返回<Unknown>這個代碼(當上面的約束爲真),並且從立即窗口。正在執行Directory.GetCurrentDirectory()返回Cannot evaluate expression because the code of the current method is optimized.

但是,這兩個命令都會將預期的正確值執行並打印到控制檯。