2015-11-25 8 views
2

У меня есть файл .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> 
+2

Вы можете избежать использования версии с помощью [MSBuildThisFileDirectory] (https://msdn.microsoft.com/en-us/library/ms164309.aspx) вместо этого. Это даст вам каталог, в котором находится файл .targets, поэтому вы можете изменить include для работы относительно этого каталога и не использовать номер версии. –

+1

Также, если у вас есть файл целей, который будет импортироваться проектами каждого пользователя, вы не должны использовать «зарезервированные» имена, такие как «AfterBuild», что, если пользователь также определяет цель с именем AfterBuild? Вместо этого используйте что-то вроде «Target Name =» PrettyUniqueTargetName «AfterTargets =« Build »' – stijn

+0

@MattWard Я согласен с этим в качестве ответа. Я не знал об этих свойствах. – Marnix

ответ

1

Чтобы избежать версии пакета можно использовать MSBuildThisFileDirectory свойство вместо этого.

MSBuildThisFileDirectory свойство дает вам каталог, в котором файл .targets поэтому вы можете изменить <FilesToCopy> элемент использовать путь относительно этого каталога, и вы не должны использовать номер версии.

<FilesToCopy Include="$(MSBuildThisFileDirectory)myfolder\**\*.*"/>