“错误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.dll
我刚遇到了Windows 10、TeamCity和VS2015的问题:
症状:
Visual Studio可以成功构建项目,但TeamCity在编译时出现了问题。
原因:
向现有解决方案添加了一个新项目-忘记更改TargetRuntimeVersion。
解决方案:
卸载项目
编辑该项目的.csproj文件
更改:
<TargetFrameworkVersion>v4.5.1</TargetFrameworkVersion>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\Facades\System.Runtime.dll
中引用 System.Runtime.dll
外观,但我不同意,因为路径和版本在其他计算机上可能会有所不同。基于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未配置,该步骤负责在TFS Build Server上恢复Microsoft.Practices.Unity
NuGet包。如果您遇到此错误,请检查您的TFS Build Definition并将NuGet Installer Build Step Path指向您的解决方案完整路径,包括.sln
扩展名。
看起来你的应用程序正在尝试加载4.0版本的System.Runtime
,但你没有安装该版本。你说你已经安装了.NET 4.5,所以你可以在运行时提供一些配置来重定向程序集绑定。
尝试将以下内容添加到你的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>
我没有测试过这个确切的场景,但是此配置在类似情况下对我有所帮助。
正如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,然后错误就消失了。
我在VS 2015的一些解决方案中遇到了这个问题,甚至在同一台工作站上的同一个解决方案中也出现了这个问题。更改.NET版本为4.6后,错误开始出现。
解决方案很简单:关闭解决方案并删除与解决方案相同文件夹中的隐藏.vs文件夹。
按照其他答案建议添加缺失的引用也可以解决问题,但即使您再次删除引用,错误仍然得到解决。
System
。 - David Pfeffer