【问题标题】:Control pdb file output from build defintion file从构建定义文件控制 pdb 文件输出
【发布时间】:2009-12-16 17:05:12
【问题描述】:

我正在尝试生成没有生成 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)"/>

提前致谢, 乌尔维

【问题讨论】:

  • 为什么不想生成 PDB?只是古玩。

标签: file msbuild pdb-files


【解决方案1】:

我不完全确定(没有安装团队构建),但很有可能当您在 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,在编辑器中一次打开所有文件,并对所有打开的文件执行查找/替换。

【讨论】:

    猜你喜欢
    • 2014-08-19
    • 2012-09-12
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 2021-01-07
    相关资源
    最近更新 更多