是否可以在不使用 app.config 的情况下设置程序集探测路径?
我需要将我的应用程序的 DLL 放置在子文件夹中。可以通过 app.config 设置此子文件夹:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Libs"/>
</assemblyBinding>
</runtime>
但由于某些原因,我不想在这种情况下使用 .config 文件。是否可以直接从应用程序代码设置探测路径?我确信 DLL 始终位于此文件夹中。
有什么想法吗?
I need to place DLLs for my application inside subfolder. It is possible to set this subfolder via app.config:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<probing privatePath="Libs"/>
</assemblyBinding>
</runtime>
But for some reasons I don't want to use .config file in this case. Is it possible to set probing path directly from application code? I am sure that DLLs always be within this folder.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
探测路径由主应用程序域的 AppDomainSetup 定义。在默认的 CLR 主机中,该 AD 会在代码开始运行之前自动创建。配置其设置的唯一方法是使用 .config 文件,它必须与 exe 具有相同的名称。之后它会被冻结,您在代码中所做的任何更改都不会生效。
解决方法是创建您自己的 AD,以便您可以更改其设置或实现 AppDomain.AssemblyResolve 事件。这两种方法都无法与简单的解决方案相比:.config 文件或仅将程序集保留在正确的目录中。嗯嗯。
The probing path is defined by the AppDomainSetup for the primary app domain. In the default CLR host, that AD gets automatically created before your code starts running. The only way to configure its setup is to use a .config file, it must have the same name as the exe. After which it is frozen, any changes you make in your code won't have an effect.
Workarounds are to create your own AD so you can change its setup or implementing the AppDomain.AssemblyResolve event. Neither of which compares favorably to the simple solutions: a .config file or just keeping the assembly in the right directory. Ymmv.
您可以订阅 AppDomain.CurrentDomain.AssemblyResolve 并检查处理程序中的具体位置...
You could just subscribe to AppDomain.CurrentDomain.AssemblyResolve and check your specific location in your handler...