是否有任何 MSBuild 属性表明我们正在发布?

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

如果是发布版本,我想有条件地取消定义

DEBUG

我可以检查一下我们当前是否正在发布某个属性吗?

msbuild
5个回答
4
投票

您可以连接自己的目标来设置一个属性,然后您可以关闭该属性,或者执行任何您想要的操作。下面的项目修改显示了如何将现有的发布目标依赖项与您自己的前后目标连接起来。 before 目标设置一个属性。然后,在项目的现有部分中,在 $(DefineConstants) 属性中定义 DEBUG,您可以根据执行构建时设置的属性,有条件地决定是否将 DEBUG 添加到常量列表中,因为发布。

<PropertyGroup>
   <PublishDependsOn>MyBeforePublish;$(PublishDependsOn);MyAfterPublish</PublishDependsOn>
</PropertyGroup>

<Target Name="MyBeforePublish">
   <PropertyGroup>
      <DetectPublishBuild>true</DetectPublishBuild>
   </PropertyGroup>
</Target>
<Target Name="MyAfterPublish">
   <PropertyGroup>
      <DetectPublishBuild>false</DetectPublishBuild>
   </PropertyGroup>
</Target>

...

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
   <PlatformTarget>x86</PlatformTarget>
   <DebugSymbols>true</DebugSymbols>
   <DebugType>full</DebugType>
   <Optimize>false</Optimize>
   <OutputPath>bin\Debug\</OutputPath>
   <DefineConstants>TRACE</DefineConstants>
   <DefineConstants
      Condition="'$(DetectPublishBuild)' != 'true'"
      >DEBUG;$(DefineConstants)</DefineConstants>
   <ErrorReport>prompt</ErrorReport>
   <WarningLevel>4</WarningLevel>
</PropertyGroup>

4
投票

在 VS2019 16.10.1 中测试。

<Target Name="XXX" Condition="'$(PublishProtocol)'!=''">

2
投票
<Copy SourceFiles="Web.Base.config" DestinationFiles="Web.config" OverwriteReadOnlyFiles="True" Condition="!('$(PublishProfileName)' == '' And '$(WebPublishProfileFile)' == '')" />

仅当构建使用 PublishProfile 标志时,才会执行“复制”。

http://sedodream.com/2013/01/06/commandlinewebprojectpublishing.aspx


0
投票

请参阅 dotnet/sdk 存储库中的

此问题评论
。微软似乎引入了 MSBuild 变量
_IsPublishing
,它可以用来检查我们是否处于发布构建中。 如果我们确实在做
yes
,则该变量将包含
dotnet publish
;如果我们没有这样做,则该变量为空。

但请注意,使用

dotnet build /t:Publish
msbuild /t:Publish
时,不会设置此变量。


-3
投票
<Choose>
      <When Condition="'$(BuildType)' == 'publish'">
         <PropertyGroup>
           <DefineConstants>Release</DefineConstants>
         </PropertyGroup>
      </When>      
</Choose>

除了release之外,你可能还需要其他值。但是,这应该有效。

我们在我们这里所做的实际上是发布、调试和发布。我们通过从发布中复制它来创建发布,因此它具有其中的所有设置。

© www.soinside.com 2019 - 2024. All rights reserved.