Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
La instancia AssemblyLoadContext.Default es responsable de localizar las dependencias de un ensamblado. En este artículo se describe la lógica de sondeo de la AssemblyLoadContext.Default instancia.
Propiedades de sondeo configuradas por el host
Cuando se inicia el runtime, el host de tiempo de ejecución proporciona un conjunto de propiedades de sondeo con nombre que configuran las rutas de acceso de sondeo de AssemblyLoadContext.Default.
Cada propiedad de sondeo es opcional. Si está presente, cada propiedad es un valor de cadena que contiene una lista delimitada de rutas de acceso absolutas. El delimitador es ';' en Windows y ':' en todas las demás plataformas.
| Nombre de propiedad | Description |
|---|---|
TRUSTED_PLATFORM_ASSEMBLIES |
Lista de rutas de acceso de archivos de ensamblaje de plataformas y aplicaciones. |
PLATFORM_RESOURCE_ROOTS |
Lista de rutas de directorio para buscar ensamblajes de recursos satélite. |
NATIVE_DLL_SEARCH_DIRECTORIES |
Lista de rutas de acceso de directorio para buscar bibliotecas no administradas (nativas). |
APP_PATHS |
Lista de rutas de directorios para buscar ensamblados administrados. |
¿Cómo se rellenan las propiedades?
Hay dos escenarios principales para rellenar las propiedades en función de si existe el <archivo myapp>.deps.json .
- Cuando el archivo *.deps.json está presente, se analiza para rellenar las propiedades de sondeo.
- Cuando el archivo *.deps.json no está presente, se supone que el directorio de la aplicación contiene todas las dependencias. El contenido del directorio se usa para rellenar las propiedades de sondeo.
Además, los archivos *.deps.json para los marcos a los que se hace referencia se analizan de forma similar.
La variable DOTNET_ADDITIONAL_DEPS de entorno se puede usar para agregar dependencias adicionales.
dotnet.exe también contiene un parámetro opcional --additional-deps para establecer este valor en el inicio de la aplicación.
Nota:
La DOTNET_ADDITIONAL_DEPS variable de entorno y la --additional-deps opción de línea de comandos solo se aplican a las aplicaciones dependientes del marco.
Estas opciones se omiten para las aplicaciones independientes.
Para obtener más información, consulte Implementaciones dependientes de la plataforma frente a implementaciones autocontenidas.
La APP_PATHS propiedad no se rellena de forma predeterminada y se omite para la mayoría de las aplicaciones.
Se puede acceder a la lista de todos los archivos *.deps.json usados por la aplicación a través System.AppContext.GetData("APP_CONTEXT_DEPS_FILES")de .
¿Cómo veo las propiedades de sondeo del código administrado?
Cada propiedad está disponible llamando a la función AppContext.GetData(String) con el nombre de propiedad de la tabla anterior.
Cómo depurar la construcción de las propiedades de sondeo
El host en tiempo de ejecución de .NET Core generará mensajes de seguimiento útiles cuando se habiliten determinadas variables de entorno:
| Variable de entorno | Description |
|---|---|
DOTNET_HOST_TRACE=1 |
Habilita el seguimiento. |
DOTNET_HOST_TRACEFILE=<path> |
Realiza un seguimiento de una ruta de acceso de archivo en lugar del elemento stderr predeterminado. |
DOTNET_HOST_TRACE_VERBOSITY |
Establece la verbosidad de 1 (mínima) a 4 (máxima). |
Para obtener más información, consulte DOTNET_HOST_TRACE variables de entorno.
Sondeo predeterminado de ensamblado administrado
Al realizar un sondeo para buscar un ensamblado administrado, AssemblyLoadContext.Default busca en orden en:
- Archivos que coinciden con el AssemblyName.Name en
TRUSTED_PLATFORM_ASSEMBLIES(tras eliminar las extensiones de archivo). - Archivos de ensamblado en
APP_PATHScon extensiones de archivo comunes.
Sondeo de ensamblado satélite (recurso)
Para buscar un ensamblado satélite para una cultura específica, construya una serie de rutas de acceso de archivos.
Para cada ruta de acceso en PLATFORM_RESOURCE_ROOTS y luego en APP_PATHS, anexe la cadena CultureInfo.Name, un separador de directorios, la cadena AssemblyName.Name y la extensión.dll.
Si existe algún archivo coincidente, intente cargarlo y devolverlo.
Sondeo de biblioteca no administrada (nativa)
El algoritmo para sondear la biblioteca no administrada de runtime es idéntico en todas las plataformas. Sin embargo, dado que la plataforma subyacente realiza la carga real de la biblioteca no administrada, el comportamiento observado puede ser ligeramente diferente.
Compruebe si el nombre de biblioteca proporcionado representa una ruta de acceso absoluta o relativa.
Si el nombre representa una ruta de acceso absoluta, use el nombre directamente para todas las operaciones posteriores. De otra forma, use el nombre y cree combinaciones definidas por la plataforma para que se tengan en cuenta. Las combinaciones constan de prefijos específicos de la plataforma (por ejemplo,
lib) o sufijos (por ejemplo,.dll,.dyliby.so). Esta no es una lista exhaustiva y no representa el esfuerzo exacto realizado en cada plataforma. Es solo un ejemplo de lo que se considera. Para obtener más información, consulte carga de biblioteca nativa.El nombre y, en el caso de las rutas de acceso relativas, cada combinación, se usan después en los siguientes pasos. La primera vez que se completa la carga correctamente devuelve inmediatamente el manipulador a la biblioteca cargada.
Anéxelo a cada ruta de acceso proporcionada en la propiedad
NATIVE_DLL_SEARCH_DIRECTORIESe intente cargarla.Si DefaultDllImportSearchPathsAttribute no está definido en el ensamblado de llamada o p/invoke o se define e incluye
DllImportSearchPath.AssemblyDirectory, anexe el nombre o la combinación al directorio del ensamblado que realiza la llamada e intente cargar.Úselo directamente para cargar la biblioteca.
Indica que la biblioteca no se pudo cargar.