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

时间:2012-01-15 16:18:30

标签: c# asp.net-mvc msbuild

问题

我们在解决方案中使用配置转换。例如:Debug,Test,Staging,Release 但是,这些配置仅用于我们的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" (Build target) (1) ->
"C:\src\myproject.csproj" (default target) (18) ->
  c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(483,9)
: error : The OutputPath property is not set for project 'sampleLibrary.csproj'.  
Please check to make sure that you have specified a valid combination of
 Configuration and Platform for this project.  Configuration='Test'
  Platform='AnyCPU'.  You may be seeing this message because you are trying
 to build a project without a solution file, and have specified a
 non-default Configuration or Platform that doesn't exist for this project.

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

问题

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

5 个答案:

答案 0 :(得分:10)

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:5)

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

enter image description here

答案 3 :(得分:2)

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

  <!-- this is your non-deployment DLL -->
  <!-- Default DeploymentConfiguration to 'Debug' -->
 <DeploymentConfiguration Condition="'$(DeploymentConfiguration)'==''">Debug</DeploymentConfiguartion>
 <Configuration Condition='$(DeploymentConfiguration)'=='Test'">Debug</Configuration>

然后在您的MSBuild调用中,传入

 /p:DeploymentConfiguration=Test

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

答案 4 :(得分:2)

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

例如

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' Or '$(Configuration)|$(Platform)' == 'Test|AnyCPU'">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>