У меня есть файл .targets
в моей папке сборки пакетов NuGet, которая затем автоматически включается в проект, который использует пакет NuGet.Использовать объекты MSBuild для копирования рекурсивно из пакета NuGet
Я хочу этот файл .targets
для копирования некоторых папок на пост-сборку. Следующий сценарий показывает, как это делается, но результат, который я получаю, неверен, потому что %(RecursiveDir)
начинается с первой wild-карты, которую я использовал для номера версии пакета.
Мой вопрос: Как я могу указать версию MyPackage в файле .targets
динамически, чтобы я мог удалить первый шаблон?
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="AfterBuild">
<ItemGroup>
<!-- MyPackage.* should be replaced by MyPackage.1.0.0.4534. But the version is set by NuGet.exe pack -Version -->
<FilesToCopy Include="$(SolutionDir)packages\MyPackage.*\myfolder\**\*.*"/>
</ItemGroup>
<Copy SourceFiles="@(FilesToCopy)" DestinationFolder="$(SolutionDir)bin\$(Configuration)\myfolder\%(RecursiveDir)"/>
</Target>
</Project>
Вы можете избежать использования версии с помощью [MSBuildThisFileDirectory] (https://msdn.microsoft.com/en-us/library/ms164309.aspx) вместо этого. Это даст вам каталог, в котором находится файл .targets, поэтому вы можете изменить include для работы относительно этого каталога и не использовать номер версии. –
Также, если у вас есть файл целей, который будет импортироваться проектами каждого пользователя, вы не должны использовать «зарезервированные» имена, такие как «AfterBuild», что, если пользователь также определяет цель с именем AfterBuild? Вместо этого используйте что-то вроде «Target Name =» PrettyUniqueTargetName «AfterTargets =« Build »' – stijn
@MattWard Я согласен с этим в качестве ответа. Я не знал об этих свойствах. – Marnix