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' />
我在我的一个解决方案的一个 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' />