Tfs MSBuild因两个包而失败

Tfs MSBuild因两个包而失败,tfs,msbuild,msdeploy,publish-profiles,Tfs,Msbuild,Msdeploy,Publish Profiles,好的,这是一个奇妙的错误。我有一个在2012 TFS服务器上执行MSBuild的2012解决方案。传递给生成过程模板中“MSBuild Arguments”字段的参数如下所示: /p:DeployOnBuild=true/p:PublishProfile=ProfileForProjectA/p:PublishProfile=ProfileForProjectB/p:VisualStudioVersion=11.0 我从TFS得到的错误是 C:\Program Files(x86)\MSBuil

好的,这是一个奇妙的错误。我有一个在2012 TFS服务器上执行MSBuild的2012解决方案。传递给生成过程模板中“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文件夹,反之亦然,但这似乎不是一个非常优雅的解决方案。有人能复制这种行为吗?有人有更优雅的解决方案吗?我错过什么了吗


提前感谢。

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

在您的场景中,如果您有两个项目要在.sln文件中构建并发布,则需要在每个web项目中创建一个同名的概要文件,比如“MyProfile”。它们不需要包含相同的信息,它们可以有各自独特的设置集。他们只需要共用一个名字

然后当你建立

msbuild.exe mysolution.sln /p:DeployOnBuild=true /p:PublishProfile=MyProfile /p:VisualStudioVersion=11.0
构建每个web项目时,将调用该项目中MyProfile的发布过程

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

免责声明 不要将此技术用于实时服务器… 但如果您在最终发布之前发布到中间位置,这将非常好

如果在一个解决方案中生成并发布多个项目,则可以在一个项目未生成时发布另一个项目。这是因为发布过程实际上是构建过程的扩展。这里有一个例子


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

您也可以针对特定的项目。在此处查看我的解决方案: