msbuild - 使用 MSBuild Targets 从 NuGet 包递归复制文件

标签 msbuild nuget msbuild-task

我的 NuGet 包构建文件夹中有一个 .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相反,属性(property)。

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

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

关于msbuild - 使用 MSBuild Targets 从 NuGet 包递归复制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33911368/

相关文章:

asp.net-mvc - 如何重新安装已经在解决方案包目录中的 nuget 包?

visual-studio-2008 - 团队 build 与 MSBuild?

msbuild - TeamCity:如何告诉 MSBuild 考虑发布配置文件参数?

wcf - 生成 WCF 代理作为构建过程的一部分

asp.net - 构建任务意外失败

msbuild - 隐藏 msbuild 任务的控制台输出

.net - 在实现 microsoft.build.utilities.task 时,如何访问构建的各种环境变量?

msbuild - 开源 msbuild 任务

azure - 错误 NU1102 : Unable to find package NuGet. 版本为 (>= 4.9.3) 的框架

c# - 无法在 C# 中运行 Google Cloud PubSub,DLL 问题