gpt4 book ai didi

c# - `Assembly.Load` 在单独的文件夹中

转载 作者:行者123 更新时间:2023-11-30 16:07:30 24 4
gpt4 key购买 nike

作为我之前 question 的延续.

我通过这段代码加载了DLL。示例 1:

var assembly = Assembly.LoadFile("C:\\Temp\\PROCESSOR\\SKM.dll");

这很好。

但我使用内部使用此代码的序列化,示例 2:

var ass1 = Assembly.Load("SKM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null");

这段代码抛出异常:System.Runtime.Serialization.SerializationException: Unable to find assembly "SKM, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null". - 那是因为 DLL 在单独的文件夹中。

如何强制 CLR 在单独的目录(而不是主应用程序的子文件夹)中查看 DLL?

我试过这个:

  1. <codeBase version="1.0.0.0" href="C:\\Temp\\PROCESSOR\\SKM.dll"/> - 不起作用,因为它仅适用于子文件夹。
  2. <probing privatePath="paths"/> - 不起作用,因为它仅适用于子文件夹。
  3. 首先运行第一个示例,然后运行第二个示例。但即使 SKM.dll已经加载,CLR 看不到我的程序集。

最佳答案

我找到了解决方案 here .

只需向 AssemblyResolve 添加一个事件:

AppDomain.CurrentDomain.AssemblyResolve += (sender, args) =>
{
string fileName = new AssemblyName(args.Name).Name + ".dll";
string assemblyPath = Path.Combine("C:\\Temp\\PROCESSOR", fileName);
var assembly = Assembly.LoadFile(assemblyPath);
return assembly;
};

如果无法以标准方式找到 DLL,则会触发事件并从我的文件夹加载 DLL。

关于c# - `Assembly.Load` 在单独的文件夹中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30661143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com