无法使用反射从用户文件夹加载程序集
Could not load assembly from user folder using reflection
我有 Android 的 Xamarin Forms 应用程序,以我的 dll 作为参考。我们称它为 A.dll(.net 标准 2.0)。
我在用户文件夹中有第二个 dll (Environment.GetFolderPath(Environment.SpecialFolder.Personal)
)。我们称之为 B.dll(.net 标准 2.0)
A.dll 中的函数尝试使用反射从 B.dll 加载 class:
var privatePath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var asmPath = Path.Combine(privatePath, "B.dll");
if (File.Exists(asmPath))
{
var asm = Assembly.LoadFrom(asmPath);
foreach (var t in asm.GetTypes()) { }
}
它在 GetTypes()
方法中抛出异常:
无法加载文件或程序集 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 或其依赖项之一。
奇怪的是,它在调试期间(在模拟器中)在 Debug 构建中工作,但在尝试 Release 构建时(也在模拟器中)不工作。
问题是,这样的dll加载是否可能?为什么它不能加载 'netstandard' 程序集,而 A.dll 已经加载并且它是相同版本的 .net 标准?为什么在debug的时候能用,release却不行?
感谢 sisi 的评论,我发现我必须将链接选项(在 *.Android 项目的 Android 选项中)从 'SDK Assemblies Only' 更改为 'None'。现在可以了。
我有 Android 的 Xamarin Forms 应用程序,以我的 dll 作为参考。我们称它为 A.dll(.net 标准 2.0)。
我在用户文件夹中有第二个 dll (Environment.GetFolderPath(Environment.SpecialFolder.Personal)
)。我们称之为 B.dll(.net 标准 2.0)
A.dll 中的函数尝试使用反射从 B.dll 加载 class:
var privatePath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var asmPath = Path.Combine(privatePath, "B.dll");
if (File.Exists(asmPath))
{
var asm = Assembly.LoadFrom(asmPath);
foreach (var t in asm.GetTypes()) { }
}
它在 GetTypes()
方法中抛出异常:
无法加载文件或程序集 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' 或其依赖项之一。
奇怪的是,它在调试期间(在模拟器中)在 Debug 构建中工作,但在尝试 Release 构建时(也在模拟器中)不工作。
问题是,这样的dll加载是否可能?为什么它不能加载 'netstandard' 程序集,而 A.dll 已经加载并且它是相同版本的 .net 标准?为什么在debug的时候能用,release却不行?
感谢 sisi 的评论,我发现我必须将链接选项(在 *.Android 项目的 Android 选项中)从 'SDK Assemblies Only' 更改为 'None'。现在可以了。