从msbuild.exe发布时,如何防止DEBUG预处理器常量自动#DEFINE'd

时间:2016-11-29 15:06:16

标签: c# visual-studio visual-studio-2013 msbuild c-preprocessor

我们有一个使用Powershell脚本发布的C#Web应用程序。在我们的C#代码中,我们有几个地方检查#if DEBUG以有条件地编译应用程序并添加对日志记录的支持。

问题是我们使用此命令从命令行发布时定义了DEBUG常量:

cmd /c "path\to\msbuild.exe path\to\project.csproj /p:DeployOnBuild=true;PublishProfile=Development /verbosity:minimal"

我们创建了“开发”构建配置以对应我们的共享开发环境,然后在Visual Studio中通过GUI在创建发布配置文件时设置“开发”构建配置。

如何防止DEBUG预处理器常量自动定义?

我必须遗漏一些简单的东西。

2 个答案:

答案 0 :(得分:1)

您需要将配置属性设置为开发

<强> / P:配置=发展

cmd /c "path\to\msbuild.exe path\to\project.csproj /p:Configuration=Development/p:DeployOnBuild=true;PublishProfile=Development /verbosity:minimal"

默认情况下,Visual Studio将使用两种配置创建项目:

Debug:这个应该用于开发,它默认包含DEBUG常量。 发布:这个应该用于生产

如果您基于自定义配置&#34;开发&#34;您还可以从头开始或基于调试/发布创建自定义配置。在Debug中,它将包含DEBUG常量,您可以从.csproj文件中手动删除它,或者右键单击项目并查看项目属性。

不要混淆&#34;配置&#34;具有PublishProfile的属性,PublishProfile用于在编译后创建Deployment包,您可以使用PublishProfile将其与Debug或Release结合使用。

如果您正在使用web.config转换,请务必更新&#34;发布&#34;或根据您的需要自定义配置转换。

答案 1 :(得分:0)

告诉msbuild“自动”定义DEBUG常量的代码可以在构建配置的DefineConstants元素的.csproj文件中找到(参见我的.csproj文件中的以下摘录):

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

您需要使用不包含它的构建配置。