c# - pudo - Mensaje de error ''No se puede cargar uno o más de los tipos solicitados. Recupere la propiedad LoaderExceptions para obtener más información.
no se pudo cargar el tipo system web mvc viewpage dynamic>'' (30)
He desarrollado una aplicación utilizando Entity Framework , SQL Server 2000, Visual Studio 2008 y Enterprise Library.
Funciona absolutamente bien localmente, pero cuando implemento el proyecto en nuestro entorno de prueba, aparece el siguiente error:
No se puede cargar uno o más de los tipos solicitados. Recupera la propiedad LoaderExceptions para más información
Seguimiento de la pila: en System.Reflection.Module._GetTypesInternal (StackCrawlMark & stackMark)
en System.Reflection.Assembly.GetTypes ()
en System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadTypesFromAssembly (Cargando contexto de contexto)
en System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.InternalLoadAssemblyFromCache (contexto LoadingContext)
en System.Data.Metadata.Edm.ObjectItemCollection.AssemblyCacheEntry.LoadAssemblyFromCache (Ensamblaje, Conjuntos de referencia boolean loadReferenced, Dictionary
2 knownAssemblies, Dictionary
2 & typesInLoading, List`1 & errors)en System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyFromCache (ObjectItemCollection objectItemCollection, Assembly Assembly, Boolean loadReferencedAssemblies)
en System.Data.Metadata.Edm.ObjectItemCollection.LoadAssemblyForType (tipo de tipo)
en System.Data.Metadata.Edm.MetadataWorkspace.LoadAssemblyForType (Type type, Assembly callingAssembly)
en System.Data.Objects.ObjectContext.CreateQuery [T] (String queryString, ObjectParameter [] parameters)
Entity Framework parece tener problemas, ¿alguna pista de cómo solucionarlo?
Agregar mi problema / solución específica a esto, ya que este es el primer resultado de este mensaje de error. En mi caso, el error se recibió cuando implementé una segunda aplicación dentro de la carpeta de mi primera aplicación en IIS . Ambos definían una cadena de conexión con el mismo nombre, lo que resultó en una aplicación secundaria que tuvo un conflicto y, a su vez, generó este mensaje de error no obvio (para mí). Se resolvió añadiendo:
<clear/>
en el bloque de cadenas de conexión de la aplicación web secundaria, que le impidió heredar las cadenas de conexión de los archivos web.config más altos en la jerarquía, por lo que parece:
<connectionStrings>
<clear/>
<add name="DbContext" connectionString="MySERVER" providerName="System.Data.SqlClient" />
</connectionStrings>
Una pregunta de referencia sobre el desbordamiento de la pila que me ayudó una vez que determiné lo que estaba sucediendo era ¿Heredará una aplicación secundaria de su web.config principal? .
Asegúrese de permitir aplicaciones de 32 bits en IIS si implementó en IIS. Puede definir esto en la configuración de su grupo de aplicaciones actual.
Cambié la propiedad de versión específica de las referencias a falso y eso ayudó.
Como se mencionó anteriormente, generalmente es el caso de un ensamblaje que no está allí.
Para saber exactamente qué ensamblaje le falta, adjunte su depurador, establezca un punto de interrupción y cuando vea el objeto de excepción, profundice en la propiedad ''LoaderExceptions''. La asamblea que falta debe estar allí.
¡Espero eso ayude!
Construyo algunos proyectos para SharePoint y, por supuesto, los implementé. Una vez sucedió.
Encontré un ensamblaje antiguo en C: / Windows / assembly / temp / xxx (con FarManager), lo eliminé después de reiniciar y todos los proyectos creados.
Tengo una pregunta para MSBuild, porque en los ensamblados de proyectos vinculados como proyectos y cada ensamblaje está marcado como "Copia local", pero no del GAC.
Dos posibles soluciones:
- Está compilando en modo de lanzamiento pero implementando una versión compilada más antigua desde su directorio de depuración (o viceversa).
- No tiene instalada la versión correcta de .NET Framework en su entorno de prueba.
En caso de que ninguna de las otras respuestas te ayude:
Cuando tuve este problema, resultó que mi servicio de Windows se había creado para una plataforma x64, y ejecutaba inadvertidamente la versión de 32 bits de InstallUtil.exe. Así que asegúrese de estar usando la versión correcta de InstallUtil para la plataforma para la que construyó.
Encontré este error con una aplicación ASP.NET 4 + SQL Server 2008 R2 + Entity Framework 4.
Funcionaría bien en mi máquina de desarrollo (Windows Vista de 64 bits). Luego, cuando se implementa en el servidor ( Windows Server 2008 R2 SP1), funcionará hasta que se agote el tiempo de espera de la sesión. Así que implementamos la aplicación y todo se veía bien y luego lo dejamos por más de 20 minutos de tiempo de espera de sesión y luego se lanzaba este error.
Para resolverlo, utilicé este código en el blog de Ken Cox para recuperar la propiedad LoaderExceptions.
Para mi situación, la DLL que faltaba era Microsoft.ReportViewer.ProcessingObjectModel
(versión 10). Esta DLL debe instalarse en el GAC de la máquina en la que se ejecuta la aplicación. Puede encontrarlo en el paquete redistribuible de Microsoft Report Viewer 2010 disponible en el sitio de descarga de Microsoft.
Estaba actualizando un sitio web a través de FTP. Supongo que el sitio web estaba en uso y al intentar actualizar la carpeta bin, algunos de los archivos DLL deben estar bloqueados y no se actualizaron.
Allí vi la página de error 500 y, al configurar el modo customErrors en Off, vi el mensaje de error mencionado por el OP.
El problema fue que no vi las fallas enumeradas en el programa FTP. Volví a intentar esos fallos fallidos y subieron. El último archivo DLL actualizado. Entonces el sitio funcionó.
Establezca el modo IIS de 32 bits en verdadero, el modo de depuración en verdadero en el archivo de configuración, eliminando el directorio temp
y reiniciando IIS solucionó el problema temporalmente y regresa después de algún tiempo.
Este error no tiene una verdadera respuesta mágica. La clave es tener toda la información para entender el problema. Lo más probable es que a un ensamblado cargado dinámicamente le falte un ensamblado referenciado. Ese ensamblaje debe estar en el directorio bin de su aplicación.
Utilice este código para determinar lo que falta.
using System.IO;
using System.Reflection;
using System.Text;
try
{
//The code that causes the error goes here.
}
catch (ReflectionTypeLoadException ex)
{
StringBuilder sb = new StringBuilder();
foreach (Exception exSub in ex.LoaderExceptions)
{
sb.AppendLine(exSub.Message);
FileNotFoundException exFileNotFound = exSub as FileNotFoundException;
if (exFileNotFound != null)
{
if(!string.IsNullOrEmpty(exFileNotFound.FusionLog))
{
sb.AppendLine("Fusion Log:");
sb.AppendLine(exFileNotFound.FusionLog);
}
}
sb.AppendLine();
}
string errorMessage = sb.ToString();
//Display or log the error based on your application.
}
Esto funcionó para mí. Agregalo en tu web. Config.
<system.web>
<trust level="Full" />
Inicialmente probé el visor de registro de Fusion, pero eso no ayudó, así que terminé usando WinDbg con la extensión SOS.
! dumpheap -stat -type Exception / D
Luego examiné las FileNotFoundExceptions. El mensaje en la excepción contenía el nombre de la DLL que no se estaba cargando.
NB, la / D le da resultados con hipervínculo, así que haga clic en el enlace en el resumen de FileNotFoundException. Eso traerá una lista de las excepciones. Luego haga clic en el enlace de una de las excepciones. Eso será! Dumpobject que excepciones. Entonces, solo debería poder hacer clic en el enlace de Mensaje en el objeto de excepción, y verá el texto.
Mi ejemplo de este problema terminó siendo una referencia faltante. Se hizo referencia a un ensamblaje en el archivo app.config pero no tenía una referencia en el proyecto.
Mi problema se resolvió después de que eliminé los archivos de ensamblaje redundantes de la carpeta bin
.
Otra solución para saber por qué exactamente nada funciona (desde Microsoft Connect):
Agregue este código al proyecto:
foreach (var asm in AppDomain.CurrentDomain.GetAssemblies()) { asm.GetTypes(); }
Apague la generación de ensamblajes de serialización.
- Construye y ejecuta.
Otras sugerencias son todas buenas En mi caso, el problema era que la caja del desarrollador era una máquina de 64 bits que utilizaba la ubicación x86 de varias API, incluida Silverlight .
Al cambiar la plataforma de destino para que coincida con el servidor de 32 bits donde se implementaba la aplicación web, se eliminó la mayoría de los errores relacionados con la imposibilidad de cargar uno o más de los tipos solicitados.
Puedo solucionar este problema marcando "Copiar Local = Verdadero" en todos los archivos DLL referenciados en el proyecto, reconstruyendo y desplegando en un servidor de prueba.
Resolví este problema estableciendo el atributo Copiar local de las referencias de mi proyecto en verdadero.
Si está utilizando Entity Framework , intente copiar las siguientes referencias localmente.
- System.Data.Entity
- System.Web.Entity
Cambie la propiedad "Copiar local" a "Verdadero" para estas referencias y publique.
Si está utilizando EntityDataSource en su proyecto, la solución está en la Corrección: ''No se puede cargar uno o más errores de los tipos solicitados'' . Debe establecer ContextTypeName = "ProjectNameNameSpace.EntityContainerName" ''
Esto solucionó mis problemas ...
También tuve este problema al crear un nuevo complemento de Microsoft Word con Visual Studio 2015. El problema es que tengo 2 versiones de MS Office, 2013 y 2016. Desinstalo MS Office 2013 y luego funciona.
Tenía un .NET 4.0, ASP.NET MVC 2.0, una aplicación web Entity Framework 4.0 desarrollada en Visual Studio 2010. Tuve el mismo problema, que funcionaba en un servidor Windows Server 2008 R2 pero no en otro servidor Windows Server 2008 R2, A pesar de que las versiones de .NET y ASP.NET MVC fueron las mismas, arrojó este mismo error que el suyo.
Fui a seguir la sugerencia de miko, así que instalé Windows SDK v7.1 (x64) en el servidor que falla, para poder ejecutar! Dumpheap.
Bueno, resulta que la instalación de Windows SDK v7.1 (x64) resolvió el problema. Cualquier dependencia que falte debe haber sido incluida en el SDK. Se puede descargar desde Microsoft Windows SDK para Windows 7 y .NET Framework 4 .
Tuve el mismo problema (pero en mi local) cuando intentaba agregar la migración de Entity Framework con la Consola del Administrador de Paquetes.
La forma en que lo resolví fue creando una aplicación de consola donde Main () tenía el siguiente código:
var dbConfig = new Configuration();
var dbMigrator = new DbMigrator(dbConfig);
dbMigrator.Update();
Asegúrese de que la clase de configuración sea la configuración de migración de su proyecto fallido. Necesitará System.Data.Entity.Migrations para usar DbMigrator.
Establezca un punto de interrupción en su aplicación y ejecútelo. Visual Studio debe capturar la excepción (a menos que tenga ese tipo de excepción configurado para no interrumpir la sesión de depuración), y debería poder encontrar la información que está buscando.
La referencia que faltaba en mi caso era EFProviderWrapperToolkit.
Tuve este problema cuando instalé un paquete NuGet en uno de los proyectos y olvidé actualizar el otro proyecto.
Resolví esto haciendo que ambos proyectos tuvieran el mismo ensamblaje de referencia.
Tuve un problema con el automap. En la carpeta bin
, el archivo automap.4net.dll estaba allí, pero por alguna razón, el automap.xml y el automap.dll no estaban. Copiarlos al directorio bin
solucionó el problema.
Una solución que funcionó para mí fue eliminar las carpetas bin / y obj / y reconstruir la solución.
Verifique que cada uno de sus proyectos esté configurado correctamente en Configuration Manager .
Similar a la razón de William Edmondson para este problema, cambié mi configuración de Configuration Manager de "Debug" "Cualquier CPU" a "Debug" ".NET". El problema fue que la versión ".NET" NO estaba configurada para compilar TODOS los proyectos, por lo que algunos de mis archivos DLL estaban desactualizados (mientras que otros estaban actualizados). Esto causó numerosos problemas al iniciar la aplicación.
La solución temporal fue hacer la sugerencia de Kenny Eliasson de limpiar los directorios / bin y / obj. Sin embargo, tan pronto como hiciera más cambios en los proyectos no compiladores, todo volvería a fallar.
Recibí el mismo mensaje de error al compilar un paquete de Visual Studio (VSPackage). Toda la solución se compila y el error se genera cuando CreatePkgDef crea el paquete. Dicho esto, está claro que no puedo capturar las LoaderExceptions ya que no es mi aplicación la que lo lanza, sino la propia herramienta de Microsoft. (Aunque soy responsable de la confusión de CreatePkgDef.)
En mi caso, la causa raíz fue que mi solución crea un MyDll.dll que ya se ha registrado en el GAC (y son diferentes), por lo que el CreatePgkDef se confundió cuál usar y decidió simplemente lanzar un error que no es " t realmente útil El MyDll.dll en el GAC fue registrado por el instalador del mismo producto (obviamente una versión anterior, con / ligeramente / contenido diferente).
Como arreglarlo
- Manera preferida: asegúrese de usar la versión correcta de MyDll.dll
- Al compilar su proyecto, asegúrese de usar un número de versión diferente del que usó en la versión anterior ubicada en el GAC. Asegúrese de que los siguientes atributos son correctos:
- [assembly: AssemblyVersion ("1.0.0.1")] // Suponiendo que el archivo DLL antiguo tenía una versión 1.0.0.0
- [assembly: AssemblyFileVersion ("1.0.0.1")] // Suponiendo que el archivo DLL antiguo tenía una versión 1.0.0.0
- Si es necesario, especifique el nombre de ensamblaje completo (por ejemplo, "MyDll.dll, Versión = 1.0.0.1, Culture = neutral, PublicKeyToken = 1234567890abcdef") cuando haga referencia a él en sus otros proyectos.
- Al compilar su proyecto, asegúrese de usar un número de versión diferente del que usó en la versión anterior ubicada en el GAC. Asegúrese de que los siguientes atributos son correctos:
- Si falla lo anterior: puede desinstalar el MyDll.dll antiguo de GAC
- Cómo desinstalar un ensamblaje desde el GAC
- Desinstala la aplicación que incluye MyDll.dll
Cambiar la Asamblea fue suficiente para mí. :)
Espero que esto haya sido útil.