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

时间:2012-09-10 09:50:02

标签: c# .net windows

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

我收到以下错误:

  

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

9 个答案:

答案 0 :(得分:31)

如果您的目标是Windows 8,MSDN documentation会有以下说明:

  

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

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

希望有所帮助。

答案 1 :(得分:19)

如果您在使用4.5.2和Unity时遇到此问题,Microsoft已发布修复知识库文章: http://support.microsoft.com/kb/2971005

答案 2 :(得分:2)

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

症状:

Visual Studio构建项目很好,但TeamCity在编译问题上遇到了困难。

<强>原因:

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

解决方案:

卸载项目

编辑该项目的.csproj文件

更改:

<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>

对于您的其他项目,或服务器上安装的任何内容。

对我而言:

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

希望这可以帮助其他人体验这一点。

答案 3 :(得分:1)

您的应用似乎正在尝试加载System.Runtime版本4.0,但您没有安装该版本。您说您已安装.NET 4.5,因此您可以在运行时为redirect assembly bindings提供一些配置。

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

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

答案 4 :(得分:1)

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

  

&#34;错误1类型&#39; System.IDisposable&#39;在一个程序集中定义   没有引用。您必须添加对程序集的引用   &#39; System.Runtime,Version = 4.0.0.0,Culture = neutral,   公钥= b03f5f7f11d50a3a&#39;&#34;

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

相反,我发现的最佳解决方案是在构建计算机上安装Windows SDK

我在帖子here中找到了此解决方案,并清楚地说明了此问题发生的原因here

答案 5 :(得分:1)

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

enter image description here

答案 6 :(得分:1)

基于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'

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

enter image description here

答案 7 :(得分:0)

正如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.

建议的“更新”4.5.2开发包是我已经安装的,所以这对我没有帮助。我预计可能只是版本不匹配。所以我查看了每个项目的属性,其中一个基础库的目标是4.5,而其他每个库的目标是4.5.2。我将那个更改为目标4.5.2并且错误消失了。

答案 8 :(得分:0)

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

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

按照其他答案中的建议添加缺少的引用也可以解决问题,但即使再次删除引用,错误仍然会解决。