我在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运行时类执行任何有意义的操作。 要创建此手册参考:
- 在解决方案资源管理器中导航到托管桌面应用程序项目。
- 右键单击“引用”节点,然后单击“添加引用”。
- 点击浏览标签。
- 点击浏览…。
- 导航到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.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>
我没有测试过这个确切的场景,但是这个配置在类似的情况下帮了我很大的忙。
在使用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.dll
的System.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
扩展