NuGet импортирует только мой файл .targets в верхний проект - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть несколько проектов в моем решении, у них всех установлен один и тот же пакет NuGet.Я установил этот пакет NuGet с помощью параметра «Управление пакетами Nuget для решения» в моем меню.

Теперь этот конкретный пакет NuGet содержит файл .targets в папке сборки, который импортирует некоторые файлы в сборку.

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

Когда я просматриваю свои файлы .csproject, я вижу следующую разницу:

Проект 1

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <Import Project="..\packages\NuGetTester.1.0.1\build\NuGetTester.targets" Condition="Exists('..\packages\NuGetTester.1.0.1\build\NuGetTester.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('..\packages\NuGetTester.1.0.1\build\NuGetTester.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NuGetTester.1.0.1\build\NuGetTester.targets'))" />
  </Target>
</Project>

Проект 2 Второй проект не имеет этих строк.

  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
</Project>

Когда я включаю эти строки во второй проект, кажется, что все работает.Может кто-нибудь объяснить, почему это происходит только для первого проекта?Могу ли я каким-то образом заставить все проекты в решении, которое устанавливает этот NuGet, также включать эти строки?Я не могу заставить своих пользователей включать это вручную.

Редактировать, это файл .targets.

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <ItemGroup>
    <Content Include="$(MSBuildThisFileDirectory)\Versions\*.sql">
      <Link>App_Data\Versions\%(FileName)%(Extension)</Link>
      <CopyToOutputDirectory>Always</CopyToOutputDirectory>
    </Content>
  </ItemGroup>
</Project>

Спасибо

Ответы [ 2 ]

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

Насколько мне известно, порядок проектов не был проблемой.Проблема появляется только тогда, когда у меня нет файлов в моей целевой папке (net46) в папке сборки.

Когда я поместил случайный файл в целевую папку .NET, файл .targets был импортирован в проект.Или, если я удалил все целевые папки .NET из сборки, он работает как обычно.

Так что просто для подведения итогов.

  • Создайте папку без целевых папок .NET Framework -> Работает
  • Создать папку с пустой целевой папкой .NET Framework -> Не работает
  • Создать папку с целевой папкой .NET Framework, заполненной одним или несколькими файлами -> Это работает
0 голосов
/ 27 сентября 2018

Может кто-нибудь объяснить, почему это происходит только для первого проекта?Могу ли я как-то принудить, что каждый проект в решении, которое устанавливает этот NuGet, будет также включать эти строки?

Без журнала установки пакета nuget я не могу объяснить, почему это происходит только для первого проекта.,Но вы должны убедиться, что вы установили пакет nuget во все проекты, когда устанавливали пакет NuGet с помощью опции 'Manage Nuget Packages for Solution':

enter image description here

Если все флажки установлены, у вас все еще есть эта проблема, вы должны установить этот пакет отдельно для проблемного проекта, а затем проверить журнал установки.

На всякий случай есть решение этой проблемы.Вы можете создать файл проекта MSBuild с именем «Directory.Build.props» в той же папке, что и ваше решение, с содержимым в нем.Он будет импортирован примитивно во все проекты в иерархии каталогов.

Проверьте этот документ для получения более подробной информации.

Надеюсь, это поможет.

...