c# - tutorial - El tipo ''System.IDisposable'' se define en un ensamblaje al que no se hace referencia
visual studio windows 7 (9)
Acabo de encontrarme con este problema con Windows 10, TeamCity y VS2015:
Los síntomas:
Visual Studio construye bien el proyecto, pero TeamCity tiene problemas con los problemas de compilación.
Razón:
Se agregó un nuevo proyecto a la solución existente: se olvidó de cambiar TargetRuntimeVersion.
Solución:
Descargar proyecto
Editar archivo .csproj para ese proyecto
Cambio:
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
A lo que sean otros proyectos, o lo que esté instalado en el servidor.
Para mi fue:
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
Espero que esto ayude a alguien más experimentando esto.
Creé una aplicación Windows Form en Visual Studio 2012 en Windows 8, y el marco .NET de destino es 4.5, y quiero usar la biblioteca Datagramsocket de Windows SDK, así que cambié la versión del sistema operativo de destino a 8, cuando compilo.
Estoy teniendo el siguiente error:
"Error 1 El tipo ''System.IDisposable'' se define en un ensamblaje al que no se hace referencia. Debe agregar una referencia al ensamblado ''System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a''".
Como menciona Josh, tuve este problema en una solución con un proyecto de API web y varios proyectos de biblioteca, donde uno de los proyectos de biblioteca estaba trabajando en la compilación, con errores que decían que los atributos de Unity no eran atributos "válidos", y luego uno de los errores mencionados The type ''System.Attribute'' is defined in an assembly that is not referenced. You must add a reference to assembly System.Runtime.
The type ''System.Attribute'' is defined in an assembly that is not referenced. You must add a reference to assembly System.Runtime.
El paquete de desarrollador 4.5.2 sugerido "actualizado" es lo que ya tenía instalado, por lo que no me ayudó. En una corazonada pensé que tal vez era solo una discrepancia de versión. Así que miré las propiedades de cada proyecto, y una de las bibliotecas muy básicas tenía como objetivo 4.5, mientras que todas las demás tenían como objetivo 4.5.2. Cambié ese para apuntar también a 4.5.2 y los errores desaparecieron.
Mientras trabajaba con un Agente de compilación de TFS seguí viendo este error a continuación, pero solo en un servidor Windows 2012 R2 con 4.5.2 instalado. Ninguna de nuestras máquinas de Visual Studio tuvo el error de compilación.
"Error 1 El tipo ''System.IDisposable'' se define en un ensamblaje al que no se hace referencia. Debe agregar una referencia al ensamblado ''System.Runtime, Version = 4.0.0.0, Culture = neutral, PublicKeyToken = b03f5f7f11d50a3a''".
La causa que otros han señalado tiene que ver con las bibliotecas de clases portátiles y otras han señalado. pero en cuanto a una solución, algunos recomiendan una referencia a la fachada de System.Runtime.dll
en %ProgramFiles(x86)%/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.5/Facades/System.Runtime.dll
No estoy de acuerdo como La ruta y la versión pueden ser diferentes en otras máquinas.
En cambio, la mejor solución que encontré fue instalar el SDK de Windows en la máquina de compilación.
Encontré esta solución en una publicación aquí y una descripción muy clara de por qué este problema ocurre here
Parece que su aplicación está intentando cargar System.Runtime
versión 4.0, pero no tiene esa versión instalada. Usted dice que tiene .NET 4.5 instalado, por lo que puede proporcionar alguna configuración para redirigir los enlaces de ensamblaje en tiempo de ejecución.
Intente agregar esto a su archivo App.config
o Web.config
:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" />
<bindingRedirect oldVersion="4.0.0.0" newVersion="4.5.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
No he probado este escenario exacto, pero esta configuración me ha ayudado en situaciones similares.
Recibí este mensaje de error en TeamCity después de agregar Unity 4.0.1 al proyecto que tiene como objetivo .NET Framework 4.6.1. Terminé copiando las carpetas faltantes en C: / Archivos de programa (x86) / Referencias de referencia / Microsoft / Framework.NETFramework de mi máquina de desarrollo al servidor de compilación. Ambos están ejecutando Windows 7. Después de que la construcción tuvo éxito.
Si está apuntando a Windows 8, la documentación de MSDN tiene las siguientes instrucciones:
Dicho esto, su aplicación de escritorio no puede consumir gran parte del tiempo de ejecución de Windows hasta que prepare su proyecto con una referencia esencial. Windows Runtime define algunas clases e interfaces estándar en
System.Runtime
, comoIEnumerable
, que se utilizan en todas las bibliotecas de Windows Runtime. De forma predeterminada, su aplicación de escritorio administrado no podrá encontrar estos tipos, por lo que debe hacer referencia manualmente a System.Runtime antes de poder hacer algo significativo con las clases de Windows Runtime. Para crear esta referencia manual:
- Navegue a su proyecto de aplicación de escritorio administrado en el Explorador de soluciones.
- Haga clic derecho en el nodo Referencias y haga clic en Agregar referencia.
- Haga clic en la pestaña Examinar.
- Haga clic en Examinar ...
- Vaya a la fachada System.Runtime.dll. Por lo general, puede encontrar esto en una ruta similar a:
%ProgramFiles(x86)%/Reference Assemblies/Microsoft/Framework/.NETFramework/v4.5/Facades/System.Runtime.dll
Espero que ayude.
Si se encuentra con este problema con 4.5.2 y Unity, Microsoft ha publicado una revisión, artículo de KB: http://support.microsoft.com/kb/2971005
Tuve este problema en algunas soluciones en VS 2015, e incluso en la misma solución en una estación de trabajo pero no en otra. Los errores comenzaron aparecieron después de cambiar la versión .NET a 4.6.
La solución es simple: cierre la solución y elimine la carpeta oculta .vs en la misma carpeta que la solución.
Agregar las referencias faltantes como se sugiere en otras respuestas también resuelve el problema, pero el error permanece resuelto, incluso después de eliminar las referencias nuevamente.
Basado en TFS 2015 Build Server
No sé si este mensaje de error es genérico y las respuestas / soluciones pueden ser únicas para cada error único. Pero tuve un error similar, the type ''System.IDisposable'' is defined in an assembly that is not referenced. You must add a reference to assembly ''System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a''
the type ''System.IDisposable'' is defined in an assembly that is not referenced. You must add a reference to assembly ''System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a''
Me di cuenta de que el proyecto estaba usando Microsoft.Practices.Unity
y tenía la interfaz IUnityContainer
que implementa IDisposable
. Resultó que el paso de compilación del instalador NuGet Install Definition de TFS no estaba configurado, que es responsable de restaurar Microsoft.Practices.Unity
paquete de NuGet de Microsoft.Practices.Unity
en el servidor de compilación TFS. Si se encuentra con este error, verifique la Definición de compilación de TFS y dirija la Ruta de paso de compilación del instalador de NuGet a la ruta completa de la solución, incluida la. extensión sln