C# 使用具有多个配置的msbuild生成单个项目时出现问题

C# 使用具有多个配置的msbuild生成单个项目时出现问题,c#,asp.net-mvc,msbuild,C#,Asp.net Mvc,Msbuild,问题 我们在解决方案中使用配置转换。例如:调试、测试、登台、发布 但是,这些配置仅用于我们的MVC项目。所有库都只使用Debug和Release,这更有意义,因为我们的库只需要在Debug模式或Release模式下构建 尝试从命令行生成单个项目时会出现此问题。我需要能够做到这一点,以便将我们的构建从TeamCity自动部署到我们的测试环境 当我像这样构建单个项目时 msbuild myproject.csproj /t:Build /P:Configuration=Test /P:Plat

问题

我们在解决方案中使用配置转换。例如:调试、测试、登台、发布 但是,这些配置仅用于我们的MVC项目。所有库都只使用Debug和Release,这更有意义,因为我们的库只需要在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. myproject.csproj“(构建目标)(1)-> “C:\src\myproject.csproj”(默认目标)(18)-> c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(483,9) :错误:未为项目“sampleLibrary.csproj”设置OutputPath属性。 请检查以确保您指定了以下项的有效组合: 此项目的配置和平台。配置=“测试” Platform='AnyCPU'。您可能看到此消息,因为您正在尝试 生成没有解决方案文件的项目,并且已指定 此项目不存在的非默认配置或平台。 我知道这意味着什么,因为我的sampleLibrary没有用于测试的配置,sampleLibrary的映射将包含在我的.sln文件中

问题


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

不幸的是,您必须修改解决方案中使用的每个项目,使其具有相同的生成路径

但是,如果您的项目都构建到相同的路径而不考虑配置,那么这是一件非常容易的事情:在项目属性的
build
选项卡中,从
configuration
下拉列表中选择
all Configurations
,然后更改
输出路径


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

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

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

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

在发布时为您拥有的不同配置的不同值设置OR条件

例如


pdbonly
真的
bin\Release\
痕迹
促使
4.

设置开关/property
/p:OutputPath=Test是否对您有效?它将在名为Test的目录中输出DLL(我想您也可以使用TeamCity变量)。
类似问题/答案的链接:

使用tfs online,我得到了相同的错误,这解决了我的问题


我不确定这是否具体解决了您遇到的问题,但您可能会从我的SO帖子中获得一些有用的信息。非常感谢。我添加了/p:OutputPath=\bin,它成功了。谢谢!遇到了完全相同的问题
 /p:DeploymentConfiguration=Test
<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>