Re[3]: скопировать в outputdir фал xml документации
От: Михаил Романов Удмуртия https://mihailromanov.wordpress.com/
Дата: 07.12.22 08:26
Оценка: 139 (3)
Здравствуйте, MadHuman, Вы писали:

MH>можно наверно разобраться что там изменилось (после апгрэйда студии и мсбилда), но пока видится что проще добавить в паблиш явную таску по копированию файла.

Я вас понял.
Стало интересно самому и я полез посмотреть.
Получилось следующее.

1. Да, вы правы, при выполнении цели Package, все файлы XML-документации от связанных сборок в публикацию не включаются (т.е. в bin есть, а в папке публикации и в пакете — нет).
Этим можно управлять с помощью опции ExcludeXmlAssemblyFiles (и похоже именно она, точнее — её значение по умолчанию, поменялась при апгрейде)

Т.е., если добавить в ваш проект
<PropertyGroup>
    <ExcludeXmlAssemblyFiles>False</ExcludeXmlAssemblyFiles>
</PropertyGroup>

В публикацию попадут все файлы XML-документации от всех связанных сборок и проектов.

2. Если описанное выше поведение вас не устраивает, а хочется чтобы копировался только 1 файл от одной сборки, это можно сделать через коллекцию Items под названием FilesForPackagingFromProject.
Правда, эта коллекция, похоже очищается в процессе сборки, поэтому её нужно добавить в нужную точку Pipeline сборки (после компиляции, но перед тем как будет произведено копирование для упаковки).
Вот тут указывается, что нужно добавить инъекцию в Pipline перед целью CopyAllFilesToSingleFolderForPackage, но, похоже (статья немного старая) с тех пор некоторые цели изменили название и такой цели в MSBuild для VS2022 я не нашел, зато нашел CopyAllFilesToSingleFolderForMsdeploy.
Поэтому решение выглядит так — добавить в проект фрагмент:
<Target Name="AddXml" BeforeTargets="CopyAllFilesToSingleFolderForMsdeploy">
   <ItemGroup>
     <FilesForPackagingFromProject Include="bin\ClassLibrary1.xml">
          <DestinationRelativePath>bin\ClassLibrary1.xml</DestinationRelativePath>
     </FilesForPackagingFromProject>
   </ItemGroup>
</Target>

Где, как вы понимаете ClassLibrary1.xml — это тот самый файл документации из связанной сборки

Решение прикладываю

P.S. Буду признателен, если опишите результаты ваших экспериментов
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.