在下面的msbuild脚本中,第一次运行csproject时,按照以下顺序执行以下目标:
1) UnzipDLL 2) DeleteExtraneousDirs
如果我第二次运行csproject,则按照以下顺序执行以下目标:
1) UnzipDLL 2) CopyFiles 3) DeleteExtraneousDirs
我不确定为什么“CopyFiles”目标第一次没有运行。我还尝试通过添加“BeforeTargets”,“AfterTargets”和/或“DependsOnTargets”来指定目标顺序,但这并没有在UnzipDLL目标之后运行CopyFiles目标。
此外,如果我将DefaultTargets仅指定为“UnzipDLL”和“CopyFiles”,则第一次运行csproject时只会运行“UnzipDLL”任务,并且第二次运行csporjects时将同时运行“UnzipDLL”和“CopyFiles”任务。
以下是msbuild脚本。感谢您的帮助!
1) UnzipDLL 2) DeleteExtraneousDirs
如果我第二次运行csproject,则按照以下顺序执行以下目标:
1) UnzipDLL 2) CopyFiles 3) DeleteExtraneousDirs
我不确定为什么“CopyFiles”目标第一次没有运行。我还尝试通过添加“BeforeTargets”,“AfterTargets”和/或“DependsOnTargets”来指定目标顺序,但这并没有在UnzipDLL目标之后运行CopyFiles目标。
此外,如果我将DefaultTargets仅指定为“UnzipDLL”和“CopyFiles”,则第一次运行csproject时只会运行“UnzipDLL”任务,并且第二次运行csporjects时将同时运行“UnzipDLL”和“CopyFiles”任务。
以下是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目标确实会被执行。但是,Copy任务不会将文件从exe/dll/lib文件夹复制到exe/dll文件夹。我通过在Copy任务之前和之后添加Message任务来发现这一点。