是否从其他文件夹加载DLL引用?

问题描述 投票:22回答:3

我有一个引用DLL的.NET控制台应用程序。如果DLL与EXE位于同一文件夹中,则它可以正常运行,但我想将DLL置于另一个文件夹中。我该怎么办?

.net dll reference
3个回答
19
投票

如果DLL在子文件夹中,则可以将此文件夹添加到AppDomain private path

AppDomain的专用bin路径一旦创建AppDomain后就无法更改(AppDomain.AppendPrivatePath已过时),如果您不想创建新的AppDomain,则可以修改probing element ]在App.config中。

如果不在子文件夹中,情况会变得更加复杂,您可以使用其完整路径来load the assembly,但是如果它引用其他程序集,则CLR将无法解析依赖关系。

如果要解决依赖关系,可以将处理程序添加到AppDomain.AssemblyResolve并在特定文件夹中获取所需的程序集。

另一种可能性是将该DLL(和依赖项)放在GAC中。


2
投票

如果DLL是动态加载的,只需指定它的完整路径。如果它是静态的,或者您觉得喜欢,请将库路径添加到PATH环境变量中。是的,这个DOS遗物仍然存在。

[另外,请阅读LoadLibrary()API上的文档,以更好地了解DLL的加载。


0
投票

您可以让应用程序查看您可以在配置部分中指定的某些目录。然后,您可以在应用程序开始时加载它们。我真的不知道您要做什么,但这可能是一个解决方案。

Assembly.Load("Assembly.Name")

如果您不构建某种插件体系结构,我会考虑为什么要这样做。

© www.soinside.com 2019 - 2024. All rights reserved.