У меня есть несколько проектов, требующих настройки в непрерывной среде.
Я помещаю все настройки в отдельный файл .target, чтобы использовать этот файл во всех проектах.
В самом конце моих файлов csproj я помещаю (до закрытия) Project
элемент:
Это работает довольно хорошо, если я не пытаюсь включить дополнительный ссылочный путь.
Если я укажу с помощью командной строки путь (msbuild myproject.csproj /p:ReferencePath="C:\path\to\dlls"
). Проект скомпилирован.
Мой целевой файл:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- some tweaks here -->
<PropertyGroup Condition="'$(CompileFor)' == 'SP2013'">
<SomeProperty>some value</SomeProperty>
<AdditionalReferencePaths>C:\path\to\dlls</AdditionalReferencePaths>
</PropertyGroup>
</Project>
Но это не работает (DLL не может быть решена).
Я тоже пробовал:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<AdditionalReferencePaths Include="C:\path\to\dlls"/>
</ItemGroup>
</Project>
Это не работает, потому что элемент ItemGroup
не может быть вне элемента Target
Наконец, я попробовал:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="SomeTarget" BeforeTargets="BeforeBuild">
<ItemGroup>
<AdditionalReferencePaths Include="C:\path\to\dlls"/>
</ItemGroup>
</Target>
</Project>
Это все еще не работает. Нет ошибок, я вижу, что цель вызывается в журнале сборки, но библиотеки DLL все еще не разрешены.
Как это исправить?
Чтобы дать немного контекста, твики, которые я включил в целевой файл, позволяют мне компилировать проект для разных версий DLL. Код представляет собой плагин стороннего приложения (SharePoint, чтобы назвать его), и я хочу скомпилировать для нескольких различных версий продукта. Используя некоторые условные выражения, я могу настроить таргетинг либо на папку с одной версией продукта, либо на другую папку для другой версии продукта.