2010-06-04 16 views
5

Después de leer el artículo How the Runtime Locates Assemblies de MSDN y también de leer this, todavía no estoy seguro de cómo se resuelven los ensamblados nombrados débilmente en el tiempo de ejecución.Conjunto .Net que resuelve la confusión

Ej. si tengo una referencia a algún archivo dll en mi proyecto, compilo y despliegue, ¿recogerá una nueva versión del archivo dll al que se hace referencia si solo reemplazo el anterior al que se hizo referencia en tiempo de compilación? ¿Importa si la referencia en el archivo de proyecto especifica la versión, etc. del ensamblado al que se hace referencia?

Cualquier iluminación bienvenida

Respuesta

0

La respuesta a sus preguntas es sí, siempre y cuando siempre y cuando tenga Specific Version conjunto de False en las propiedades de la referencia a la asamblea.

+0

Esto no es correcto, solo aplica en tiempo de compilación. –

1

El mejor lugar que he encontrado para aprender sobre esto es en Grimes Fusion Workshop como se puede encontrar here. Es muy completo, aunque fácil de entender.

0

Si no se menciona la versión, recogerá la referencia; si se menciona la versión, intentará encontrar y cargar el conjunto que coincida con la firma con la versión mencionada. si no se encuentra arrojará una excepción. Para resolver esto, puede hacer una redirección de enlace de ensamblaje.

2

Si no se encuentra el ensamblaje en el GAC, el CLR lo buscará en la "ruta de inspección". Que por defecto es solo el directorio que contiene el EXE. Solo busca una coincidencia en el nombre del ensamblado y dejará de buscar en la primera coincidencia.

Luego, verifica el número [AssemblyVersion]. Si no coincide, obtendrá una excepción, no seguirá buscando otro ensamblaje con el mismo nombre. Siempre que tenga problemas de resolución, querrá usar la utilidad Fuslogvw.exe. Le muestra exactamente dónde se veía el CLR y qué salió mal.

+0

¿Las referencias débiles molestan con el número de versión? Mi experiencia es que solo coincide con el nombre si estás en la ruta de exploración (no estoy seguro acerca de GAC, pero entonces no sería débil). –

+1

Si tiene un nombre fuerte o no, no importa. Solo el GAC es capaz de resolver un conjunto referenciado por número de versión. Las búsquedas de ruta de sondeo solo se realizan por nombre, el número de versión aún se verifica después de encontrar un ensamblado. –