[英]`Assembly.Load` in a separate folder
作為我上一個問題的延續。
我通過這段代碼加載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。
如果您知道DLL的位置,是否有任何特殊原因您不想使用示例1?
如果你真的沒有,那么一個選擇就是在GAC中注冊DLL。
https://msdn.microsoft.com/en-us/library/dkkx7f79%28v=vs.110%29.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.