是否可以從MSBuild項目中獲取所有輸出文件的列表?從MSBuild項目中獲取輸出文件
在一個簡單的項目,我可以做類似
<CreateItem Include="$(OutputDir)**\*">
<Output ItemName="AllOutputs" TaskParameter="Include"/>
</CreateItem>
,但我的項目是一個大的構建的一部分,並且所有輸出到一個共同的位置,我希望能夠exculde DLL和內容那不屬於。
任何想法?
是否可以從MSBuild項目中獲取所有輸出文件的列表?從MSBuild項目中獲取輸出文件
在一個簡單的項目,我可以做類似
<CreateItem Include="$(OutputDir)**\*">
<Output ItemName="AllOutputs" TaskParameter="Include"/>
</CreateItem>
,但我的項目是一個大的構建的一部分,並且所有輸出到一個共同的位置,我希望能夠exculde DLL和內容那不屬於。
任何想法?
再次看到您的評論後,我意識到我誤解了您真正需要的東西。這是你手上有趣的問題。
如果你不介意編輯項目文件本身,你可能會得到漂亮的關閉到你想要的。有一個項目FileWrites跟蹤構建過程中寫出的所有文件。要開始使用此編輯玩弄項目文件中有這樣的AfterBuild目標
<Target Name="AfterBuild">
<Message Text="FileWrites: @(FileWrites)" Importance="high"/>
</Target>
有一些問題,這種方法也
你可能會認爲你可以做一個生成後與MSBuild: Find Many Project References技術和輸出解決第一個問題的FileWrites項目。這僅在包裝程序proj文件與原始項目本身位於同一文件夾中時纔有效,因爲.csproj文件內的所有項目都使用相對路徑聲明。所以大部分都是這樣。
您可以通過使用FindUnderPath任務來獲取放置在OutputPath文件夾中的文件。
你可以做什麼,但是不是真的可靠,要麼是在構建開始時檢查OutputPath,要麼在構建和結束時再一次查看添加的內容。比方說,你把原來的文件到一個項目的開始文件,並在構建結束把所有的文件放到一個名爲項EndFiles你可以在做:
<Target Name="SomeTargetHere">
<ItemGroup>
<FilesWritten Include="@(EndFiles)" />
<FilesWritten Remove="@(StartFiles)"/>
</ItemGroup>
<!-- Now FilesWritten contains the difference between EndFiles & StartFiles -->
</Target>
總之我不知道是否有一個很好的解決方案,不涉及任何自定義任務或自定義記錄儀:(
賽義德·易卜拉欣·哈希米
的My Book:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
如果您使用的是MSBuild task,那麼您可以獲取使用TargetOutputs輸出生成的文件。這是所以當YourProject.csproj是建立了創建將被放置在YourProjectOutputs項目裏面的文件該情況的一個例子
<MSBuild Projects="YourProject.csproj">
<Output ItemName="YourProjectOutputs" TaskParameter="TargetOutputs"/>
</MSBuild>
。
前段時間我創建了一個博客條目,詳細介紹了這個,MSBuild: How to Get All Generated Outputs。
賽義德·易卜拉欣·哈希米
的My Book:Inside the Microsoft Build Engine : Using MSBuild and Team Foundation Build
感謝您的建議,問題是TargetOutputs只包含輸出程序集,並且GetOutputs任務包括輸出目錄中的所有內容,即使msbuild項目未創建/複製它。 – 2009-06-30 14:36:23
看看我以前的博客條目MSBuild: Find Many Project References。在那篇文章中,我將描述如何創建一個可以提取Reference ItemGroup的值的MSBuild文件。在你的情況下,只需將我創建的目標替換爲從OutputPath中找到的所有文件填充項目的目標。讓我知道你是否希望我擴大這一點。
我們做什麼戰鬥是這種情景每個版本創建「部署」主任Ÿ(你可以稱它爲你想要的)。
部署目錄僅包含實際應用程序所需的可執行文件和dll(即,測試dll不會放在那裏)。每個項目都需要將其「可部署」的東西放到該目錄中(我們甚至添加子目錄(即Web,服務等)。)
它重複了一些位,但它可以讓你訪問所有的dll如果需要,建立。
我想有一個共同的「部署」目錄,但能夠確定哪些文件是由每個項目創建的 – 2009-07-07 13:19:37
感謝您的詳細解答。 – 2009-07-07 13:20:09