是否有任何MSBuild属性显示我们正在发布?

时间:2011-06-06 16:30:59

标签: msbuild

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

有没有我可以检查的属性,看看我们目前是否正在发布?

4 个答案:

答案 0 :(得分:3)

您可以连接自己的目标来设置一个属性,然后可以关闭行为,或者做任何你想做的事情。下面的项目修改显示了如何使用您自己的前后目标连接到现有的Publish目标依赖项。 before target设置属性。然后,在项目的现有部分中,在$(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>

答案 1 :(得分:1)

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

除了发布之外,您可能还需要其他值。但是,这应该有用。

我们在我们这里所做的是实际上有一个发布,调试和发布。我们通过从发布版本进行复制来创建发布,因此它具有所有设置。

答案 2 :(得分:1)

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

这将执行&#34;复制&#34;仅当构建使用PublishProfile标志时。

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

答案 3 :(得分:0)

在 VS2019 16.10.1 中测试。

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