如何正确访问当前 AppDomain 的 PrivateBinPath 属性?
Posted
技术标签:
【中文标题】如何正确访问当前 AppDomain 的 PrivateBinPath 属性?【英文标题】:How to properly access the PrivateBinPath property of the current AppDomain? 【发布时间】: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 属性为空。
【问题讨论】:
【参考方案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 并在我的探测路径中指定程序集的名称成功。 正如此评论中所建议的,***.com/questions/33353420/…SetupInformation.PrivateBinPath
对于主应用程序域始终为空。【参考方案2】:
来自文档:
如果指定的目录为 PrivateBinPath 不在 ApplicationBase,它们被忽略。
所以,您需要确保您添加的路径在 ApplicationBase 下。
但这仅适用于 app.config。如果您需要在运行时执行此操作,请使用文档中描述的 AssemblyResolve 事件:
http://msdn.microsoft.com/en-us/library/system.appdomain.assemblyresolve.aspx
【讨论】:
路径在ApplicationBase下以上是关于如何正确访问当前 AppDomain 的 PrivateBinPath 属性?的主要内容,如果未能解决你的问题,请参考以下文章