加载多个程序集
Load multiple assemblies
如何使用程序集的完整显示名称从应用程序的 bin 路径之外的位置加载程序集?
通常可以使用
从自定义位置加载程序集
Assembly.LoadFrom(path);
这行得通,但似乎要加载强名称程序集,我需要指定其完整显示名称,例如 in
Assembly myDll =
Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
但这里的问题是,这仅引用了我的应用程序探测路径中的程序集。
如果我有一个程序集 dir1/asm.dll
和一个程序集 dir2/asm.dll
并且两者都有一个强名称怎么办。
如何在运行时加载它们?
您可以通过加载文件从其位置加载任何程序集 (example here)
如果您想使用一个程序集的多个版本,请考虑处理 AppDomain.CurrentDomain.AssemblyResolve (example here)
示例来自一个小型开源项目,该项目将从单独的 "packages" 文件夹加载 dll(允许包拥有自己的 dependency 副本,使用隔离加载程序)
在运行时,您可以通过以下方法指定加载程序集时要探测的其他目录:
AppDomain.CurrentDomain.ClearPrivatePath();
AppDomain.CurrentDomain.AppendPrivatePath();
当子目录名称在安装过程中已知时,您还可以在 app.config 文件中的 <probing>
元素的 privatePath
属性中指定这些附加目录。
还要确保文件名正确。当你有
AppDomain.CurrentDomain.AppendPrivatePath("Subdir");
Assembly myDll = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
然后 .net 将在可执行文件目录下的 "Subdir" 目录中查找名为 "mydll.dll" 的文件。
如何使用程序集的完整显示名称从应用程序的 bin 路径之外的位置加载程序集?
通常可以使用
从自定义位置加载程序集Assembly.LoadFrom(path);
这行得通,但似乎要加载强名称程序集,我需要指定其完整显示名称,例如 in
Assembly myDll =
Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
但这里的问题是,这仅引用了我的应用程序探测路径中的程序集。
如果我有一个程序集 dir1/asm.dll
和一个程序集 dir2/asm.dll
并且两者都有一个强名称怎么办。
如何在运行时加载它们?
您可以通过加载文件从其位置加载任何程序集 (example here)
如果您想使用一个程序集的多个版本,请考虑处理 AppDomain.CurrentDomain.AssemblyResolve (example here)
示例来自一个小型开源项目,该项目将从单独的 "packages" 文件夹加载 dll(允许包拥有自己的 dependency 副本,使用隔离加载程序)
在运行时,您可以通过以下方法指定加载程序集时要探测的其他目录:
AppDomain.CurrentDomain.ClearPrivatePath();
AppDomain.CurrentDomain.AppendPrivatePath();
当子目录名称在安装过程中已知时,您还可以在 app.config 文件中的 <probing>
元素的 privatePath
属性中指定这些附加目录。
还要确保文件名正确。当你有
AppDomain.CurrentDomain.AppendPrivatePath("Subdir");
Assembly myDll = Assembly.Load("myDll, Version=1.0.0.1, Culture=neutral, PublicKeyToken=9b35aa32c18d4fb1");
然后 .net 将在可执行文件目录下的 "Subdir" 目录中查找名为 "mydll.dll" 的文件。