1

我正在尝试生成一个没有生成 pdb 文件的发布版本。我看到很多帖子建议右键单击项目,选择属性,转到构建选项卡,然后转到高级... butoon 并将调试信息更改为无。这一切正常,但我需要构建约 50 个解决方案,每个解决方案包含约 25 个项目!其他帖子提到编辑适当的 .csproj 文件,但同样,有这么多项目,这需要很长时间。有什么方法可以通过 TFSBuild.proj 文件实现这一点?

我尝试将以下内容添加到 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)"/>

在此先感谢,乌尔维

4

1 回答 1

0

我不完全确定(没有安装团队构建),但是当您在 TFSBuild 项目中更改此类属性时,它们很可能不会传播到您的实际项目文件,因为实际的解决方案/项目是通过启动构建的另一个 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 文件,然后修改每个文件以将 true 替换为 false。甚至更快:在资源管理器中搜索 *.csproj,在编辑器中一次打开所有文件,并对所有打开的文件执行查找/替换。

于 2009-12-17T09:57:54.037 回答