2009-12-16 94 views
1

我想生成没有生成pdb文件的版本构建。我已经看到许多帖子,建议右键单击项目,选择属性,转到生成选项卡,然后到高级... butoon,并将调试信息更改为无。这个工作和所有,但我需要做一个约50个解决方案,每个包含大约25个项目!其他帖子提到编辑适当的.csproj文件,但同样,有这么多的项目,这将需要很长时间。有什么办法通过TFSBuild.proj文件来实现这个吗?从构建定义文件控制pdb文件输出

我已经尝试添加以下到TFSBuild.proj文件,没有运气。

<PropertyGroup> 
    <Configuration>Release</Configuration> 
    <Platform>AnyCPU</Platform> 
</PropertyGroup> 

<PropertyGroup> 
    <DebugSymbols>false</DebugSymbols> 
    <DebugType>none</DebugType> 
    <Optimize>true</Optimize> 
</PropertyGroup> 

以下行输出Release | AnyCPU,none和false,但我仍然在$(OutputDir)文件夹中看到.pdb文件。

<Message Text="$Configuration|Platform): $(Configuration)|$(Platform)" /> 
<Message Text="DebugType is: $(DebugType)"/> 
<Message Text="DebugSymbols is: $(DebugSymbols)"/> 

由于提前, Urvi

+0

为什么你不想生成PDB?只是好奇。 – 2010-01-11 02:22:19

回答

0

我不能完全确定(没有安装团队建设),但它很可能就是当你在TFSBuild poject改变这种特性,他们这样做不会传播到实际的项目文件,因为实际的解决方案/项目是通过启动另一个MSBuild任务构建的,并且Microsoft.TeamFoundation.Build.targets中的责任目标不会将这些属性传递给任务。

例如,这是在上述文件中的目标“CallCompile”(再次,我不知道如果这是你的构建方案使用,但思路是一样的):

<Target Name="CallCompile" DependsOnTargets="$(CoreCompileDependsOn)"> 
    <!-- Pass in all properties that users might want during the course of the compile targets. --> 
    <MSBuild Projects="$(MSBuildProjectFile)" 
      Properties="a lot of properties, but not DebugSymbols etc" 
      Targets="CoreCompile"> 
    </MSBuild> 
</Target> 

所以,你可能逃脱添加你想要的目标文件的属性,但是:

  • 这意味着你每次都要更改文件升级
  • 它可能不是所有项目的期望行为
  • 最后但并非最不重要的:如果调用的项目文件还包含DebugSymbols/...,则文件中的属性值将覆盖由MSBuild任务传递的属性值,所以最终你还是要改变所有项目文件处理这个才达到你想要什么

的一种方式,是写在你选择的语言的脚本,其中列出某个目录下所有的* .csproj的文件,然后修改每个文件以用false替换true。甚至更快:在Explorer中搜索* .csproj,在编辑器中立即打开所有文件,并在所有打开的文件上执行查找/替换。