2011-09-13 64 views
1

我試圖創建一個構建腳本,它允許我指定包含在特定網站中的「模塊項目」的路徑列表。MSBuild,包含基於一組路徑的文件

因此,我有這樣的佈局:

customer folder 
    |_MainProject 
    |_ModuleProject1 
    |_ModuleProject2 

所以,基本上我希望能夠指定將包含ModuleProject1和2的的ItemGroup,並從中複製相關的文件到MainProject。

<ItemGroup> 
    <CustomModule Include="ModuleProject1\*.csproj" /> 
    <CustomModule Include="ModuleProjec2\*.csproj" /> 
</ItemGroup> 

在我的主要構建腳本然後,我想找出駐留項目的OBJ \發佈的* .dll文件夾中的路徑,以我的衛星組件,以及所有的DLL。

我已經有項目文件(.csproj)的項目組,所以基本上我只是想添加更多的文件引用。但我無法弄清楚我會怎麼做。這是我今天有:

<Satellites Include="$(ReferencesFolder)\??\*.dll" /> 
<Satellites Include="$(SiteRoot)\bin\??\*.dll" /> 
<Satellites Include="%(CustomModule.RelativeDir)obj\$(Configuration)\??\*.dll" /> 

我怎麼會根據我有的事實做最後一行工作?

做這件事時:

<Message Text="%(CustomModule.RelativeDir)obj\$(Configuration)\??\*.dll" /> 

它輸出這樣的:

ModuleProject1\obj\Release\??\*.dll 
ModuleProject2\obj\Release\??\*.dll 

如果任何人有一些鏈接的MSBuild具有很好的例子基本面,我真的很感激它。我最終會在msdn上看到一些非常神祕的例子,這些例子並沒有真正解釋很多。

編輯:我修改了我的計劃,幾乎有它的工作,但包括並沒有真正的工作,因爲我期望它。沒有包含任何內容,但有文件路徑。

如果我手動添加此:

<Satellites Include="ModuleProject1\obj\Release\??\*.dll" /> 

它實際上是包含在「衛星」項目小組。

回答

1

我自己找到了一個解決方案,看起來像我需要一個解決方法讓它明確工作。

由於我沒有能夠基於另一個項目名單上包括的項目,這是我終於想出了:

<Target Name="BuildModules"> 
    <!-- We do this because we need a property with the correct wildcards, otherwise it won't work --> 
    <PropertyGroup> 
     <CustomModuleSatellites>@(CustomModule->'%(RelativeDir)obj\$(Configuration)\??\*.dll')</CustomModuleSatellites> 
    </PropertyGroup> 
    <ItemGroup> 
     <Satellites Include="$(CustomModuleSatellites)" /> 
    </ItemGroup> 
</Target> 

我需要一個目標內創建一個屬性(它外面沒因爲它仍然包含通配符),然後使用該屬性ti在我的項目列表中包含使用通配符的文件,否則它將是帶有通配符的路徑,然後複製命令也不起作用。

相關問題