【问题标题】:How to prevent the copy of XML documentation files in a release mode build?如何防止在发布模式构建中复制 XML 文档文件?
【发布时间】:2011-04-28 05:08:14
【问题描述】:

我有一个 Visual Studio 2010 项目,它引用了一些第三方组件。它们的程序集附有 XML 文档文件,这对我们(并且只有我们)开发人员很有用。并且无论何时构建项目(在调试或发布模式下)这些 XML 文件都会复制到构建目录。

我似乎无法在 Visual Studio 中或通过 MSBuild 找到禁用将这些 XML 文件复制到构建目录的设置或开关。构建后脚本可能是一种选择,但很臭。有任何想法吗?谢谢。

【问题讨论】:

标签: visual-studio msbuild


【解决方案1】:

当您构建项目时,会通过 ResolveAssemblyReference 任务收集 .xml/.pdb 文件。当调用 ResolveAssemblyReference 时,它​​会传递相关文件的文件扩展名列表。该文件扩展名列表在 MSBuild 属性 AllowedReferenceRelatedFileExtensions 中捕获。默认情况下,该列表将包含“.pdb;.xml”。

如果您想排除所有相关的参考文件,那么只需将属性的值覆盖为相关文件不会具有扩展名的内容。例如,您可以将 AllowedReferenceRelatedFileExtensions 设置为“-”。

您还可以自定义返回的文件列表。如果您只想查找 .pdb 文件,则需要传入 AllowedReferenceRelatedFileExtensions=".pdb"。在这种情况下,任何在 .dll/.exe 旁边具有 .pdb 文件的引用也会被复制。您也可以使用它来复制其他可能不以 .pdb/.xml 结尾的相关文件。例如,如果您有一个名为 MyAssembly.dll 的引用程序集,并且在同一文件夹中存在 MyAssembly.pdb 和 MyAssembly.foo 如果您设置 AllowedReferenceRelatedFileExtensions=".pdb;.foo",则 .pdb 和 .foo 文件都将被复制到输出目录。

【讨论】:

  • 这就是答案。非常感谢!
  • 有趣的是,这个问题花了 2 年才得到答案。
  • 详细说明如何在 msbuild 命令行或项目文件中指定此内容:stackoverflow.com/questions/2011434/…
  • 我们可以在 Visual Studio 的哪个位置更改 AllowedReferenceRelatedFileExtensions
  • 如果能在这里获得更多指导,那就太好了。但是这篇文章让我自己做更多的研究,以找出如何达到这个神奇的AllowedReferenceRelatedFileExtensions 设置,并在我看来找到了更好的建议。 stackoverflow.com/a/2012506/1039753
【解决方案2】:

设置在相关项目的属性中,在“构建”选项卡下,取消选中“XML 文档文件”。它也是一个名为 <DocumentationFile> 的 MSBuild 属性,位于适用的 <PropertyGroup> 下,用于 .*proj 文件中的构建配置。

【讨论】:

  • 此响应不准确。他询问的是来自控制供应商的预生成 XML 文件。只有在您生成自己的 XML 文件时,您的回复才有用。
  • 看来你可以在元素的.csproj文件中设置这个:".pdb".=""
【解决方案3】:

Visual Studio 项目文件的格式与任何 msbuild 文件的格式相同。因此,如果配置名称为“Release”,您可以手动将条件添加到相应的部分,以不复制您的 xml 文件。

应该会改变

<ItemGroup>

<ItemGroup Condition="'$(CONFIG)'=='RELEASE'">

或类似的东西。

【讨论】:

  • Visual Studio 项目和解决方案文件是 MSBuild 文件。
  • @AMissico 错误,解决方案文件不是 MSBuild 文件。
  • 虽然它们不是项目文件格式 (XML),但它们仍然是支持 MSBuild 文件。设置环境变量(set MSBuildEmitSolution=1 或传递属性参数(p:msbuildemitsolution=1)。
【解决方案4】:

在发布版本中将 XML 文件复制到文件夹中有什么问题?在我看来,这很好,真正的问题在于拾取文件以将它们放置在安装程序中的代码。在我看来,从您自己的 bin\release 文件夹中获取第三方 dll 并不是一个好习惯。我会让我的安装程序从我的源代码树中他们自己的文件夹中获取第三方 dll。

【讨论】:

  • 问题是这些文件除了辅助IntelliSense功能外没有其他功能。将它们包含在发布文件中是没有意义的。此外,没有安装程序...
  • 那么你是如何部署你的应用程序的?
  • 所以我的解决方案是修改复制脚本不复制你不想复制的文件。
  • 那肯定行得通。但这不是 理想 解决方案,它会阻止文件在构建中被复制。我试图理解这种行为背后的逻辑。谢谢!
  • 编写好的 XML 文档文件很大。在每次构建时复制它们会缩短我的 SSD 的使用寿命。
【解决方案5】:

如果 .xml/.pdb 被标记为构建操作“内容”(等),您可以将它们更改为“无”。您还应该确保它们的复制到构建输出是 false

这两个都设置了吗?

【讨论】:

  • 但要做到这一点,我必须将它们添加为项目项......还是我弄错了?
  • 从编译器生成的.PDB 和 .XML 文件永远不应包含在项目中,因为您最终会遇到递归构建错误和文件锁定。
  • @codegecko 你看到“无”了吗?它们需要与源 dll 相邻才能获得智能感知等。我从来没有对此有任何问题。
  • @codegecko 谁对垃圾箱说了些什么?我不会从那里引用...我通常从 /lib 引用 dll、XML 和 pdb。
  • 啊啊啊,现在一分钱都掉了,我误会了。将它们包含在 /lib 文件夹中,在 VS 中引用,将项目添加到解决方案文件夹,将输出类型指定为“无” - 明白了。实际上可能会开始在我自己的项目中使用它 - 谢谢!
猜你喜欢
  • 1970-01-01
  • 2023-03-31
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 2010-10-05
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多