我有C#应用程序加载托管程序集的集合。如果这些程序集可用,则其中一个程序集将加载两个本地dll(每个dll位于不同位置)。 Iam试图找到方法为这些本地dll提供搜索路径。提供路径到外部程序集原生dll依赖
还有其他选择吗?我真的不想提供这些DLL与我的软件 - 复制到程序目录当然解决了这个问题。
我试过使用SetDllDirectory系统函数,但它可能只提供一个使用它的路径。每次调用此函数都会重置路径。
设置PATH环境变量不解决的问题太多:/
我有C#应用程序加载托管程序集的集合。如果这些程序集可用,则其中一个程序集将加载两个本地dll(每个dll位于不同位置)。 Iam试图找到方法为这些本地dll提供搜索路径。提供路径到外部程序集原生dll依赖
还有其他选择吗?我真的不想提供这些DLL与我的软件 - 复制到程序目录当然解决了这个问题。
我试过使用SetDllDirectory系统函数,但它可能只提供一个使用它的路径。每次调用此函数都会重置路径。
设置PATH环境变量不解决的问题太多:/
这可以帮助:
private void Form1_Load(object sender, EventArgs e)
{
//The AssemblyResolve event is called when the common language runtime tries to bind to the assembly and fails.
AppDomain currentDomain = AppDomain.CurrentDomain;
currentDomain.AssemblyResolve += new ResolveEventHandler(currentDomain_AssemblyResolve);
}
//This handler is called only when the common language runtime tries to bind to the assembly and fails.
Assembly currentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string dllPath = Path.Combine(YourPath, new AssemblyName(args.Name).Name) + ".dll";
return (File.Exists(dllPath))
? Assembly.Load(dllPath)
: null;
}
注意我没有管理程序集的问题,但提供了本地dll的路径。 – sszarek 2011-05-31 12:06:26
>我有加载托管程序集的C#应用程序。 你有权访问这个程序集的源代码吗? – chopikadze 2011-05-31 12:10:49
不幸的是, – sszarek 2011-05-31 12:16:38
你有没有找到一个解决这个? – 2012-09-13 14:11:06
@HandsomeCam不幸的是,我通过将原生dll-s复制到我的程序目录中解决了这个问题。 – sszarek 2015-05-11 13:32:55