使用MSBuild目标从NuGet包递归复制文件

使用MSBuild目标从NuGet包递归复制文件,msbuild,nuget,msbuild-task,Msbuild,Nuget,Msbuild Task,在我的NuGet package build文件夹中有一个.targets文件,该文件将自动包含在使用NuGet软件包的项目中 我想要这个.targets文件在生成后复制一些文件夹。下面的脚本显示了这是如何完成的,但是我得到的输出是错误的,因为%(RecursiveDir)从我用于包的版本号的第一个通配符开始 我的问题:如何在.targets文件中动态指定MyPackage的版本,以便删除第一个通配符 <?xml version="1.0" encoding="utf-8" ?> &

在我的NuGet package build文件夹中有一个
.targets
文件,该文件将自动包含在使用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>

为了避免必须更改软件包版本,您可以使用该属性

MSBuildThisFileDirectory属性为您提供了.targets文件所在的目录,因此您可以将元素更改为使用相对于该目录的路径,而不必使用版本号

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


您是否可以通过使用来避免使用该版本。这将为您提供.targets文件所在的目录,以便您可以更改包含以相对于该目录工作,而不必使用版本号。此外,如果您有一个将由每个用户的项目导入的目标文件,则不应使用“保留”名称,如“AfterBuild”如果用户还定义了一个名为AfterBuild的目标呢?相反,使用类似于
Target Name=“PrettyUniqueTargetName”AfterTargets=“Build”
@MattWard的方法,我会接受这个答案。我不知道这些属性。@stijn我不知道这个选项。我只发现