Есть ли способ использовать пакет расширения MSBuild с "локальной" ссылкой, которая не требует запуска установщика? Другими словами, можете ли вы сохранить цели в папке с элементами решения, чтобы каждый разработчик не мог ее установить?
Можно ли использовать MSBuild Extension Pack без установки?
Ответ 1
Перед статусом импорта задач необходимо объявить свойство ExtensionTasksPath. Например, посмотрите:
<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<ExtensionTasksPath Condition="'$(ExtensionTasksPath)' == ''">E:\Data\Development\My Code\Community\MSBuild\ExtensionPack\</ExtensionTasksPath>
</PropertyGroup>
<Import Project="$(ExtensionTasksPath)MSBuild.ExtensionPack.tasks"/>
<Target Name="Demo">
<MSBuild.ExtensionPack.FileSystem.File TaskAction="GetTempFileName">
<Output TaskParameter="Path" PropertyName="TempPath"/>
</MSBuild.ExtensionPack.FileSystem.File>
<Message Text="TempPath: $(TempPath)" />
</Target>
</Project>
Задачи сообщества MSBuild аналогичны, но свойство имеет имя MSBuildCommunityTasksLib. Я думаю, что для задач SDC это называется TasksPath.
Ответ 2
Мне не удалось заставить это работать с относительными путями (т.е. не c:\blah but..\blah).
Это связано с тем, что вы не могли повторно использовать переменную ExtensionTasksPath, если она относительна, поскольку ваш файл (.csproj) и файл MsBuild.ExtensionPack.tasks находятся в разных местах, что приводит к другому значению для относительного пути,
В конце концов, это то, что заставило его работать для меня (поставить поверх вашего файла .csproj):
<PropertyGroup>
<ExtensionTasksPath Condition="'$(ExtensionTasksPath)' == ''">..\4.0\</ExtensionTasksPath>
</PropertyGroup>
<Import Project="..\references\ExtensionPack\4.0\MSBuild.ExtensionPack.tasks"/>
Причина, по которой вам нужен "..\4.0 \" вместо "" (пустой), заключается в том, что файл MsBuild.ExtensionPack.tasks обнаруживает пустое значение и делает некоторые другие вещи, если это так. Я не хотел взломать файл MsBuild.ExtensionPack.tasks, если я захочу его позже обновить.