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

问题描述 投票:0回答:6

问题

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

尝试从命令行构建单个项目时会出现问题。我需要能够执行此操作,以便将我们的构建从 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\Framework 4.0.30319\Microsoft.Common.targets(483,9)
:错误:未为项目“sampleLibrary.csproj”设置 OutputPath 属性。  
请检查以确保您指定了有效的组合
 该项目的配置和平台。  配置='测试'
  平台='任何CPU'。  您可能会看到此消息,因为您正在尝试
 构建一个没有解决方案文件的项目,并指定了
 此项目不存在的非默认配置或平台。

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

问题

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

c# asp.net-mvc msbuild
6个回答
15
投票

设置开关/属性

/p:OutputPath=Test
对您有用吗?它将在名为 Test 的目录中输出 dll(我想您也可以使用 TeamCity 变量)。 类似问题/答案的链接: https://stackoverflow.com/a/1083362/90033


10
投票

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

enter image description here


7
投票

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

但是,如果无论配置如何,您的项目都构建到相同的路径,这是一件非常容易的事情:在项目属性的

Build
选项卡中,从
All Configurations
下拉列表中选择
Configuration
,然后更改
Output path 

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


4
投票

为您拥有的尽可能多的不同配置在发布上放置不同值的 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>

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。


0
投票

虽然很旧,但这似乎是更旧的从命令行在解决方案中仅构建一个项目的重复,它有一个很好的答案:

您可以将您的一个项目指定为 msbuild 的目标名称

msbuild solutionName ...parameters... /t:ProjectName
© www.soinside.com 2019 - 2024. All rights reserved.