Fody 和 Assembly.GetExecutingAssembly().Location returns 空字符串

Fody and Assembly.GetExecutingAssembly().Location returns empty string

我在我的一个解决方案的一个 dll 中调用 Assembly.GetExecutingAssembly().Location。当我尝试使用 Fody (https://www.nuget.org/packages/Fody/) 将我的二进制文件打包成单个二进制文件时,我注意到此调用开始返回空字符串而不是执行程序集的位置。这应该被认为是一个错误吗?在使用 Fody 时有没有办法获取这些信息?如果我从我的解决方案的主项目进行调用,它似乎工作正常。

这是我的主要方法:

static void Main(string[] args)
{
    Console.WriteLine($"From Main: \"{Assembly.GetExecutingAssembly().Location}\"");
    Console.WriteLine($"From dll:  \"{Class1.GetLocation()}\"");
}

然后GetLocation方法在dll中这样定义:

public static string GetLocation()
{
    return Assembly.GetExecutingAssembly().Location;
}

没有 Fody 的控制台输出如下所示:

From Main: "C:\Prog\ConsoleApp1\bin\Debug\ConsoleApp1.exe"
From dll:  "C:\Prog\ConsoleApp1\bin\Debug\ClassLibrary1.dll"

而添加 Fody 后,它看起来像这样:

From Main: "C:\Prog\ConsoleApp1\bin\Debug\ConsoleApp1.exe"
From dll:  ""

使用 Costura,程序集默认从内存加载,因此没有位置。

要更改此设置,您可以在 FodyWeavers.xml 中设置 CreateTemporaryAssemblies,这将在加载程序集之前将它们保存到临时位置。

<Costura CreateTemporaryAssemblies='true' />