我有一个 .NET 4.0 应用程序,它使用Microsoft.Bcl.Async来支持异步/等待,在 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'
构建配置设置为 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,“目标”字段为“清理,构建”,配置为“发布”。
此外,它使用“AssemblyInfo patcher”来更新版本号。
更新
我遵循了 Jon Skeet 的建议并将跑步者类型更改为 MSBuild。运行器类型:MSBuild MSBuild 版本:Microsoft .NET Framework 4.5 MSBuild ToolsVersion:无运行平台:x86 目标:Clean, Build 命令行参数:/P:Configuration=Release
它仍然给我同样的错误。
我已将“MSBuild ToolsVersion”更改为“4.0”(尽管我认为没有任何必要,因为该解决方案是使用 Visual Studio 2012 创建的)。同样的错误。
我已将“运行平台”更改为“x64”。同样的错误。
更新
我的服务器机器没有 .NET 4.0(和 4.0.3)的参考程序集。看了这个帖子,我觉得可能是这个原因。考虑到这一点,我已将参考程序集从我的开发人员机器复制到服务器。然后我再次尝试构建解决方案。同样的错误。我当时真的以为我会成功...
更新
我已经尝试重新启动服务器,以查看是否有任何更新挂在影响构建的 .NET4.5 安装中。同样的错误。
更新
我已经在服务器中安装了适用于 Windows 7 和 .NET 4 的 Windows SDK。它终于成功构建了!但是,我真的认为只有在 Marc Gravell 的帖子和 Hans 的回答之后复制参考程序集才能修复构建。然后我搜索了“...\Reference Assemblies\”文件夹以查看 sdk 安装是否添加了其他任何内容。然后我意识到我的错误:我已将参考程序集复制到服务器的文件夹“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework”,而不是将它们复制到“C:\Program Files (x86)\Reference程序集\Microsoft\Framework.NETFramework"。因此构建找不到程序集。