2012-09-10 17 views
27

Creé una aplicación Windows Form en Visual Studio 2012 en Windows 8, y el objetivo .NET framework es 4.5 y deseo usar la biblioteca Datagramsocket de Windows SDK, así que cambié la versión del sistema operativo de destino a 8, cuando compilo.El tipo 'System.IDisposable' se define en un ensamblaje al que no se hace referencia

estoy consiguiendo el error siguiente:

"Error 1 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'."

+0

la mueca de dolor. Si yo fuera usted, consideraría tener un dll para envolver 4.0 componentes y usarlo de su código 4.5 solo para mantener qué sistema es el más limpio y ordenado. –

+3

@TonyHopkinson 4.5 es una actualización in situ, por lo que siempre utilizará el 4.5 'System'. –

+0

@David, esta cosa del datagrama no está de acuerdo contigo, sin embargo estoy feliz de hacerlo. :) –

Respuesta

1

Parece que su aplicación está intentando cargar System.Runtime versión 4.0, pero que no tienen instalado esa versión. Usted dice que tiene .NET 4.5 instalado, por lo que puede proporcionar alguna configuración al redirect assembly bindings en tiempo de ejecución.

Trate de añadir esto a su archivo o App.configWeb.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.

28

Si el idioma de Windows 8, la MSDN documentation tiene las siguientes instrucciones:

That said, your desktop app can’t consume much of anything from the Windows Runtime until you prepare your project with one essential reference. The Windows Runtime defines some standard classes and interfaces in System.Runtime , such as IEnumerable , that are used throughout the Windows Runtime libraries. By default, your managed desktop app won’t be able to find these types, and so you must manually reference System.Runtime before you can do anything meaningful with Windows Runtime classes. To create this manual reference:

  1. Navigate to your managed desktop app project in the Solution Explorer.
  2. Right-click the References node and click Add Reference.
  3. Click the Browse tab.
  4. Click Browse….
  5. Navigate to the System.Runtime.dll façade. You can generally find this in a path similar to: %ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll

Espero que ayude.

+0

Este es un gran análisis. Para obtener un enlace para descargar los archivos dll que faltan, consulte la respuesta http://stackoverflow.com/a/14517992/3918598 – user3918598

+0

Gracias Nathan. Copié el archivo a la carpeta bin de mi proyecto web para que se pudiera empaquetar con la solución. Agregar referencia> Solución> Carpeta Bin del proyecto. – JoshYates1980

19

Si surge este problema con 4.5.2 y Unidad, Microsoft ha publicado una revisión, el artículo de KB: http://support.microsoft.com/kb/2971005

+3

Esto funcionó. En Windows 10 tuve que instalar el .NET Framework 4.5.2 Developer Pack actualizado. – erdinger

+0

Gracias Josh, sin embargo, estoy ejecutando VS2015 Enterprise Update 2 y todavía estoy recibiendo este problema. El proyecto apunta a 4.5.2. Si agrego manualmente la referencia en el web.config, funciona. Como estoy trabajando en un proyecto grupal y otros no están abordando este tema, lo ideal es que no quiera agregar esto como solución. ¿Alguien más ha encontrado una solución o me ha señalado en la dirección correcta? –

+0

Lo mismo en nuestra máquina de compilación con Windows Server 2012, la instalación del hash .NET Framework 4.5.2 Developer Pack solucionó el problema – Jamby

1

Mientras se trabaja con un agente TFS construir seguía viendo por debajo de este error, pero sólo en un Windows 2012 servidor R2 con 4.5.2 instalado. Ninguna de nuestras máquinas Visual Studio tuvo el error de compilación.

"Error 1 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'."

La causa que otros han señalado tiene que ver con las bibliotecas de clases portátiles y, como han señalado otros. pero en cuanto a una solución, algunos recomiendan una referencia a la fachada System.Runtime.dll en %ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll No estoy de acuerdo ya que la ruta y la versión pueden ser diferentes en otras máquinas.

En su lugar, la mejor solución que he encontrado es instalar el Windows SDK en la máquina de compilación.

me encontré con esta solución de un post aquí here y una descripción muy clara de por qué se produce este problema here

0

Como se menciona Josh, he tenido este problema en una solución con un proyecto Web API y varios proyectos de bibliotecas, donde uno de los proyectos de la biblioteca estaba haciendo borking en build, con errores que decían que los atributos de Unity no eran atributos "válidos", y luego uno de los errores decía The type 'System.Attribute' is defined in an assembly that is not referenced. You must add a reference to assembly System.Runtime.

El 4.5.2 Developer Pack sugerido "actualizado" Ya había instalado, entonces eso no me ayudó. Por un presentimiento, pensé que tal vez solo era una versión no coincidente. Así que miré las propiedades de cada proyecto, y una de las bibliotecas muy básicas apuntaba a 4.5, mientras que las demás apuntaban a 4.5.2. Cambié ese para también apuntar a 4.5.2 y los errores desaparecieron.

0

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 a aparecer después de cambiar la versión de .NET a 4.6.

La solución es simple: Cierre la solución y elimine la oculta.vs carpeta en la misma carpeta que la solución.

Agregar las referencias que faltan como se sugiere en otras respuestas también resuelve el problema, pero el error permanece resuelto incluso después de eliminar las referencias nuevamente.

1

Tuve este mensaje de error en TeamCity después de haber agregado Unity 4.0.1 al proyecto que tiene como objetivo .NET Framework 4.6.1. Terminé copiando las carpetas que faltan en C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework desde mi máquina de desarrollo al servidor de compilación. Ambos están ejecutando Windows 7. Después de que la compilación tuvo éxito.

enter image description here

+0

Probablemente no sea la mejor solución ... (copia de archivos) –

1

Me acabo de encontrar con este problema con Windows 10, TeamCity y VS2015:

Síntomas:

Visual Studio construye la multa proyecto, pero TeamCity lucha con problemas de compilación.

Motivo:

añadido un nuevo proyecto para solución existente - se olvidó de cambiar el TargetRuntimeVersion.

Solución:

proyecto Descargar fichero .csproj

Editar para ese proyecto

Cambio:

<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion> 

Para lo que otros proyectos está, o lo que se ha instalado en el servidor.

para mí fue:

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 

Esperanza esto ayuda a cualquier otra persona que experimenta esto.

0

Sobre la base de TFS 2015 Build servidor

No sé si este mensaje de error es genérico y la respuesta/solución puede ser única para cada error único. Pero tenía 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'

me di cuenta de que el proyecto estaba usando Microsoft.Practices.Unity y tenía IUnityContainer interfaz que implementa IDisposable. Resultó que no se configuró el paso de compilación del instalador de Build Build NuGet de TFS, que es responsable de restaurar el paquete NuGet Microsoft.Practices.Unity en el servidor de compilación TFS. Si encuentra este error, compruebe la definición de compilación de TFS y señale la ruta del paso de compilación del instalador de NuGet a la ruta completa de la solución, incluida la. sln extensión

enter image description here

Cuestiones relacionadas