Скопируйте NuGet contentFiles транзитивно в указанный проект - PullRequest
4 голосов
/ 10 апреля 2020

У меня есть пакет NuGet, в котором есть дополнительный файл, упакованный как Содержимое в contentFiles папке.

Затем у меня есть два C# проекта с SDK-стилем .csproj - A и B, где Проект B ссылается Проект A как ProjectReference, и в пакете NuGet имеется класс c PackageReference Проект A примерно так:

Пакет NuGet ← Проект A ← Проект B

Моя проблема заключается в том, что дополнительный файл правильно копируется в сборку выходные данные проекта A, но они не будут скопированы в выходные данные проекта B, если я не сделаю это вручную.

Есть ли способ принудительно скопировать дополнительный файл из зависимости NuGet транзитивно в выходные данные сборки Project B?

Единственный способ, о котором я могу думать, - это пользовательское Событие после сборки с командой xcopy, но это скорее обходной путь, чем реальное решение.

Спасибо за любые советы заранее!

1 Ответ

3 голосов
/ 19 апреля 2020

Если вы контролируете пакет NuGet

Вы можете добавить дополнительные цели сборки, в которые можно указать, что файлы содержимого следует копировать.

Добавить build/MyNuGetPackage.targets в пакет NuGet:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>

    <!-- For all files in /contentFiles -->
    <Content Include="$(MSBuildThisFileDirectory)..\contentFiles\**\*.*">
      <!-- Copy to output directory on build -->
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>

  </ItemGroup>
</Project>

Это позволит скопировать все файлы содержимого этого пакета в выходную папку, включая случаи, когда на этот пакет дается переходная ссылка.

...