Здравствуйте, 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. Буду признателен, если опишите результаты ваших экспериментов