Ссылка на MSBuildTasks из пакета Nuget

Я пытаюсь ссылаться на MSBuildTasks из файла MSBuild, и я не уверен, как это сделать при использовании NuGet для MSBuildTasks.

В ссылке говорится использовать

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>

когда вы установили MSBuildTasks с помощью файла msi. Однако при установке из NuGet он помещает его в подпапку, содержащую версию, поэтому, если я обновляю MSBuildTasks, она сломает путь в файле сборки. Каков наилучший способ ссылки на MSBuildTasks при его установке через NuGet?

Ответ 1

Недавно я установил это для resourcelib, с использованием MSBuildTasks версии 1.4.0.45. В этой версии, добавив его в проект, DLL была помещена в подкаталог "Build", который выглядит так, как будто вам нужно зарегистрироваться. Я попытался автоматически загрузить его, но если он ссылается в файле проекта, он должен быть там с самого начала.

Чтобы добавить его в проект, я использовал следующий код:

 <PropertyGroup>
  <MSBuildCommunityTasksPath>$(MSBuildProjectDirectory)\Build</MSBuildCommunityTasksPath>
 </PropertyGroup>
 <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/>

Здесь используется MSBuildProjectDirectory, поэтому его можно построить с помощью MSBuild в командной строке.

Ответ 2

Просто выбросьте это здесь, если кто-то снова столкнется с этой проблемой. Похоже, что когда вы устанавливаете MSBuildCommunityTasks через NuGet, в решение добавляется папка .build, которая рекомендуется для проверки с исходным кодом. Однако файл MSBuild.Community.Tasks.targets имеет элемент <MSBuildCommunityTasksPath>, который указывает на папку c:\Program Files (x86), которая неверна. Эта папка действительна при установке MsBuildCommunityTasks с использованием MSI. Это недопустимо в случае Nuget, который устанавливает MsBuildCommunityTasks в папке пакетов вашего решения. Поэтому я закончил модификацию файла .targets и изменил MSBuildCommunityTasksPath, чтобы указать на:

<MSBuildCommunityTasksPath>$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools</MSBuildCommunityTasksPath>

Все еще нет кубиков. Итак, наконец, я только что отредактировал файл веб-проекта и изменил элемент Import для MSBuildCommunityTasks:

<Import Project="$(SolutionDir)\packages\MSBuildTasks.1.4.0.56\tools\MSBuild.Community.Tasks.Targets"/>

Это работает, поскольку он напрямую сообщает проекту, чтобы искать файл .Targets в папке пакетов. Имейте в виду, что если вы обновите версию MSBuildTasks, вам придется изменить элемент импорта. Я MsBuild noob, поэтому, если кто-то может сказать мне, как автоматизировать это, было бы здорово!