Tengo un nombre de archivo, como "Foo.dll", para una biblioteca que sé que está en el directorio bin. Quiero crear un objeto Assembly para él. Intento crear una instancia de este objeto de una clase que no es una página, por lo que no tengo el objeto Request para obtener la ruta. ¿Cómo obtengo el camino que necesito para usar Assembly.Load()?Cargar un ensamblaje desde el contenedor en ASP.NET
Respuesta
Assembly.Load no debería requerir una ruta de archivo, sino que requiere un AssemblyName. Si sabe que su ensamblado se encuentra en la ruta de búsqueda estándar (es decir, el directorio bin), no necesita conocer la ruta del disco del ensamblado ... solo necesita conocer su nombre de ensamblado. En el caso de que su montaje, suponiendo que no necesita una versión específica, la cultura, etc., el nombre del ensamblado debe ser sólo "Foo":
Assembly fooAssembly = Assembly.Load("Foo");
Si necesita cargar una versión específica, haría lo siguiente:
Assembly fooAssembly = Assembly.Load("Foo, Version=1.1.2, Culture=neutral");
general, que desea utilizar Assembly.Load, en lugar de Assembly.LoadFrom o Assembly.LoadFile. LoadFrom y LoadFile funcionan fuera del proceso de fusión estándar, y pueden provocar que los ensamblajes se carguen más de una vez, cargados desde ubicaciones inseguras, etc. Assembly.Load realiza una carga "estándar", buscando ubicaciones de ensamblaje estándar como bin, GAC , etc., y aplica todas las verificaciones de seguridad estándar.
¿Funciona Assembly.LoadFile (...)?
Er, seguro si conoce la ruta absoluta. Supongo que esa es la parte importante de la pregunta. –
Según su descripción, parece que se trata de una aplicación web, por lo tanto, a menos que esté en un hilo asíncrono generado por una solicitud, aún debe tener acceso al HttpContext
. Desde allí, puede usar Server.MapPath() en el archivo que necesita.
Un ejemplo completo como el que uso, si ayuda. Recursos es una carpeta en la raíz de la Biblioteca DLL (Asamblea)
public static string ReadAssemblyResourceFile(string resourcefilename)
{
using (var stream = Assembly.Load("GM.B2U.DAL").GetManifestResourceStream("GM.B2U.DAL.Resources."
+ resourcefilename)) {
if (stream == null) throw new MyExceptionDoNotLog($"GM.B2U.DAL.Resources.{resourcefilename} not found in the Assembly GM.B2U.DAL.dll !");
using (var reader = new StreamReader(stream))
{
return reader.ReadToEnd();
}
}
}
llamar a la función:
[TestMethod()]
public void ReadAssemblyResourceFileTest()
{
var res = SetupEngine.ReadAssemblyResourceFile("newdb.sql");
Assert.IsNotNull(res);
}
ps. No olvide marcar "Acción de compilación" como "Recurso incrustado" (en la ventana de propiedades) de cada archivo de recursos.
- 1. C#: ¿Cómo cargar el ensamblaje desde GAC?
- 2. Cargar biblioteca del contenedor
- 3. Cargar un ResourceDictionary de un ensamblaje
- 4. ¿Cómo ejecuto un contenedor desde el interior de un contenedor?
- 5. Cargar un archivo en la carpeta del contenedor S3 mediante el SDK de ASP.NET
- 6. ¿Por qué es posible cargar tipos en un ensamblaje sin firmar desde un ensamblaje firmado usando reflexión?
- 7. ¿Cómo cargar un ensamblaje desde un Stream o byte [] en WP7?
- 8. Cargar ensamblaje con permisos personalizados
- 9. cargar archivo dentro de un contenedor
- 10. Cómo cargar un objeto compartido nativo, en un contenedor, desde una aplicación de Android?
- 11. C# ConfigurationManager.GetSection no pudo cargar el archivo o el ensamblaje
- 12. Cargando con ResourceBundle desde el interior de un contenedor
- 13. No se pudo cargar el archivo o el ensamblaje
- 14. "Cargar" un archivo desde el shell django
- 15. C# Cargar ensamblaje de espacio aislado
- 16. No se pudo cargar el error de ensamblaje de trabajos en Quartz.NET
- 17. MEF y MVC 3: cómo cargar vistas incrustadas dinámicamente desde el contenedor mef?
- 18. cargar parámetros desde un archivo en Python
- 19. Cargar ensamblaje en AppDomain nuevo sin cargarlo en Parent AppDomain
- 20. Uso de VirtualPathProvider para cargar vistas ASP.NET MVC desde DLL
- 21. Cargar ensamblaje actual en diferentes dominios de aplicación
- 22. Control de contenedor personalizado ASP.NET
- 23. No se pudieron cargar las páginas web de ensamblaje. ¿Depósito versión 2 en el host?
- 24. Cargar un WPF BitmapImage desde un System.Drawing.Bitmap
- 25. Cargar un ensamblado desde un recurso incrustado
- 26. ¿Cómo cargar un UIView desde un NIB?
- 27. ¿Cómo accedo al contenedor autofac en el controlador ASP.NET MVC3?
- 28. cargar a ftp asp.net
- 29. Cargar comprobando un sitio web ASP.NET
- 30. ASP.NET MVC - Cargar un archivo con SignalR
alternativamente si ya tiene un objeto de un tipo en ese ensamblaje puede hacer algo como: obj.GetType(). –