作为我先前问题的延续。
我通过此代码加载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?
我尝试了这个:
<codeBase version="1.0.0.0" href="C:\\Temp\\PROCESSOR\\SKM.dll"/>
-不起作用,因为它仅适用于子文件夹。<probing privatePath="paths"/>
-不起作用,因为它仅适用于子文件夹。SKM.dll
已经加载,CLR也看不到我的程序集。我在这里找到解决方法。
只需将事件添加到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。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句