每次构建后将所有 TypeScript 文件复制到输出目录

Copy all TypeScript files to output directory after each build

我的项目中有一堆 TypeScript 文件,我希望在每次构建时将它们全部复制到输出目录,同时保留它们的结构。这是我尝试过的方法,但它不起作用:

<ItemGroup>
    <TypeScriptFiles Include="Scripts\*.ts" />
</ItemGroup>

<Target Name="CopyTypeScriptsToOutput">
    <Copy SourceFiles="@(TypeScriptFiles)" DestinationFolder="$(OutputDir)\Scripts" />
</Target>

我也用过 Include="Scripts\**\*.ts" 但没有成功。有什么问题吗?

I've also used Include="Scripts***.ts" but no success. What could be wrong?

Include的内容是你项目中文件的相对路径。

主要问题是你没有指定目标运行s.如果你只使用BuildUI来构建你的项目,目标不会 运行。您应该将构建依赖项添加到目标,通常像 BeforeTargets and AfterTargets,这样您就可以在构建时 运行 目标。

其次,目标生成路径的属性有问题,如 $(OutputDir)。我尝试在vs2015,2017,2019中测试这个属性,MSBuild默认没有这个属性。如果属性不是你自己定义的,这个值永远达不到。所以我建议你可以使用 $(OutputPath)$(OutputDir).

另外,请在target中放置TypeScriptFiles,防止第一次加载csproj文件时混淆。如果你全局定义它,它会被系统识别并重新映射到项目中。

样本

这是我成功完成的目标。

 <Target Name="CopyTypeScriptsToOutput" AfterTargets="Build">
   <ItemGroup>
    <TypeScriptFiles Include="Scripts\*.ts" />
   </ItemGroup>

   <Copy SourceFiles="@(TypeScriptFiles)" DestinationFolder="$(OutputPath)\Scripts" />
</Target>

希望对您有所帮助。

在我的 package.json 中,我将使用 cpx 复制 dist 文件夹中的文件

  "scripts": {
    "copy-media": "$(npm bin)/cpx media/**/*.* dist/media",
    "build": "tsc && yarn copy-media",
  },

因此它首先构建 tsc,然后将文件夹 media 中的所有文件复制到 dist