我有一个 VS 2012 解决方案,其中包含两个项目(WCF C# 服务应用程序和 VB Web UI),我试图通过 TeamCity/MsBuild 命令行进行部署。 每个项目都包含一个发布配置文件 - 让我们称之为“测试配置文件” - 在 IDE 中执行时可以正常工作。
但是,当作为两个连续的构建步骤执行时,C# 项目部署正常,但 VB 项目失败并出现以下错误:
[09:27:05][验证发布配置文件设置] GetPublishingLocalizedString [09:27:05][GetPublishingLocalizedString] C:\程序文件 (x86)\MSBuild\Microsoft\VisualStudio 11.0\Web\Microsoft.Web.Publishing.targets(4435, 5): PublishProfile 的值设置为“Test Profile”,预计 找到该文件 'C:\BuildAgent\work�93e349d61af8c\Yms.Web.Ui__profiles\Test Profile.pubxml' 但找不到。
每个构建步骤都设置为使用 MsBuild v4.0、Run Platform x64、ToolsVersion 4.0。命令行参数为:
/P:配置=“测试配置文件”
/p:DeployOnBuild=true /p:PublishProfile="测试配置文件"
/p:VisualStudio版本=11.0 /p:密码=james2
当针对解决方案而不是项目作为单个构建步骤运行时,我会收到相同的错误,除了错误消息中的“Ui_profiles”被替换为“PublishProfiles”。
非常感谢任何帮助,这让我抓狂
我遇到了完全相同的问题,但对于 VS2010 Web 应用程序项目(使用 Azure SDK 1.8 更新来更新发布选项)。 MS 提供的 Web 发布目标似乎无法正确评估发布配置文件的路径。
我最终做了两件关键的事情:
我的 MSBuild 命令参数如下所示:
/P:DeployOnBuild=true
/P:PublishProfile=[我的个人资料名称(不带文件扩展名)]
/P:PublishProfileRootFolder="%teamcity.build.checkoutDir%\Source\Web Application\My Project\PublishProfiles"(存储发布配置文件的位置)
/P:AllowUntrustedCertificate=true
/P:密码=%env.DomainPassword%
希望这对有同样想法的人有帮助!
今天遇到了类似的问题。就我而言,这是一个“路径太长”的问题。 当我缩短发布配置文件的名称时,Web 部署包的构建没有出现任何问题。
Matt Woodward提供的答案让我更接近解决方案,但我缺少一个关键步骤。具体来说,我需要为 MSBuild 任务指定 publishProfileRootFolder 属性,如下所示:
<Target Name="Publish">
<MSBuild Targets="Build" Projects="$(SolutionDir)\$(ProjectFile)"
Properties="DeployOnBuild=true;publishProfile=UAT;publishProfileRootFolder=$(PublishProfileRootFolder);publishUrl=$(PublishUrl)" />
</Target>
我还选择将 $(PublishProfileRootFolder) 的值直接嵌入到 MSBuild 项目文件中,而不是将其作为命令行参数传递:
<PropertyGroup>
<PublishProfileRootFolder>$(MSBuildProjectDirectory)\MyProjectPath\Properties\PublishProfiles</PublishProfileRootFolder>
</PropertyGroup>
"c:\Windows\Microsoft.Net\Framework64\v4.0.30319\MSBuild.exe" C:\Projects\WebApp\WebAPIProject.csproj /p:DeployOnBuild=true /p:PublishProfile="C:\Projects\Publishes\WebAppPublishProfile.pubxml "/p:WebPublishProfileFile=C:\Projects\Publishes\WebAppPublishProfile.pubxml