在MSBuild 3.5中,是否可以顛倒ItemGroup中的順序元素?可能會顛倒ItemGroup元素的順序嗎?
例
我有2個項目。一個可以獨立建立,另一個依賴於第一個。每個項目在.targets文件中引用其特定項目。
project_A.targets
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<AssembliesToRemove Include="@(AssembliesToRemove)" />
<AssembliesToRemove Include="Assembly_A.dll">
<ApplicationName>App_A</ApplicationName>
</AssembliesToRemove>
</ItemGroup>
<ItemGroup>
<AssembliesToDeploy Include="@(AssembliesToDeploy)" />
<AssembliesToDeploy Include="Assembly_A.dll">
<AssemblyType>SomeType</AssemblyType>
<ApplicationName>App_A</ApplicationName>
</AssembliesToDeploy>
</ItemGroup>
</Project>
project_B.targets
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<AssembliesToRemove Include="@(AssembliesToRemove)" />
<AssembliesToRemove Include="Assembly_B.dll">
<ApplicationName>App_B</ApplicationName>
</AssembliesToRemove>
</ItemGroup>
<ItemGroup>
<AssembliesToDeploy Include="@(AssembliesToDeploy)" />
<AssembliesToDeploy Include="Assembly_B.dll">
<AssemblyType>SomeType</AssemblyType>
<ApplicationName>App_B</ApplicationName>
</AssembliesToDeploy>
</ItemGroup>
</Project>
project_A.proj
<Project DefaultTargets="Start" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="project_A.targets" />
<Import Project="Common.targets" />
</Project>
project_B.proj
<Project DefaultTargets="Start" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Import Project="project_A.targets" />
<Import Project="project_B.targets" />
<Import Project="Common.targets" />
</Project>
的問題
在這種情況下的任務處理@(AssembliesToDeploy)
過程中出現問題,因爲Assembly_B.dll需要Assembly_A.dll之前進行部署。
處理@(AssembliesToRemove)
工作正常,因爲這裏的程序集按照正確的順序(在Assembly_B.dll之前刪除Assembly_A.dll)。
我試圖做
我試圖通過修改project_B.targets這樣的影響的
@(AssembliesToDeploy)
順序:
<ItemGroup>
<AssembliesToDeploy Include="Assembly_B.dll">
<AssemblyType>SomeType</AssemblyType>
<ApplicationName>App_B</ApplicationName>
</AssembliesToDeploy>
<AssembliesToDeploy Include="@(AssembliesToDeploy)" />
</ItemGroup>
,但使用內project_B.proj project_B.targets時
@(AssembliesToDeploy)
內部的命令仍然保持Assembly_A.dll; Assembly_B.dll。
編輯
由於MadGnome指出,這不行,因爲我會在@(AssembliesToDeploy)
與副本最終是否有解決方案,這將允許重用我.targets即不復制所有ItemGroup元素都包含到所有.targets文件中?
如果我chnage導入的順序,我會在處理'@(AssembliesToDeploy)'時遇到同樣的問題。你是絕對正確的,我的嘗試會導致重複 - 導致Assembly_A.dll仍然部署在Assembly_B.dll之前。所以你的回答並沒有解決我的問題,但發現我的方法存在缺陷。 – Filburt 2010-06-14 12:32:22
當然,它是@(AssembliesToRemove)'如果我改變導入的順序... ctrl-c ctrl-v – Filburt 2010-06-14 12:43:28
感謝您的提示。爲了完整起見,我添加了最終的解決方案(?)作爲新的答案。 – Filburt 2010-06-17 11:26:50