我们遇到了#if DEBUG
预编译指令的错误,该指令在服务器上部署时无效。
我们在当地工作时一切都很顺利。即使本地发布也不包含if DEBUG
内的代码。当我们在TFS构建服务器上构建解决方案时会出现问题。
这是我检查的一切,也许一双新鲜的眼睛会找到我忽略的东西。
在发布配置中定义DEBUG常量
这是项目配置(我们使用的#if DEBUG
):
在我的电脑上运行正常。当我切换到Release配置时,#if DEBUG
中的代码不会输出到dll。
配置文件夹路径
TFS使用tfsBuild.proj文件,配置文件夹路径应包含文件所在的目录。我仔细检查以确保它的目标是正确的。
SolutionToBuild
这是定义需要构建的两个解决方案的配置部分:
<SolutionToBuild Include="$(BuildProjectFolderPath)/../../../PathToTheSolutionThatIsCorrectIDoubleChecked1/Solution1.sln">
<Targets></Targets>
<Properties>
</Properties>
</SolutionToBuild>
<SolutionToBuild Include="$(BuildProjectFolderPath)/../../../PathToTheSolutionThatIsCorrectIDoubleChecked2/Solution2.sln">
<Targets></Targets>
<Properties>
</Properties>
</SolutionToBuild>
ConfigurationToBuild
在tfsBuild.proj文件中,是一个告诉TFS用于构建的配置的部分。它的定义如下:
<ConfigurationToBuild Include="Release|Any CPU">
<FlavorToBuild>Release</FlavorToBuild>
<PlatformToBuild>Any CPU</PlatformToBuild>
</ConfigurationToBuild>
在日志文件中,我可以看到TFS使用以下选项运行csc.exe:
C:\windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:TRACE /highentropyva+ /reference:...
但也有一些定义了DEBUG常量:
C:\windows\Microsoft.NET\Framework64\v4.0.30319\Csc.exe /noconfig /nowarn:1701,1702 /nostdlib+ /errorreport:prompt /warn:4 /define:DEBUG;TRACE /highentropyva+ /reference
为什么TFS似乎使用Debug配置构建项目的一部分?