MSBuild失败了两个包

Ian*_*Ian 8 msbuild tfs msdeploy tfs2012 publish-profiles

好的,这是一个奇妙的错误.我有一个2012解决方案,在2012 TFS服务器上执行MSBuild.传递给构建过程模板中"MSBuild Arguments"字段的参数如下:

/ p:DeployOnBuild = true/p:PublishProfile = ProfileForProjectA/p:PublishProfile = ProfileForProjectB /p:VisualStudioVersion=11.0

我从TFS回来的错误是....

C:\ Program Files(x86)\ MSBuild\Microsoft\VisualStudio\v11.0\Web\Microsoft.Web.Publishing.targets(4435):PublishProfile的值设置为'ProfileForProjectA',期望在''找到文件' C:\ Builds\1\Solution\Solution\Sources\Solution\ProjectB\Properties\PublishProfiles\ProfileForProjectA.pubxml'但找不到它.

换句话说,构建服务器似乎希望每个发布配置文件(*.pubxml)都在每个PublishProfiles文件夹中.这两个项目的发布方法是"文件系统".

唯一解决它的是将ProfileForProjectA添加到ProjectB的PublishProfiles文件夹,反之亦然,但这似乎不是一个非常优雅的解决方案.任何人都可以重现这种行为吗?有没有人有更优雅的解决方案?我错过了什么吗?

提前致谢.

Say*_*imi 15

通过命令行传递属性时,它们是全局MSBuild属性.因此,它们被传递到.sln文件中的每个项目.Web项目是唯一响应这些特定属性的项目.

在您的方案中,如果您要在.sln文件中构建和发布两个项目,则需要在每个具有相同名称的Web项目中创建一个配置文件,例如"MyProfile".它们不需要包含相同的信息,它们每个都可以有自己独特的设置.他们只需要分享一个名字.

然后当你建立.

msbuild.exe mysolution.sln /p:DeployOnBuild=true /p:PublishProfile=MyProfile /p:VisualStudioVersion=11.0
Run Code Online (Sandbox Code Playgroud)

构建每个Web项目时,将调用该项目中MyProfile的发布过程.

如果您想要为PublishProfile指定不同的值,则需要创建MSBuild脚本而不是构建.sln文件.有几种不同的方法可以解决它,但它们都涉及一些MSBuild.

放弃

不要将此技术用于实时服务器...... 但如果您在最终发布之前发布到中间位置,那么它很棒.

如果您在解决方案中构建+发布多个项目,则可以在另一个项目甚至不构建时发布一个项目.这是因为发布过程实际上是构建过程的扩展.这是一个例子.

您在一个解决方案中有ProjectA和ProjectB,当您使用上面的属性进行构建时,将调用ProjectA并且它将构建和发布.然后它将转移到将构建和发布的ProjectB.ProjectB的构建可能会失败,ProjectA已经发布.