MSBUILD 为解决方案中的所有项目生成 xml 文档文件(不触及项目)

问题描述 投票:0回答:3

我正在尝试为解决方案中的所有项目创建 XML 文档,即使该选项未在项目属性中选中(这是关键点)。

我正在使用 TFS 2010 SP1 并尝试在构建定义的“MSBuild Arguments”字段中使用此“/p:TreatWarningsAsErrors=true /p:GenerateDocumentation=true”。它不会产生任何东西。

我还尝试了 /p:DocumentationFile=foo.xml ,它确实有效,但我假设该文件被最后编译的项目覆盖,所以我尝试使用变量,但没有运气,我尝试了

/p:DocumentationFile=$(Project).xml,
/p:DocumentationFile=$(localProject).xml
/p:DocumentationFile=$(localBuildProjectItem).xml

有没有办法在 MSBUILD 中为所有项目创建 XML 文档,即使项目中未选中该选项?

PS:是的,我已经看到了另一个与此类似的线程,但我不想修改项目,这就是使用 MSBUILD 进行此操作的全部意义。

感谢您的宝贵时间

msbuild
3个回答
4
投票

我也想实现这一目标,最后我按照以下步骤想出了一个解决方案:

  • 在解决方案根文件夹中创建一个
    Directory.Build.props
    文件。
  • GenerateDocumentationFile
    属性设置为
    true
  • 设置
    DocumentationFile
    属性。

默认情况下,您将使用

$(OutputPath)
$(AssemblyName)
属性来设置文档文件名,如下所示:

<DocumentationFile>$(OutputPath)$(AssemblyName).xml</DocumentationFile>

但不幸的是,这不起作用,因为首先处理

Directory.Build.props
文件,因此此时
.csproj
文件中设置的属性不可用。

幸运的是,还有另一个属性可以获取当前项目名称:

$(MSBuildProjectName)

默认输出路径如下:

  • 对于网络项目:
    bin\
  • 对于其他项目:
    bin\$(Configuration)\
    ,例如
    bin\Debug\

为了确定项目是否是 Web 项目,我使用了以

.Web
.WebApi

结尾的项目名称

所以完整的

Directory.Build.props
文件在我的例子中看起来像这样:

<Project>
    <PropertyGroup>
        <GenerateDocumentationFile>true</GenerateDocumentationFile>
        <!-- The rest is omitted for clarity. -->
    </PropertyGroup>

    <PropertyGroup>
        <!-- warning CS1591: Missing XML comment for publicly visible type or member -->
        <NoWarn>1591</NoWarn>
    </PropertyGroup>

    <PropertyGroup Condition="$(MSBuildProjectName.EndsWith('.Web')) Or $(MSBuildProjectName.EndsWith('.WebApi'))">
        <DocumentationFile>bin\$(MSBuildProjectName).xml</DocumentationFile>
    </PropertyGroup>

    <PropertyGroup Condition="!$(MSBuildProjectName.EndsWith('.Web')) And !$(MSBuildProjectName.EndsWith('.WebApi'))">
        <DocumentationFile>bin\$(Configuration)\$(MSBuildProjectName).xml</DocumentationFile>
    </PropertyGroup>
</Project>

正如您所看到的,还有一个

<NoWarn>1591</NoWarn>
属性集,它告诉编译器不要为缺少 XML 文档的公开可见类型生成警告消息。

希望有帮助。


2
投票
  1. 打开您的流程模板(即:

    $/yourproject/BuildProcessTemplates/DefaultTemplate.xaml

  2. 向下滚动找到

    Compile the Project
    活动。

  3. 添加一个名为
    DocumentationFile
    的新变量,type=
    String
    ,scope=
    Compile the Project
  4. 将其默认值设置为:

    String.Format("{0}.XML", System.IO.Path.GetFileNameWithoutExtension(serverBuildProjectItem))
    Compile the Project

  5. 保存更改并向下滚动到

    Run MSBuild for Project
    活动。

  6. CommandLineArguments
    中,设置以下值:
    String.Format("/p:SkipInvalidConfigurations=true {0};DocumentationFile={1}", MSBuildArguments, DocumentationFile)
    Run MSBuild for Project

  7. 签入更改并构建。即使项目没有设置,这也应该生成文档。


0
投票

可以创建影响 C/C++ 编译器的环境变量:

来自 https://learn.microsoft.com/en-us/cpp/build/reference/cl-environment-variables?view=msvc-170

CL and _CL_, if defined. The CL tool prepends the options and
arguments defined in the CL environment variable to the command-line
arguments, and appends the options and arguments defined in _CL_,
before processing.

生成 .xdc 文件的编译器开关是 /doc

然后您可以对生成的 .xdc 文件运行 XDCMAKE。

© www.soinside.com 2019 - 2024. All rights reserved.