问题使用具有多个配置的msbuild构建单个项目

问题

我们在解决方案中使用配置转换。 例如:调试,测试,暂存,发布但是,这些配置仅用于我们的MVC项目。 所有库只使用Debug和Release,这更有意义,因为我们的库只需要在调试模式或发布模式下构建。

尝试从命令行构建单个项目时会出现此问题。 我需要能够这样做才能将我们的构建从TeamCity自动部署到我们的测试环境。

当我像这样构建单个项目时

msbuild myproject.csproj /t:Build /P:Configuration=Test /P:Platform=AnyCPU /P:DeployOnBuild=True /P:DeployTarget=MSDeployPublish /P:MsDeployServiceUrl=https://SERVER:8172/MsDeploy.axd /P:AllowUntrustedCertificate=True /P:MSDeployPublishMethod=WMSvc /P:CreatePackageOnPublish=True /P:UserName=Username /P:Password=Passsword /P:DeployIisAppPath="IISAPPPATH" 

我收到以下错误

 myproject.csproj“(构建目标)(1) - >
 “C:\ src \ myproject.csproj”(默认目标)(18) - >
   C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Common.targets(483,9)
 :错误:没有为项目'sampleLibrary.csproj'设置OutputPath属性。  
请检查以确保您指定了有效的组合
 该项目的配置和平台。 配置=“测试”
  平台= 'AnyCPU'。 您可能会看到此消息,因为您正在尝试
 在没有解决方案文件的情况下构建项目,并指定了一个
 此项目不存在的非默认配置或平台。

我知道这意味着什么,因为我的sampleLibrary没有测试配置,sampleLibrary的映射将包含在我的.sln文件中

有没有办法解决这个问题,而无需为每个库项目添加这些配置? 它闻起来像一个丑陋的黑客在这里。

不幸的是,您必须修改解决方案中使用的每个项目以具有相同的构建路径。

但是,如果您的项目无论配置如何都构建到相同的路径,这是一件非常容易的事情:在项目属性的“ Build选项卡中,从“ Configuration下拉列表中选择“ All Configurations ”,然后更改“ Output path

这将为项目文件中尚未存在的所有配置创建条目,并为所有配置设置相同的输出路径。

设置开关/属性/p:OutputPath=Test为你工作吗? 它会在名为Test的目录中输出dll(我猜你也可以使用TeamCity变量)。 链接到类似的问题/答案https://stackoverflow.com/a/1083362/90033

使用tfs在线我得到了同样的错误,这解决了我的问题

在此处输入图像描述

一个简单的解决方案是向项目中添加一个名为“DeploymentConfiguration”的新属性,并让它在配置之间进行映射。 例:

    Debug Debug 

然后在MSBuild调用中,传入

  /p:DeploymentConfiguration=Test 

在部署MVC中,您只需将DeploymentConfiguration直接分配给Configuration。

为Release上的不同值设置OR条件,以获得您拥有的许多不同配置。

例如。

  pdbonly true bin\Release\ TRACE prompt 4