2009-08-28 1 views
6

Da AppDomain.AppendPrivatePath() veraltet ist, versuche ich herauszufinden, wie ich einen PrivateBinPath für die aktuelle AppDomain in meinem Projekt angeben kann, ohne eine neue AppDomain zu erstellen und später darauf zugreifen zu können.Wie kann ordnungsgemäß auf die PrivateBinPath-Eigenschaft der aktuellen Anwendungsdomäne zugegriffen werden?

Ich weiß, dass ich das PrivateBinPath auf einem AppDomainSetup Objekt festlegen kann (was in Ordnung wäre, wenn ich eine neue AppDomain schaffen wollte), und ich weiß auch, dass ich es zu meinem app.config wie so hinzufügen:

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

Wenn Sie diesen Eintrag jedoch zu meiner app.config hinzufügen, ist die AppDomain.CurrentDomain.SetupInformation.PrivateBinPath-Eigenschaft null.

Antwort

6

Verwendung

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

Nach http://msdn.microsoft.com/en-us/library/823z9h8w.aspx die privatePath ist bereits als „Verzeichnisse der Anwendung interpretiert Basisverzeichnis "... so vermute ich, dass die Verwendung von .\ die Dinge irgendwie vermasselt ...

+2

Ich habe versucht, mit diesem, aber nicht für mich gearbeitet. Die AppDomain.CurrentDomain.SetupInformation.PrivateBinPath-Eigenschaft ist immer noch null. –

+1

Es scheint, dass die AppDomain.CurrentDomain.SetupInformation.PrivateBinPath Null bleibt, wenn ein Suchpfad über eine app.config-Datei festgelegt ist, aber ich konnte bestätigen, dass der Suchpfad in diesem Fall tatsächlich noch verwendet wird. Das Aufrufen von Assembly.Load und das Angeben des Namens einer Assembly in meinem Abfragepfad ist erfolgreich. –

+1

Wie in diesem Kommentar empfohlen http://stackoverflow.com/questions/33353420/appdomain-currentdomain-setupinformation-privebinpath-is-null?noredirect=1#comment54508987_33353420 "SetupInformation.PrivateBinPath" ist immer Null für die primäre appdomain. – bitbonk

3

Aus der Dokumentation:

Wenn die angegebenen Verzeichnisse für PrivateBinPath stehen nicht unter Application, sie werden ignoriert.

Sie müssen also sicherstellen, dass die Pfade, die Sie hinzufügen, unter ApplicationBase sind.

Dies funktioniert jedoch nur mit app.config. Wenn Sie diese zur Laufzeit tun müssen, verwenden Sie das AssemblyResolve Ereignis wie in der Dokumentation beschrieben:

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

+0

Der Pfad ist unter ApplicationBase – scottm

Verwandte Themen