TL; DR
为什么
System.Reflection.Assembly.GetExecutingAssembly().Location
返回"<Unknown>"
?
整个故事:
当我手动运行控制台应用程序时,一切顺利。当我设置任务计划程序来运行我的应用程序时,存在一个问题:我的应用程序无法找到一些相关文件。
这些文件写在.config文件中,如下所示:
<add key="SomeFile" value="SomeFolder\SomeFile.xml"/>
,我只需要相对的角色。
当我手动运行我的应用时,&#39;当前文件夹&#39; =&#39;应用程序文件夹&#39;,但当我使用任务计划程序运行时,&#39;当前文件夹&#39; = C:\Windows\system32
,因为使用任务计划程序,我的应用程序在位于system32的taskeng.exe
下运行。
所以为了找到汇编路径,我想使用这段代码:
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
来自这个答案https://stackoverflow.com/a/16102640/6184866。
但它没有用。
答案 0 :(得分:0)
我在控制台应用程序中遇到了同样的问题。
我在以下情况下才收到此错误:
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.
但是,这两个命令都会执行并将预期的正确值打印到控制台。