我在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'的引用。 “
答案 0 :(得分:31)
如果您的目标是Windows 8,MSDN documentation会有以下说明:
也就是说,您的桌面应用程序不能消耗掉任何东西 Windows Runtime,直到您准备一个必要的项目 参考。 Windows运行时定义了一些标准类和 使用
System.Runtime
中的接口,例如IEnumerable
整个Windows运行时库。默认情况下,您的托管 桌面应用程序将无法找到这些类型,因此您必须这样做 在您可以执行任何操作之前,请手动引用System.Runtime 对Windows运行时类有意义。要创建本手册 参考:
- 在解决方案资源管理器中导航到您的托管桌面应用项目。
- 右键单击“引用”节点,然后单击“添加引用”。
- 单击“浏览”选项卡。
- 点击浏览...
- 导航到System.Runtime.dll外观。您通常可以在类似于
的路径中找到它 醇>%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll
希望有所帮助。
答案 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.config
或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>
我没有测试过这个确切的场景,但是这种配置在类似的情况下帮助了我。
答案 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。
答案 5 :(得分:1)
在将Unity 4.0.1添加到面向.NET Framework 4.6.1的项目后,我在TeamCity中收到此错误消息。我最终将C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework中的丢失文件夹从我的开发机器复制到构建服务器。两者都运行Windows 7.之后构建成功。
答案 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
扩展名
答案 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文件夹。
按照其他答案中的建议添加缺少的引用也可以解决问题,但即使再次删除引用,错误仍然会解决。