我有一个引用DLL的.NET控制台应用程序。如果DLL与EXE位于同一文件夹中,则它可以正常运行,但我想将DLL置于另一个文件夹中。我该怎么办?
如果DLL在子文件夹中,则可以将此文件夹添加到AppDomain private path。
AppDomain
的专用bin路径一旦创建AppDomain
后就无法更改(AppDomain.AppendPrivatePath
已过时),如果您不想创建新的AppDomain
,则可以修改probing element ]在App.config中。
如果不在子文件夹中,情况会变得更加复杂,您可以使用其完整路径来load the assembly,但是如果它引用其他程序集,则CLR将无法解析依赖关系。
如果要解决依赖关系,可以将处理程序添加到AppDomain.AssemblyResolve并在特定文件夹中获取所需的程序集。
另一种可能性是将该DLL(和依赖项)放在GAC中。
如果DLL是动态加载的,只需指定它的完整路径。如果它是静态的,或者您觉得喜欢,请将库路径添加到PATH环境变量中。是的,这个DOS遗物仍然存在。
[另外,请阅读LoadLibrary()API上的文档,以更好地了解DLL的加载。
您可以让应用程序查看您可以在配置部分中指定的某些目录。然后,您可以在应用程序开始时加载它们。我真的不知道您要做什么,但这可能是一个解决方案。
Assembly.Load("Assembly.Name")
如果您不构建某种插件体系结构,我会考虑为什么要这样做。