【问题标题】:How to properly access the PrivateBinPath property of the current AppDomain?如何正确访问当前 AppDomain 的 PrivateBinPath 属性?
【发布时间】:2009-08-28 16:45:50
【问题描述】:

由于 AppDomain.AppendPrivatePath() 已过时,我试图弄清楚如何在我的项目中为当前 AppDomain 指定 PrivateBinPath,而无需启动一个全新的 AppDomain,并且以后能够访问它。

我知道我可以在 AppDomainSetup 对象上设置 PrivateBinPath(如果我想创建一个新的 AppDomain 就可以了),我也知道我可以像这样将它添加到我的 app.config 中:

 <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath=".\AlternateLookupPath" />
    </assemblyBinding>
  </runtime>

但是,当将此条目添加到我的 app.config 时,AppDomain.CurrentDomain.SetupInformation.PrivateBinPath 属性为空。

【问题讨论】:

    标签: c# appdomain


    【解决方案1】:

    使用

      <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
          <probing privatePath="AlternateLookupPath" />
        </assemblyBinding>
      </runtime>
    

    根据http://msdn.microsoft.com/en-us/library/823z9h8w.aspx privatePath 已经被解释为“应用程序基目录的子目录”...所以我怀疑使用.\ 会以某种方式搞砸...

    【讨论】:

    • 我尝试使用它,但对我不起作用。 AppDomain.CurrentDomain.SetupInformation.PrivateBinPath 属性仍然为空。
    • 当通过 app.config 文件设置探测路径时,AppDomain.CurrentDomain.SetupInformation.PrivateBinPath 似乎仍然为空,但我能够确认探测路径实际上仍在使用这个案例。调用 Assembly.Load 并在我的探测路径中指定程序集的名称成功。
    • 正如此评论中所建议的,stackoverflow.com/questions/33353420/… SetupInformation.PrivateBinPath 对于主应用程序域始终为空。
    【解决方案2】:

    来自文档:

    如果指定的目录为 PrivateBinPath 不在 ApplicationBase,它们被忽略。

    所以,您需要确保您添加的路径在 ApplicationBase 下。

    但这仅适用于 app.config。如果您需要在运行时执行此操作,请使用文档中描述的 AssemblyResolve 事件:

    http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx

    【讨论】:

    • 路径在ApplicationBase下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 2017-05-30
    • 1970-01-01
    相关资源
    最近更新 更多