2011-05-31 44 views
4

我有C#应用程序加载托管程序集的集合。如果这些程序集可用,则其中一个程序集将加载两个本地dll(每个dll位于不同位置)。 Iam试图找到方法为这些本地dll提供搜索路径。提供路径到外部程序集原生dll依赖

还有其他选择吗?我真的不想提供这些DLL与我的软件 - 复制到程序目录当然解决了这个问题。

我试过使用SetDllDirectory系统函数,但它可能只提供一个使用它的路径。每次调用此函数都会重置路径。

设置PATH环境变量不解决的问题太多:/

+0

你有没有找到一个解决这个? – 2012-09-13 14:11:06

+0

@HandsomeCam不幸的是,我通过将原生dll-s复制到我的程序目录中解决了这个问题。 – sszarek 2015-05-11 13:32:55

回答

-1

注册你的DLL到GAC。更多here

+3

这个DLL是原生的,不能被提交给GAC。即使有可能我不想碰他们 - 他们必须留在原地。 – sszarek 2011-05-31 10:33:17

0

这可以帮助:

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; 
    } 
+1

注意我没有管理程序集的问题,但提供了本地dll的路径。 – sszarek 2011-05-31 12:06:26

+0

>我有加载托管程序集的C#应用​​程序。 你有权访问这个程序集的源代码吗? – chopikadze 2011-05-31 12:10:49

+0

不幸的是, – sszarek 2011-05-31 12:16:38

相关问题