MSBUILD Создать XML-файл документации для всех проектов в решении (не затрагивая проекты) - PullRequest
7 голосов
/ 01 февраля 2012

Я пытаюсь создать документацию XML для всех проектов в решении, даже если опция не отмечена в свойствах проекта (и это ключевой момент).

Я использую TFS 2010 с пакетом обновления 1 (SP1) и пробовал с этим "/ p: TreatWarningsAsErrors = true / p: GenerateDocumentation = true" в поле "MSBuild Arguments" моего определения сборки. Ничего не генерирует.

Я также пытался с /p:DocumentationFile=foo.xml, который работает, но я предполагаю, что файл перезаписывается последним скомпилированным проектом, поэтому я попытался использовать переменную, но безуспешно, я попытался с

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

Есть ли способ создать документацию XML для всех проектов из MSBUILD, даже если эта опция не отмечена в проекте?

PS: И да, я уже вижу другой поток, похожий на этот, но я не хочу изменять проекты, вот и весь смысл делать это с MSBUILD.

Спасибо за ваше время

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012
  1. Откройте ваш шаблон процесса (то есть: $/yourproject/BuildProcessTemplates/DefaultTemplate.xaml)

  2. Прокрутите вниз, чтобы найти действие Compile the Project.

  3. Добавьте новую переменную с именем DocumentationFile, тип = String, область действия = 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 голосов
/ 13 ноября 2018

Я также хотел добиться этого, и, наконец, я нашел решение, выполнив следующие шаги:

  • Создайте файл Directory.Build.props в корневой папке решения.
  • Установить *Свойство 1007 * имеет значение true.
  • Установите свойство DocumentationFile.

По умолчанию вы можете использовать свойства $(OutputPath) и $(AssemblyName) для установки имени файла документации, напримерthis:

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

Но, к сожалению, это не работает, так как Directory.Build.props файл обрабатывается первым, следовательно, свойства, установленные в .csproj файлах, на данный момент недоступны.

К счастью, есть еще одно свойствокоторый получает имя текущего проекта: $(MSBuildProjectName)

Выходной путь по умолчанию следующий:

  • для веб-проектов: bin\
  • для других проектов: bin\$(Configuration)\, например bin\Debug\

Чтобы решить, является ли проект веб-проектом или нет, я использовал название проекта, которое заканчивается либо .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.

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...