我正在尝试为解决方案中的所有项目创建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做的全部内容。
感谢您的时间
答案 0 :(得分:2)
打开您的流程模板(即:$/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)
签入更改并构建。即使项目未设置文档,也应该生成文档。
答案 1 :(得分:0)
我也想实现这一目标,最后我按照以下步骤提出了一个解决方案:
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文档的公共可见类型生成警告消息。
希望有帮助。