Ссылка на 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, поэтому, если кто-то может сказать мне, как автоматизировать это, было бы здорово!