MSBuildTasks и NuGet — как восстановить MSBuild.Community.Tasks.dll?

У меня есть проект, в котором установлен пакет NuGet с именем MSBuildTasks. Он устанавливает два файла: MSBuild.Community.Tasks.targets и MSBuild.Community.Tasks.dll в каталог .build в каталоге решения. Эта ссылка на пакет была добавлена ​​в файл packages.config в этом каталоге проекта, поэтому, когда я создаю проект (и с включенными настройками восстановления пакета NuGet), он восстанавливает пакет, и это здорово, потому что тогда я могу распространять исходный код другим разработчиков и собрать его на нашем сервере сборки без каких-либо недостающих файлов...

Однако проблема в том, что когда NuGet восстанавливает пакет, он не восстанавливает эти два файла в ожидаемое место, в котором они были изначально, когда я впервые установил его с помощью команды Install-Package MSBuildTasks, которая находилась в каталоге $(SolutionDir)\.build. Вместо этого он установил его в каталог $(SolutionDir)\packages\MSBuildTasks.1.4.0.78\tools, поэтому теперь, если я хочу включить файл MSBuild.Community.Tasks.targets, я должен указать этот путь абсолютно в моем .csproj или другом файле .targets. Это представляет проблему, поскольку номер версии, несомненно, изменится, и для исправления потребуется ручная работа.

Есть ли способ восстановить файлы .targets и .dll MSBuildTasks в исходное расположение $(SolutionDir)\.build, куда они были установлены впервые? Текущее поведение восстановления в каталог пакетов, хотя оно имеет смысл для других пакетов, кажется ошибкой для этого конкретного пакета, поскольку я не смогу узнать номер версии каталога, который нужно включить в мои другие .targets или . csproj-файлы.


person Aaron Cunnington    schedule 22.10.2014    source источник


Ответы (2)


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

Глядя на пакет MSBuildTasks NuGet, файлы, добавленные в $(SolutionDir)\.build, добавляются сценарием PowerShell. Этот сценарий PowerShell не будет выполняться при восстановлении пакета NuGet.

Вы должны добавить $(SolutionDir)\.build в свой репозиторий системы управления версиями.

person Matt Ward    schedule 22.10.2014
comment
Но разве проверка DLL не противоречит цели использования диспетчера пакетов, такого как NuGet, в первую очередь? - person Dov; 12.01.2017
comment
Если пакет NuGet добавляет файлы, которые не будут восстановлены, самое простое решение — добавить эти файлы в систему управления версиями. Альтернативой может быть немного более сложный процесс предварительной сборки, когда вы восстанавливаете, а затем переустанавливаете пакет NuGet MSBuildTasks. Или сам пакет NuGet изменен, чтобы не требовать эти файлы. - person Matt Ward; 13.01.2017
comment
Похоже, что этот сценарий PowerShell был удален с версии 1.5, но руководство «Начало работы» по-прежнему предлагает использовать папку .build. Я поднял проблему. - person Neo; 29.03.2017
comment
@Neo Я дал ответ по проблеме GitHub, но я добавлю его сюда, если он кому-то поможет: - person lcornejo; 30.08.2017

В более новых версиях 1.5+ пакет Nuget не устанавливается в каталог решения; это сработало для меня, хотя:

<PropertyGroup>
    <MSBuildCommunityTasksPath>$(USERPROFILE)\.nuget\packages\msbuildtasks\1.5.0.235\tools</MSBuildCommunityTasksPath>
</PropertyGroup>

Это связано с добавлением версии, но если кто-то знает способ избавиться от необходимости обновлять версию на пути при обновлении пакета, это было бы здорово.

person lcornejo    schedule 29.08.2017