我正在尝试为解决方案中的所有项目创建 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 进行此操作的全部意义。
感谢您的宝贵时间
我也想实现这一目标,最后我按照以下步骤想出了一个解决方案:
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 文档的公开可见类型生成警告消息。
希望有帮助。
打开您的流程模板(即:
$/yourproject/BuildProcessTemplates/DefaultTemplate.xaml
)向下滚动找到
Compile the Project
活动。DocumentationFile
的新变量,type=String
,scope=Compile the Project
将其默认值设置为:
String.Format("{0}.XML", System.IO.Path.GetFileNameWithoutExtension(serverBuildProjectItem))
保存更改并向下滚动到
Run MSBuild for Project
活动。在
CommandLineArguments
中,设置以下值:
String.Format("/p:SkipInvalidConfigurations=true {0};DocumentationFile={1}", MSBuildArguments, DocumentationFile)
签入更改并构建。即使项目没有设置,这也应该生成文档。
可以创建影响 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。