2012-06-12 62 views
1

我想弄清楚如何使用MSBuild從一組配置文件創建一組dll。也就是說,我有一些配置文件讓msbuild從源文件名生成目標文件名

Policy.1.1.mylib.config 
Policy.1.2.mylib.config 
... 
Policy.1.x.mylib.config 

和一個MSBuild目標我想打電話與這些文件的列表中的AL(組件連接器)的任務,與OUTPUTFILE參數值(Policy.1.i.mylib.dll每個i = 1, ..., x )從相應的配置文件參數動態生成。 (所有其他參數都是我明確知道的,所以我可以直接輸入它們)。

我對MSBuild沒有多少經驗。我想出瞭如何在一個文件的後期構建目標中運行AL任務,以及如何獲取配置文件名列表到列表中,並確實認爲我能夠使用批處理循環該列表,但是,當從源文件名生成目標文件名時,m卡住了。

(注:這是的MSBuild 3.5,所以看似沒有字符串操作,因爲它似乎是在4.0還從網上安裝額外的庫是不是我的選擇。)

有什麼建議?也許這種方法不適合MSBuild,我只是沒有看到這樣做的正確方法。配置文件以編程方式生成,也許我應該除了創建一組要處理的文件之外,每個文件都包含al的輸入和輸出名稱,並且可以通過MSBuild讀取這些文件?

回答

1

你可以用ItemGroup對配置進行分組,這樣你就可以訪問metadata進行類似foreach的循環,並重新創建一個dll名稱。 <Task Input="%(Configs.FullName)" Output="%(Configs.RelativeDir)\%(Configs.Filename).dll" />

+0

謝謝,我可以訪問我的任務中的%(Config.Filename)。 '全名'不起作用,但是,我用「%(Configs.identity)」來代替,這是我偶然發現的一個表達。我搜索了很長時間這樣的事情,有沒有一個參考的地方哪些屬性(如「.Filename」)可用於這種listitem? – Thomas

+0

是的,答案中的元數據鏈接是一個衆所周知的項目元數據屬性列表。 –

+0

哎。謝謝。愚蠢的我。 – Thomas

2

如果你只是想創建彙編文件名的列表,由配料在配置文件名的項目組中創建它們:

<ItemGroup> 
    <ConfigFiles Include="Path\to\Policy.*.config" /> 
    <Assemblies Include="%(ConfigFiles.Filename).dll" /> 
</ItemGroup> 

Assemblies項目組將包含

Policy.1.1.mylib.dll 
Policy.1.2.mylib.dll 
... 
Policy.1.x.mylib.dll 
相關問題