2011-03-07 7 views
12

Necesito ubicar archivos DLL para mi aplicación dentro de la subcarpeta. Es posible ajustar esta subcarpeta a través de app.config:¿Es posible configurar la ruta de prueba del ensamblaje sin app.config?

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

Pero por algunas razones que no quiero utilizar el archivo .config en este caso. ¿Es posible establecer una ruta de prueba directamente desde el código de la aplicación? Estoy seguro de que las DLL siempre estarán dentro de esta carpeta.

¿Alguna idea?

Respuesta

14

La trayectoria de sondeo se define por la AppDomainSetup para el dominio de aplicación principal. En el host CLR predeterminado, ese AD se crea automáticamente antes de que el código comience a ejecutarse. La única forma de configurar su configuración es usar un archivo .config, debe tener el mismo nombre que el exe. Luego de que se congela, cualquier cambio que realice en su código no tendrá efecto.

Las soluciones provisionales son crear su propio AD para que pueda cambiar su configuración o implementar el evento AppDomain.AssemblyResolve. Ninguno de los cuales se compara favorablemente con las soluciones simples: un archivo .config o simplemente manteniendo el ensamblado en el directorio correcto. Ymmv.

+0

Y si es una aplicación web, ¡no hay un exe !? – Legends

4

Se podía suscribirse a AppDomain.CurrentDomain.AssemblyResolve y comprobar su ubicación específica en el controlador ...

+0

Parece ser una solución ligeramente complicada. No necesito resolver asambleas manualmente, es suficiente para usar el sondeo estándar de .Net para mi subcarpeta. –

+2

Puede llamar a AppDomain.CurrentDomain.AppendPrivatePath ("libs") y eso funcionará, pero el método está en desuso, por lo que probablemente no sea una buena idea. Usar el equivalente no desaprobado parece requerir la creación de un nuevo dominio de aplicación, que supongo que no querrás hacer ... –

Cuestiones relacionadas