2009-08-28 12 views
6

Dado que AppDomain.AppendPrivatePath() es obsoleto, estoy intentando averiguar cómo especificar un PrivateBinPath para el AppDomain actual en mi proyecto sin hacer girar un AppDomain completamente nuevo, y poder acceder a él más tarde.¿Cómo acceder correctamente a la propiedad PrivateBinPath del AppDomain actual?

Sé que puedo establecer el PrivateBinPath en un objeto AppDomainSetup (que estaría bien si quería crear un nuevo dominio de aplicación), y también sé que puedo añadir a mi app.config de este modo:

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

Sin embargo, al agregar esta entrada a mi app.config, la propiedad AppDomain.CurrentDomain.SetupInformation.PrivateBinPath es nula.

Respuesta

6

uso

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

Según http://msdn.microsoft.com/en-us/library/823z9h8w.aspx la privatePath ya se interpreta como "subdirectorios de la aplicación de directorio de base "... así que sospecho que usar .\ de alguna manera está estropeando las cosas ...

+2

Intenté usar esto, pero no funcionó para mí La propiedad AppDomain.CurrentDomain.SetupInformation.PrivateBinPath sigue siendo nula. –

+1

Parece que AppDomain.CurrentDomain.SetupInformation.PrivateBinPath permanece nulo cuando se establece una ruta de prueba a través de un archivo app.config, pero pude confirmar que la ruta de exploración todavía se está usando en este caso. Llamar a Assembly.Load y especificar el nombre de un ensamblaje en mi ruta de exploración fue exitoso. –

+1

Tal como se ha sugerido en este comentario http://stackoverflow.com/questions/33353420/appdomain-currentdomain-setupinformation-privatebinpath-is-null?noredirect=1#comment54508987_33353420 'SetupInformation.PrivateBinPath' siempre es nulo para el dominio principal de la aplicación. – bitbonk

3

A partir de los documentos:

Si los directorios especificados para PrivateBinPath no están bajo ApplicationBase, son ignorados.

Por lo tanto, debe asegurarse de que las rutas que se agreguen estén bajo ApplicationBase.

Esto solo funciona con app.config sin embargo. Si necesita hacer esto en tiempo de ejecución, utilice el evento AssemblyResolve como se describe en los documentos:

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

+0

La ruta está bajo ApplicationBase – scottm

Cuestiones relacionadas