2015-11-25 34 views
2

我在我的NuGet包構建文件夾中有一個.targets文件,然後它自動包含在使用NuGet包的項目中。使用MSBuild目標從NuGet包中遞歸複製文件

我想要這個.targets文件複製後構建一些文件夾。以下腳本顯示了這是如何完成的,但我得到的輸出是錯誤的,因爲%(RecursiveDir)從我用於包的版本號的第一個通配符開始。

我的問題:我如何動態指定.targets文件中的MyPackage版本,以便我可以刪除第一個通配符?

<?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的目標,該怎麼辦?相反,使用像'目標名稱=「PrettyUniqueTargetName」AfterTargets =「Build」' – stijn

+0

@MattWard我會接受這個答案。我不知道這些屬性。 – Marnix

回答

1

爲避免你可以使用MSBuildThisFileDirectory屬性,而不是包的版本。

的MSBuildThisFileDirectory屬性使您在.targets文件是這樣你就可以改變<FilesToCopy>元素使用相對於該目錄的路徑,你不必使用版本號的目錄。

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