如何将.dll文件与使用它们的.exe文件分开?

时间:2009-06-30 08:44:15

标签: .net dll

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

5 个答案:

答案 0 :(得分:5)

您可以使用app.config中的<probing> element来指定查找依赖项的位置。我相信这必须是exe的位置下的目录,但不是在磁盘上的任意位置。

有关如何将其挂起的详细信息,请参阅"Locating the assembly through codebases or probing"

答案 1 :(得分:2)

还要考虑GAC - 它的目的是保存程序集;)

答案 2 :(得分: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");
        }

答案 3 :(得分:0)

您可以使用Reflection从指定路径加载dll,然后访问其中的所有类和方法,尽管这将是一项艰苦的工作!你也会失去intellisense的好处,但有可能,请参阅:

http://www.codeproject.com/KB/cs/csharpreflection.aspx

答案 4 :(得分:0)

我建议您使用GAC或使用EXE分发所有相关DLL。否则,您可能会遇到模糊不清的版本错误或突然停止工作的应用程序。

此外,请不要忘记,如果您的共享代码位于网络共享上,则可能还需要修改每个计算机的安全设置。

此致