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