【问题标题】:MSBuild: Generate XML documentation for main project but not dependency projectsMSBuild:为主项目而不是依赖项目生成 XML 文档
【发布时间】:2013-08-21 17:57:37
【问题描述】:

我有一个 .sln 文件,其中包含多个项目。为了简单起见,我们称它们为...

  • 项目A
  • 项目B
  • 项目C

...其中 A 是引用 B 和 C 的主要项目。我的目标是更新我的构建脚本,为 ProjectA 生成一个 XML“Intellisense”文档文件,而不给出关于缺少 B 和 C 文档的构建警告。

当前构建脚本

我有一个 MSBuild 脚本,在构建步骤中包含以下内容:

<PropertyGroup>
    <CustomOutputPath>C:\build\output\</CustomOutputPath>
</PropertyGroup>
<ItemGroup>
    <Projects Include="ProjectA\ProjectA.csproj">
        <Properties>OutputPath=$(CustomOutputPath)</Properties>
    </Projects>
</ItemGroup>
<MSBuild Projects="@(Projects)" />

(ItemGroup 中实际上列出了多个项目,但同样,让我们​​保持简单。)

当我运行构建脚本时,它足够聪明地为我编译 B、C 和 A,即使我只指定了 A。所有输出都出现在“CustomOutputPath”位置。

我得到的最接近的......

如果我将“DocumentationFile”属性添加到我的项目条目...

<ItemGroup>
    <Projects Include="ProjectA\ProjectA.csproj">
        <Properties>OutputPath=$(CustomOutputPath);DocumentationFile=ProjectA.xml</Properties>
    </Projects>
</ItemGroup>

...然后“ProjectA.xml”出现在“CustomOutputPath”中。但是,我还在项目文件夹中为所有三个项目获取了名为“ProjectA.xml”的文件:

  • ProjectA/ProjectA.xml
  • ProjectB/ProjectA.xml
  • ProjectC/ProjectA.xml

这些文件包含各自项目的“Intellisense”文档,即使它们都被命名为“ProjectA.xml”。

这会在项目文件夹中创建不需要的和误导性命名的文件,并且(更重要的是)为 B 和 C 中缺少的文档 cmets 生成构建警告。我不想将文档 cmets 添加到这些项目中,所以我我宁愿找到一种方法让 MSBuild 仅为 ProjectA 生成文档。

谁能提供任何见解或替代解决方案?

【问题讨论】:

  • 至此,我还没有找到直接解决这个问题的方法。我已经使用 Skeet 的 #pragma 建议 (stackoverflow.com/a/203873/38657) 抑制了构建警告,并根据下面 Alexey 的回答删除了额外的 .xml 文件。但这些都是解决方法。希望一个更清洁的解决方案会出现。
  • 有什么更新吗?这是一个非常讨厌的问题......
  • 不,这里没有见解。老实说,我已经尽可能远离 MSBuild。 Psake、Rake 和 Fake 更容易使用(尽管我没有在其中任何一个中解决这个问题)。

标签: msbuild msbuild-task


【解决方案1】:

根据我的发现 - DocumentationFile 是一个全局级别的属性(将用于创建 DocFileItem - 全局级别的项目列表)。据我了解,您将无法在单个逻辑脚本中以任何简单的方式对其进行更改。

您可以做的是在单独的文件中定义特殊目标,该目标将被导入每个项目文件(直接编辑项目文件或使用 $CustomBeforeMicrosoftCommonTargets 等属性),这将用项目相关值覆盖 DocumentationFile。 因此,您可能可以为不同的项目生成不同的文档文件名。

另一种解决方案 - 只需在构建所有 projs 后立即清理所有不必要的 doc 文件。

【讨论】:

    猜你喜欢
    • 2020-05-06
    • 2019-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多