2014-07-24 75 views
0

我一直在嘗試在當前正在處理的項目中使用msbuild的zip任務。在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> 

<Zip Files="@(FilesToZip)" WorkingDirectory="$(ReleasePath)" ZipFileName="HTMLeditor.html" ZipLevel="9" /> 

</Target> 

然而,zip文件更新,但不包含該項目組FilesToZip中指定的文件。我無法弄清楚他們爲什麼不被認出!我有雙重檢查文件路徑,他們是正確的。有任何想法嗎?

+1

是否有通過zip任務在控制檯中生成的任何日誌?嘗試使用消息任務打印@(FilesToZip)以確保項目已正確包含 – Isantipov

+0

未嘗試將日誌打印到控制檯,但看起來像我將不得不爲了調試正在發生的事情。謝謝 – user3529183

+0

你的目標代碼有幾個錯誤,首先你有:'',是一個錯字?另外,對同一個變量進行兩次聲明並不意味着你得到了一個包含兩個值的數組,這意味着你得到了你聲明的最後一個值。所以在你的示例中(假設它大部分是正確的),你將有一個'$(FileToZip)'產生'C:\ FilePath'。 – CodingGorilla

回答

1

我想你想要做這樣的事情:

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

正如我在我的評論中提到,簡單地創建一個變量(FileToZip),並用不同的值不給你包含數組重複了兩遍這兩個值。你最終只有最後一個值(而不是數組)。您的include屬性是一個用於構建數組的選擇器,它可以包含多個值,通配符和用於爲您構建數組的其他模式。

下面是MSDN的鏈接,讓您對如何使用Include屬性的詳細信息:http://msdn.microsoft.com/en-us/library/ms171454.aspx

+0

感謝您的幫助。早上試試這個第一件事,並告訴你它是否工作。再次感謝。 – user3529183

+0

實際上,原始聲明(給定,錯字更正)也完全沒問題。項目不被覆蓋,但附加。蛋。這是vs在csproj文件中的用法:' <編譯包含=「BaseContext.cs」/> <編譯包含=「BaseMigration.cs」/>' – Isantipov

0

我拋棄了的ItemGroup到底,並與做的另一種方式去。

<Target Name="Zip"> 

<CreateItem Include="FilesToInclude" >   

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

<Zip ZipFileName="ZipFile.zip" WorkingDirectory="FolderToWriteZipTo" Files="@(ZipFiles)" /> 

</Target> 

這種方法似乎更容易,並沒有將文件添加到文件的根。

感謝您的幫助,雖然傢伙。