Я также хотел добиться этого, и, наконец, я нашел решение, выполнив следующие шаги:
- Создайте файл
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.
Надеюсь, это поможет.