types“System.IDisposable”在未引用的程序集中定义

我在Windows 8的Visual Studio 2012中创build了一个Windows窗体应用程序,目标.NET框架是4.5,我想使用Windows SDK的Datagramsocket库,所以我在编译时将目标操作系统版本更改为8。

我收到以下错误:

“错误1types'System.IDisposable'是在未引用的程序集中定义的,必须添加对程序集”System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a“的引用。

如果您的目标是Windows 8,则MSDN文档具有以下说明:

也就是说,在使用一个必要的参考来准备项目之前,您的桌面应用程序不能从Windows运行时中消耗太多的东西。 Windows运行时在System.Runtime定义了一些标准类和接口,例如IEnumerable ,这些标准类和接口在整个Windows运行时库中使用。 默认情况下,托管的桌面应用程序将无法找到这些类型,因此必须先手动引用System.Runtime才能对Windows运行时类执行任何有意义的操作。 要创建此手册参考:

  1. 在解决方案资源管理器中导航到托管桌面应用程序项目。
  2. 右键单击“引用”节点,然后单击“添加引用”。
  3. 点击浏览标签。
  4. 点击浏览…。
  5. 导航到System.Runtime.dll外观。 您通常可以找到类似于以下路径: %ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll

希望有所帮助。

如果遇到4.5.2和Unity的这个问题,Microsoft已经发布了一个修复,知识库文章: http : //support.microsoft.com/kb/2971005

它看起来像你的应用程序正在尝试加载System.Runtime版本4.0,但没有安装该版本。 你说你已经安装了.NET 4.5,所以你可以提供一些配置来在运行时重定向程序集绑定 。

尝试添加到您的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> 

我没有测试过这个确切的场景,但是这个配置在类似的情况下帮了我很大的忙。

在使用TFS构建代理时,我在下面看到这个错误,但只在安装了4.5.2的Windows 2012 R2服务器上。 我们的Visual Studio机器都没有编译错误。

“错误1类型'System.IDisposable'是在未引用的程序集中定义的,必须添加对程序集”System.Runtime,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a“的引用。

其他人指出的原因与便携式图书馆有关,正如其他人指出的那样。 但至于解决方案一些建议在%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dllSystem.Runtime.dll外观%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll我不同意作为路径和版本可能在其他机器上不同。

相反,我发现的最好的解决方案是在生成机器上安装Windows SDK 。

我在这里找到了一个来自这个帖子的解决方案,以及为什么会出现这个问题的一个非常明确的描述

在将Unity 4.0.1添加到以.NET Framework 4.6.1为目标的项目之后,我在TeamCity中出现了此错误消息。 我最终从C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework中将缺少的文件夹从我的开发机器复制到构建服务器。 两者都在运行Windows 7.之后,构建成功。

在这里输入图像说明

我刚刚遇到了Windows 10,TeamCity和VS2015的这个问题:

症状:

Visual Studio可以很好地构建项目,但是TeamCity正在努力解决编译问题。

原因:

为现有解决方案添加了一个新项目 – 忘记更改TargetRuntimeVersion。

解:

卸载项目

编辑该项目的.csproj文件

更改:

 <TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion> 

无论你是其他项目,还是在服务器上安装的任何东西。

对我来说是这样的:

 <TargetFrameworkVersion>v4.5</TargetFrameworkVersion> 

希望这可以帮助其他任何人遇到这种情况。

正如Josh提到的,我在一个带有Web API项目和一些库项目的解决方案中遇到了这个问题,其中一个库项目正在构建,其中一个错误表示Unity属性不是“有效”属性,然后是一个的错误所说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.

建议的“更新”4.5.2开发包是我已经安装,所以这并没有帮助我。 在一个预感,我想也许这只是一个版本不匹配。 所以我看了每个项目的属性,其中一个基本库的目标是4.5,而另一个目标是4.5.2。 我改变了那个也瞄准了4.5.2并且错误消失了。

我在VS 2015上的一些解决方案中遇到了这个问题,甚至在一个工作站上的解决方案中,却没有在另一个上。 将.NET版本更改为4.6后,出现错误。

解决方案很简单: 关闭解决方案并删除与解决方案相同的文件中的隐藏的.vs文件夹。

添加其他答案中建议的缺少的引用也解决了这个问题,但即使再次删除引用,错误仍然得到解决。

基于TFS 2015 Build server

我不知道这个错误信息是否是通用的,对于每个唯一的错误,答案/解决方案可能是唯一的。 但是我有类似的错误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'

我意识到,该项目使用Microsoft.Practices.Unity并具有实现IDisposable接口IUnityContainer 事实证明,没有配置TFS构建定义NuGet安装程序构建步骤,它负责还原TFS构建服务器上的Microsoft.Practices.Unity NuGet包。 如果遇到此错误,请检查您的TFS构建定义,并将NuGet安装程序构建步骤路径指向您的解决方案完整路径,包括。 sln扩展

在这里输入图像说明