gpt4 book ai didi

c# - 在 msbuild 中使用复制任务和解压缩任务

转载 作者:行者123 更新时间:2023-11-30 23:07:49 24 4
gpt4 key购买 nike

在下面的 msbuild 脚本中,我第一次运行 csproject 时,以下目标按顺序执行:

1) 解压DLL
2) 删除无关目录

如果我第二次运行 csproject,将按顺序执行以下目标:

1) 解压DLL
2) 复制文件
3) 删除无关目录

我不确定为什么“CopyFiles”目标没有第一次运行。我还尝试通过添加“BeforeTargets”、“AfterTargets”和/或“DependsOnTargets”来指定目标订单,但这并没有在 UnzipDLL 目标之后运行 CopyFiles 目标。

此外,如果我将 DefaultTargets 指定为仅“UnzipDLL”和“CopyFiles”,则只有“UnzipDLL”任务在我第一次运行 csproject 项目时运行,而任务“UnzipDLL”和“CopyFiles”在第二次运行时运行csporjects 被执行。

下面是 msbuild 脚本。谢谢您的帮助!

<Project ToolsVersion="14.0" DefaultTargets="UnzipDLL;CopyFiles;DeleteExtraneousDirs" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
<PropertyGroup>
<ReleasePath>..\..\..\..\..\TDS</ReleasePath>
<RelDirectory>$(ReleasePath)\exe\dll\_rels</RelDirectory>
<LibDirectory>$(ReleasePath)\exe\dll\lib</LibDirectory>
</PropertyGroup>
<ItemGroup>
<LibFiles Include="$(ReleasePath)\exe\dll\lib\**\*.*;$(ReleasePath)\exe\dll\lib\*.*" />
</ItemGroup>
<Target Name="UnzipDLL">
<Unzip ZipFileName="$(ReleasePath)\exe\utils\TDS.Packages.1.0.0.nupkg"
TargetDirectory="$(ReleasePath)\exe\dll\" />
</Target>
<Target Name="CopyFiles">
<Copy SourceFiles="@(LibFiles)" DestinationFolder="$(ReleasePath)\exe\dll\%(RecursiveDir)" />
</Target>
<Target Name="DeleteExtraneousDirs">
<Delete Files="@(LibFiles)" />
<RemoveDir Directories="$(RelDirectory);$(LibDirectory)" />
</Target>
</Project>

更新
对于 SergeyL 的观点,CopyFiles 目标确实得到了执行。但复制任务不会将文件从 exe\dll\lib 文件夹复制到 exe\dll\文件夹。我通过在复制任务前后添加消息任务发现了这一点。

最佳答案

I'm not sure why the "CopyFiles" target doesn't run the first time... but that didn't run the CopyFiles target after the UnzipDLL target.

问题是 ItemGroup。需要写在Copy目标里面。

msbuild 脚本应该是:

  <Target Name="CopyFiles">
<ItemGroup>
<LibFiles Include="$(ReleasePath)\exe\dll\lib\**\*.*;$(ReleasePath)\exe\dll\lib\*.*" />
</ItemGroup>
<Copy SourceFiles="@(LibFiles)" DestinationFolder="$(ReleasePath)\exe\dll\%(RecursiveDir)" />
</Target>

当我们使用ItemGroup 处理目标之外的批处理文件时,MSBuild 将预处理这些文件。当我们执行我们的 MSBuild 脚本时,目标 unzipCopy 将在很短的时间内完成,然而,实际完成解压缩将需要几秒钟延迟。所以实际上执行了 CopyFiles 目标。但是复制任务不会复制文件(因为解压缩尚未完成)。这就是复制任务第一次不执行,第二次执行的原因。

因此,要解决这个问题,只需要在复制目标中写入ItemGroup

关于c# - 在 msbuild 中使用复制任务和解压缩任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46940942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com