2012-01-17 27 views
1

我有一個自定義的MSBuild任務(擴展Microsoft.Build.Utilities.Task)。該任務具有string []類型的屬性。任務本身(姑且稱之爲「BobTask」)是在它的值設置爲遵循的MSBuild文件:如何使用命令行將值分配給自定義MSBuild任務的字符串[]屬性?

<BobTask MyStringArrayProperty="@(MyStringArrayProperty)" /> 

我的本意是,當用戶運行在命令行的MSBuild文件(使用MSBuild.exe ),他們可以設置像這樣的屬性:

msbuild.exe file.proj /p:MyStringArrayProperty="value1" 

msbuild.exe file.proj /p:MyStringArrayProperty="value1;value2" 

(是的,我知道在命令行樣品上面是不完整的 - 它只是表明我的意圖)

但是,當我嘗試這是真實的,我的自定義任務中的MyStringArrayProperty始終爲空。我發現其他MSBuild任務使用string []屬性,因此對於自定義任務而言,這似乎是一種有效的屬性類型。這導致我相信我在命令行中使用的字符串列表的語法不正確。因此,有沒有辦法使用命令行爲一個自定義MSBuild任務的字符串[]屬性賦值?是否有一些我需要使用的特殊語法?

感謝,

-Craig

回答

2

您提供的是命令行上的屬性的值,但提供的項目數組你的任務的內容;兩者具有相同的名稱,但是是不同的數據類型。

要將屬性轉換爲一個項目,這樣做:

<ItemGroup> 
    <MyStringArrayProperty Include="$(MyStringArrayProperty)" /> 
</ItemGroup> 
<BobTask MyStringArrayProperty="@(MyStringArrayProperty)" /> 

從書中摘錄「MSBuild Trickery」提示#30:「如何把屬性轉換成項目」

+0

我標記這是一個答案,因爲它讓我在正確的軌道上解決我的問題。我所需要做的就是在我的MSBuild文件中將@(MyStringArrayProperty)更改爲$(MyStringArrayProperty);額外的ItemGroup沒有必要。 – Craig 2012-01-17 18:41:02

+0

謝謝你的幫助。 – Craig 2012-01-17 18:41:47

+0

如果您希望將一個可枚舉數組傳遞給您的任務,只需將MyStringArrayProperty類型的數據類型設置爲「ITaskItem []」並傳入@(...)版本即可。如果將其保留爲「字符串」類型,則必須自己解析它,並且無法將元數據附加到數組元素。 – 2012-01-17 20:20:00

相關問題