32

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

我收到以下错误:

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

4

9 回答 9

32

如果您的目标是 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

希望有帮助。

于 2013-04-26T02:59:27.217 回答
19

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

于 2015-01-08T23:28:37.167 回答
2

我刚刚在 Windows 10、TeamCity 和 VS2015 中遇到了这个问题:

症状:

Visual Studio 可以很好地构建项目,但 TeamCity 却遇到了编译问题。

原因:

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

解决方案:

卸载项目

编辑该项目的 .csproj 文件

改变:

<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>

无论您的其他项目是什么,或者服务器上安装了什么。

对我来说是:

<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>

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

于 2016-11-03T14:48:16.643 回答
1

看起来您的应用正在尝试加载System.Runtime4.0 版,但您没有安装该版本。您说您已安装 .NET 4.5,因此您可以提供一些配置以在运行时重定向程序集绑定

尝试将此添加到您的App.configorWeb.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>

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

于 2012-10-15T12:50:09.983 回答
1

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

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

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

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

我从这里的帖子中找到了这个解决方案,并且非常清楚地描述了为什么会出现这个问题

于 2015-02-05T21:08:39.933 回答
1

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

在此处输入图像描述

于 2016-08-10T15:00:56.177 回答
1

基于 TFS 2015 构建服务器

我不知道此错误消息是否通用,并且每个唯一错误的答案/解决方案可能是唯一的。但我有类似的错误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 Build Definition NuGet Installer Build Step,它负责Microsoft.Practices.Unity在TFS Build Server上恢复NuGet包。如果您遇到此错误,请检查您的 TFS 构建定义并将 NuGet 安装程序构建步骤路径指向您的解决方案完整路径,包括 . sln扩大

在此处输入图像描述

于 2017-03-10T13:28:58.880 回答
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 并且错误消失了。

于 2015-09-18T21:30:27.733 回答
0

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

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

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

于 2016-05-30T13:58:52.543 回答