2009-08-28 41 views
6

由于AppDomain.AppendPrivatePath()已经过时,我试图弄清楚如何为我的项目中的当前AppDomain指定一个PrivateBinPath,而不需要启动一个全新的AppDomain,并且可以稍后访问它。如何正确访问当前AppDomain的PrivateBinPath属性?

我知道我可以设置一个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属性为null。

回答

6

使用

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

根据http://msdn.microsoft.com/en-us/library/823z9h8w.aspxprivatePath已经被解释为“应用程序的子目录基地目录“...所以我怀疑使用.\是不知为什么搞砸了...

+2

我试过使用这个,但没有为我工作。 AppDomain.CurrentDomain.SetupInformation.PrivateBinPath属性仍然为空。 –

+1

当通过app.config文件设置探测路径时,似乎AppDomain.CurrentDomain.SetupInformation.PrivateBinPath保持为空,但我能够确认在这种情况下探测路径仍然被实际使用。调用Assembly.Load并在我的探测路径中指定程序集的名称成功。 –

+1

正如此评论中所述:http://stackoverflow.com/questions/33353420/appdomain-currentdomain-setupinformation-privatebinpath-is-null?noredirect=1#comment54508987_33353420 SetupInformation.PrivateBinPath对于主应用程序域始终为空。 – bitbonk

3

从文档:

如果 PrivateBinPath指定的目录都下 ApplicationBase,它们将被忽略。

因此,您需要确保您添加的路径在ApplicationBase下。

但是这只适用于app.config。如果你需要在运行时要做到这一点,使用如在文档中描述的AssemblyResolve事件:

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

+0

该路径在ApplicationBase – scottm

相关问题