我们有一个使用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
预处理器常量自动定义?
我必须遗漏一些简单的东西。
答案 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>
您需要使用不包含它的构建配置。