2009-06-30 113 views
0

通常,您必须将应用程序使用的所有.dll文件放在与.exe文件相同的位置。我想将这些库保存在其他专用文件夹中,并只显示我的应用程序在哪里寻找它们(通过app.config中的某个路径或类似的东西)。我该怎么做呢?如何将.dll文件与使用它们的.exe文件分开?

+0

我很好奇你为什么这样做?如果原因是这样你可以独立地更新这些dll,每个应用程序可能是一个wcf web服务可能提供更好的解决方案?老实说呢 – Calanus 2009-06-30 08:53:15

+0

?我被告知;)我们已经失去了使用相同的库的应用程序,他们想把它们保存在一个地方 – agnieszka 2009-06-30 09:17:02

回答

5

您可以使用app.config中的<probing> element指定在哪里查找依赖关系。我相信这必须是exe文件所在的目录,而不是在磁盘上的任意位置。

查看"Locating the assembly through codebases or probing"了解更多关于这如何挂在一起的更多信息。

+0

以及我需要在磁盘上的其他地方,而不是应用程序的目录子目录 – agnieszka 2009-06-30 09:16:11

+0

在这种情况下,我认为你的选择1)GAC; 2)Assembly.LoadFrom(即手动执行); 3)调查codeBase元素,但我不确定这会覆盖你的情况。 – 2009-06-30 09:21:35

+1

是否与链接的目录一起工作,即创建一个实际上是实际目录的链接(软或硬)的子目录。这当然很不好意思:-) – 2009-07-01 09:56:46

2

也考虑GAC - 其目的是为了保持组件;)

1

其实有一些其他的方式,西装我的需求最好。使用反射(assebly.loadfrom)是不愉快的,需要我的代码进行很多更改。但是,您可以向appDomain.AssemblyResolve事件添加处理程序,并在找不到要求的程序集的位置时显示它。

static void Main() 
     { 
      AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve); 

      Application.EnableVisualStyles(); 
      Application.SetCompatibleTextRenderingDefault(false); 
      Application.Run(new Form1()); 
     } 

     static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args) 
     { 
      return Assembly.LoadFrom("C:\\TestAssembly.dll"); 
     } 
0

我建议您使用GAC或分发所有依赖的DLL与EXE。否则,您可能会冒险得到模糊的版本控制错误或突然停止工作的应用程序。

另外,不要忘记,如果您的共享代码在网络共享上,您可能需要修改每台计算机的安全设置。

Regards

相关问题