是否可以设置没有app.config的汇编探测路径?

Vic*_*din 12 .net probing

我需要在子文件夹中为我的应用程序放置DLL.可以通过app.config设置此子文件夹:

  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="Libs"/>
    </assemblyBinding>
  </runtime>
Run Code Online (Sandbox Code Playgroud)

但由于某些原因,我不想在这种情况下使用.config文件.是否可以直接从应用程序代码设置探测路径?我确信DLL总是在这个文件夹中.

有任何想法吗?

Han*_*ant 13

探测路径由主应用程序域的AppDomainSetup定义.在默认的CLR主机中,在代码开始运行之前会自动创建该AD.配置其设置的唯一方法是使用.config文件,它必须与exe具有相同的名称.在冻结之后,您在代码中所做的任何更改都不会产生任何影响.

解决方法是创建自己的AD,以便您可以更改其设置或实现AppDomain.AssemblyResolve事件.这两者都不比简单的解决方案好:.config文件或只是将程序集保存在正确的目录中.因人而异.


Fer*_*own 5

您可以订阅 AppDomain.CurrentDomain.AssemblyResolve 并检查处理程序中的具体位置...

  • 您可以调用 AppDomain.CurrentDomain.AppendPrivatePath("libs") 这将起作用,但该方法已被弃用,因此可能不是一个好主意。要使用未弃用的等效项似乎需要创建一个新的 AppDomain,我想您不会想要这样做...... (2认同)