.net 4.0 带有Microsoft.Bcl.Async的.NET 4.0应用程序无法在.NET 4.5生成服务器上生成

.net 4.0 带有Microsoft.Bcl.Async的.NET 4.0应用程序无法在.NET 4.5生成服务器上生成,.net-4.0,msbuild,teamcity,.net-4.5,base-class-library,.net 4.0,Msbuild,Teamcity,.net 4.5,Base Class Library,我有一个用于异步/等待支持的.NET 4.0应用程序,它是在Windows 8机器上的Visual Studio 2012下开发的。它在我的机器中构建良好,在其他环境(XP/Vista/7)中运行良好 我的构建服务器安装程序是Windows server 2008 R2、.NET 4.5和TeamCity 我的生成配置无法生成我的解决方案,出现以下错误: GenerateTemporaryTargetAssembly GenerateTemporaryTargetAssembly Ferox

我有一个用于异步/等待支持的.NET 4.0应用程序,它是在Windows 8机器上的Visual Studio 2012下开发的。它在我的机器中构建良好,在其他环境(XP/Vista/7)中运行良好

我的构建服务器安装程序是Windows server 2008 R2、.NET 4.5和TeamCity

我的生成配置无法生成我的解决方案,出现以下错误:

GenerateTemporaryTargetAssembly 
GenerateTemporaryTargetAssembly 
Ferox.Local.Wpf\uf4edrwb.tmp_proj 
CoreCompile 
Csc 
MyClass.cs(8, 29): error CS0433: The type 'System.IProgress<T>' exists in both 'c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll' and 'c:\TeamCity\buildAgent\work\80d9f16a33820be7\packages\Microsoft.Bcl.1.0.19\lib\net40\System.Runtime.dll'
GenerateTemporaryTargetAssembly
GenerateTemporaryTargetAssembly
Ferox.Local.Wpf\uf4edrwb.tmp_项目
核心编译
Csc
MyClass.cs(8,29):错误CS0433:c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll和c:\TeamCity\buildAgent\work\80d9f16a33820be7\packages\Microsoft.Bcl.1.0.19\lib\net40\System.Runtime.dll中都存在“System.IProgress”类型
生成配置设置为Visual Studio 2012。我已经检查了代理要求,其中包括对“DotNetFramework4.5_x86”的依赖。因此,它必须使用.net 4.5 msbuild,如上所述

我已经删除了包(Microsoft.Bcl.Async、Microsoft.Bcl、Microsoft.Bcl.Build)并再次添加它们。没有区别

我别无选择了。有什么想法吗

编辑

正如我所说,我刚刚设置了TeamCity,我的构建配置非常简单。 首先,它检查了svn的分支

它有一个运行程序类型为“Visual Studio(sln)”的构建步骤,Visual Studio版本为2012,“Targets”字段为“Clean,build”,配置为“Release”

此外,它还使用“AssemblyInfo修补程序”更新版本号

更新

我遵循了Jon Skeet的建议,更改了runner类型do MSBuild。 运行程序类型:MSBuild MSBuild版本:Microsoft.NET Framework 4.5 MSBuild工具版本:无 运行平台窗体:x86 目标:清洁、建设 命令行参数:/P:Configuration=Release

它仍然给我同样的错误

我已将“MSBuild ToolsVersion”更改为“4.0”(尽管我认为没有任何必要,因为该解决方案是使用Visual Studio 2012创建的)。同样的错误

我已将“Run plataform”更改为“x64”。同样的错误

更新

我的服务器计算机没有.NET 4.0(和4.0.3)的引用程序集。看了之后,我想这可能是原因。考虑到这一点,我将引用程序集从我的开发人员机器复制到了服务器上。然后我再次尝试构建解决方案。同样的错误。我真的以为那一次我会成功

更新

我已尝试重新启动服务器,以查看是否有任何更新挂起从.NET4.5安装影响构建。同样的错误

更新

我已经在服务器上安装了。它终于成功地建立起来了! 然而,我真的认为,在Marc Gravell的帖子和Hans的回答之后,只有复制引用程序集,才能修复构建。然后我搜索了“…\Reference Assembly\”文件夹,查看sdk安装是否添加了其他内容。然后我意识到我的错误:我将引用程序集复制到服务器的文件夹“C:\Program Files(x86)\reference Assembly\Microsoft\Framework”,而不是将它们复制到“C:\Program Files(x86)\reference Assembly\Microsoft\Framework.NETFramework”。因此,生成无法找到程序集

存在于“c:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll”中

这是一种古老的做法,在4.0之前的.NET版本中也是如此。其中引用程序集存储在框架目录中。这不再是应该采用的方法,当您安装了.NET 4.5并试图构建以.NET 4.0为目标的程序集时,这是非常致命的。4.5中的更改太大了,特别是对于使async/await工作的管道。许多其他微妙的问题,例如ExtensionAttribute类从System.Core.dll移到了mscorlib.dll。[TypeForwardedTo]属性隐藏了一个非常不可靠的更改。但当使用错误的引用程序集时,无法执行此操作

引用程序集现在存储在其他位置,您必须引用c:\program files\Reference Assembly中的程序集。对于不同的.NET framework版本,它具有不同的引用程序集。4.0桌面版本的文件位于64位计算机上的C:\Program Files(x86)\Reference Assemblys\Microsoft\Framework.NETFramework\v4.0中


我不太清楚程序员是如何陷入这样的困境的。可能与许多年前开始使用的自定义构建脚本有关。通常,首先要尝试的是删除所有.NET引用并重新添加它们。仔细查看您的生成系统如果没有帮助,/reference编译器选项就是有问题的选项。

知道是什么在生成临时目标程序集吗?你有什么类型的构建目标?@JonSkeet“Clean,build”我是说你使用的构建步骤类型是什么?我已经编辑了这个问题,以包括我的TeamCity构建设置Sokay-使用Visual Studio而不是MSBuild的runner类型的原因是什么?如果它能带来显著的不同,我会感到惊讶,但也许值得一试——如果没有其他东西,您可能会看到提供更多信息的不同日志。