簡體   English   中英

`Assembly.Load`在一個單獨的文件夾中

[英]`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(不在主應用程序的子文件夾中)?

我試過這個:

  1. <codeBase version="1.0.0.0" href="C:\\\\Temp\\\\PROCESSOR\\\\SKM.dll"/> - 不起作用,因為它僅適用於子文件夾。
  2. <probing privatePath="paths"/> - 不起作用,因為它僅適用於子文件夾。
  3. 首先運行第一個示例,然后運行第二個示例。 但即使已加載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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM