【发布时间】:2012-04-20 15:42:42
【问题描述】:
我目前正在与 TeamCity 合作,试图让两个构建配置适用于 ASP.NET MVC 3 解决方案。我的设置与http://www.troyhunt.com/2010/11/you-deploying-it-wrong-teamcity_26.html 的指导几乎相同。当它在第一个“构建和测试”构建配置中构建 .sln 时,一切正常。但在“打包和部署”配置中,当我让 MSBuild 直接构建 MyWebProject.csproj 文件时,它似乎正在解析核心 .NET 对 .NET 3.5 程序集的引用,而不是 .NET 4.0 程序集。
因此,我遇到了各种 .NET 3.5 编译错误,例如需要主体的“{ get; set; }”属性,因为它们没有被标记为抽象。
此外,让我认为它正在使用 v3.5 程序集的原因是,在 TeamCity CoreCompile - Csc 构建活动期间,它说
"[Csc] c:\程序 Files\TeamCity\buildAgent\work\651adc4c97432014\packages\DataAnnotationsExtensions.1.0.2.0\lib\NETFramework40\DataAnnotationsExtensions.dll 错误 CS1705:程序集 'DataAnnotationsExtensions,版本 = 1.0.2.0, Culture=neutral, PublicKeyToken=358a5681c50fd84c' 使用 'System.ComponentModel.DataAnnotations,版本=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 版本比引用的程序集 'System.ComponentModel.DataAnnotations,版本=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'"
现在,如果我在 Web 项目的 .csproj 文件中将版本明确设置为“Version=4.0.0.0”,那么它开始在其他核心 .NET 程序集(例如 System.Core.dll)上给我类似的异常;即,它一直在尝试解析对 v3.5 程序集而不是 v4.0 的引用。有趣的是,我知道它使用的是用于 v4.0 的 MSBuild,因为构建日志指出“使用来自:C:\Windows\Microsoft.NET\Framework\v4.0.30319 的用户定义的 MSBuild”。我的命令行参数,begin传递给MSBuild配置,如下:
/P:Configuration=%env.Configuration%
/P:DeployOnBuild=True
/P:DeployTarget=MSDeployPublish
/P:MsDeployServiceUrl=https://%env.TargetServer%/MsDeploy.axd
/P:AllowUntrustedCertificate=True
/P:MSDeployPublishMethod=WMSvc
/P:CreatePackageOnPublish=True
/P:UserName=MyUsername
/P:Password=MyPassword
我在构建服务器上做了以下事情: * 安装“Microsoft Windows SDK for Windows 7 and .NET Framework 4” * 已安装 VS 2010(希望避免这种情况) * 已安装 ASP.NET MVC 3 * 添加 evn.MSBuild 设置为 %system.DotNetFramework4.0_x86_Path%。 * 添加注册表键 HKLM/SOFTWARE/Microsoft/.NETFramework/SDKInstallRootv2.0 为“C:\Program Files\Microsoft SDKs\Windows\v7.1.”
感谢您提供的任何帮助!
比利·麦卡弗蒂
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 continuous-integration teamcity