VSIX - Как включить файлы документации XML в пакет? - PullRequest
0 голосов
/ 31 октября 2018

Я нашел следующую статью, которая хорошо описывает, как файлы PDB ссылок на проекты могут быть включены в пакет VSIX: http://www.cazzulino.com/include-pdbs-in-vsix.html.

Теперь я хотел бы сделать то же самое, но для документации XML-файлов, которые создаются ссылками на проекты. Я вижу, что файлы XML уже скопированы в выходной каталог проекта VSIX, но как я могу убедиться, что они также добавлены в файл .VSIX?

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Отвечая на мой вопрос:

По-видимому, существует также выходная группа DocumentationProjectOutputGroup. Затем эту группу вывода можно добавить ко всем ссылкам проекта следующим образом:

<PropertyGroup>
    <DefaultIncludeOutputGroupsInVSIX>
        BuiltProjectOutputGroup;
        DebugSymbolsProjectOutputGroup;
        GetCopyToOutputDirectoryItems;
        SatelliteDllsProjectOutputGroup;
        BuiltProjectOutputGroupDependencies;
        DocumentationProjectOutputGroup;
        SatelliteDllsProjectOutputGroupDependencies
    </DefaultIncludeOutputGroupsInVSIX>
</PropertyGroup>

<ItemDefinitionGroup>
    <ProjectReference>
        <IncludeOutputGroupsInVSIX>$(DefaultIncludeOutputGroupsInVSIX)</IncludeOutputGroupsInVSIX>
    </ProjectReference>
</ItemDefinitionGroup>
0 голосов
/ 01 ноября 2018

Вы можете добавить любой файл по своему усмотрению, используя VSIXSourceItem в файле проекта или используя его из отдельного импортированного проекта:

...
<!--You also can invoke this target before GetVsixSourceItems-->
<Target Name="ForceIncludeItems" AfterTargets="GetVsixSourceItems"> 
  <ItemGroup>
    <VSIXSourceItem Include="Path_to_your_xml_file" />
  </ItemGroup>
</Target>

Также вы можете указать подстановочные знаки и функции для выбора специальных файлов, которые вы хотите:

...
<VSIXSourceItem Include="*.xml" Condition="$([System.String]::new('%FileName)').StartsWith('My_start_with_pattern'))"/>

Более простой, но менее гибкий способ - установить IncludeDocFilesInVSIXContainer в true:

...
<IncludeDocFilesInVSIXContainer>true</IncludeDocFilesInVSIXContainer>

Таким образом, цель будет включать все элементы, которые были включены как @DocFileItem (как я знаю, по умолчанию это только файл xml для самого проекта vsix).

Таким образом, чтобы добавить все XML-файлы, за исключением подавляемого пакетом сборки vsix, необходимо добавить их вручную:

...
<IncludeDocFilesInVSIXContainer>true</IncludeDocFilesInVSIXContainer>

...
<Target Name="AppendNonSuppressXml" AfterTargets="GetVsixSourceItems">
    <ItemGroup>
      <SuppressXml Include="@(SuppressFromVsix->'%(FileName)')" /> <!-- store all suppressed assemblies names to avoid copying their xml files-->
    </ItemGroup>
    <PropertyGroup>
      <SuppressAsString>$([System.String]::Join(';', @(SuppressXml))</SuppressAsString> <!-- use to emulate Collections.Contains(item)-->
    </PropertyGroup>
    <ItemGroup>
      <!-- assume that xml files will be received from ReferenceCopyLocalPaths, you can use another source -->
       <VSIXSourceItem 
        Include="@(ReferenceCopyLocalPaths)"
        Condition="$(IncludeDocFilesInVSIXContainer) And '%(ReferenceCopyLocalPaths.Extension)' =='.xml' 
         And !($([System.String]::new($(SuppressAsString)).Contains('%(ReferenceCopyLocalPaths.FileName)')))" />
    </ItemGroup>
</Target>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...