通常,您必须将应用程序使用的所有.dll文件放在与.exe文件相同的位置。我想将这些库保存在其他专用文件夹中,只显示我的应用程序在哪里查找它们(通过app.config中的某个路径或类似的东西)。我该怎么做?
答案 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的好处,但有可能,请参阅:
答案 4 :(得分:0)
我建议您使用GAC或使用EXE分发所有相关DLL。否则,您可能会遇到模糊不清的版本错误或突然停止工作的应用程序。
此外,请不要忘记,如果您的共享代码位于网络共享上,则可能还需要修改每个计算机的安全设置。
此致