在MSBuild中使用Zip任务

在MSBuild中使用Zip任务,msbuild,Msbuild,我一直试图在目前正在进行的项目中使用msbuild的zip任务 我的项目文件如下所示: <PropertyGroup> <MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath> </PropertyGroup> <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tas

我一直试图在目前正在进行的项目中使用msbuild的zip任务

我的项目文件如下所示:

<PropertyGroup> <MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath> </PropertyGroup> 

<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />

<ItemGroup>
<FileToZip include="C:\FilePath"></FilesToZip>
<FileToZip include="C:\FilePath"></FilesToZip>
</ItemGroup>

<Target Name="BeforeBuild">

<PropertyGroup>
<ReleasePath>\releasepath</ReleasePath>
<ItemGroup>
  <FileToZip include="C:\FilePath;C:\FilePath"/>
</ItemGroup>
$(SolutionDir)\.构建
\释放路径



但是,zip文件会更新,但不包含项目组FilesToZip中指定的文件。我不明白为什么他们没有被认出来!我仔细检查了文件路径,它们是正确的。有什么想法吗?

我想你应该这样做:

<PropertyGroup> <MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath> </PropertyGroup> 

<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />

<ItemGroup>
<FileToZip include="C:\FilePath"></FilesToZip>
<FileToZip include="C:\FilePath"></FilesToZip>
</ItemGroup>

<Target Name="BeforeBuild">

<PropertyGroup>
<ReleasePath>\releasepath</ReleasePath>
<ItemGroup>
  <FileToZip include="C:\FilePath;C:\FilePath"/>
</ItemGroup>

正如我在评论中提到的,简单地创建一个变量(
FileToZip
)并用不同的值重复它两次并不能得到包含这两个值的数组。最后只得到最后一个值(而不是数组)。您的
include
属性是一个用于构建数组的选择器,它可以包含多个值、通配符和用于构建该数组的其他模式


这里有一个指向MSDN的链接,它为您提供了有关如何使用
Include
属性的更多信息:

我最终放弃了ItemGroup,并采用了另一种方法

<Target Name="Zip"> 

<CreateItem Include="FilesToInclude" >          

<Output ItemName="ZipFiles" TaskParameter="Include"/> 


这种方法似乎更简单,并且没有将文件添加到文件的根目录中


谢谢你们的帮助

控制台中是否有zip任务生成的日志?尝试使用Message任务打印@(FilesToZip),以确保项目正确包含。我没有尝试将日志打印到控制台,但看起来我必须这样做才能调试正在发生的事情。感谢目标代码中有几个错误,首先是:
,这是打字错误吗?同样,两次声明同一个变量并不意味着得到一个同时包含两个值的数组,而是意味着得到最后一个声明的值。因此,在您的示例中(假设它基本正确),您将有一个
$(FileToZip)
生成
C:\FilePath
。抱歉,这是一个打字错误是的。C:\FilePath用于模拟文件路径—它不是真实的文件路径。真正的两个都不一样。一个指向项目根级别的脚本文件夹,另一个指向html页面。感谢您的帮助。我早上第一件事就是试试,然后告诉你它是否有效。再次感谢。事实上,原始声明(给出,拼写错误已更正)也很好。项目不会被覆盖,而是被追加。例如。这是vs在csproj文件中使用的内容: