【问题标题】:Issue Building a single project using msbuild that has multiple configurations问题使用具有多个配置的 msbuild 构建单个项目
【发布时间】:2012-01-15 16:18:29
【问题描述】:

问题

我们在解决方案中使用配置转换。例如:调试、测试、登台、发布 但是,这些配置仅用于我们的 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\Framework\v4.0.30319\Microsoft.Common.targets(483,9) :错误:未为项目“sampleLibrary.csproj”设置 OutputPath 属性。 请检查以确保您指定了有效的组合 此项目的配置和平台。配置='测试' 平台='AnyCPU'。您可能会看到此消息,因为您正在尝试 构建一个没有解决方案文件的项目,并指定了一个 此项目不存在的非默认配置或平台。

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

问题

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

【问题讨论】:

  • 我不确定这是否专门解决了您遇到的问题,但您可能会从我的 SO 帖子 over here 中获得一些有用的信息。

标签: c# asp.net-mvc msbuild


【解决方案1】:

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

【讨论】:

  • 非常感谢。我添加了 /p:OutputPath=\bin 并且它起作用了。
【解决方案2】:

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

【讨论】:

  • 谢谢!有完全相同的问题
【解决方案3】:

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

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

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

【讨论】:

    【解决方案4】:

    在 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>
    

    【讨论】:

      【解决方案5】:

      一个简单的解决方案是为您的项目添加一个名为“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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-07-27
        • 2018-09-07
        • 2015-03-28
        • 1970-01-01
        • 2012-06-26
        • 2013-05-11
        • 1970-01-01
        • 2010-11-24
        相关资源
        最近更新 更多