2012-01-25 72 views
2

我有兩個Visual Studio數據庫項目。MsBuild pass項目之間的PropertyGroup

Project A 
Project B 
- References: Project A 

項目A爲indipendent數據庫項目,而項目B具有A. 參考當我建項目BI具有的MSBuild預期輸出如下:

------ Build started: Project: Project A, Configuration: Debug Any CPU 
--------- Build started: Project: Project B, Configuration: Debug Any CPU ------ 
========== Build: 2 succeeded or up-to-date, 0 failed, 0 skipped ========== 

項目B我有一個屬性定義如下:

<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> 
    <MyProperty>MyValue</MyProperty> 
    </PropertyGroup> 

現在,在這兩個項目中,我創建了一個簡單的任務th在之前我生成項目並打印變量的值執行: 項目A,B:

<Target Name="Print" BeforeTargets="Build"> 
    <Message Text="MyProperty is: $(MyProperty)" Importance="high" /> 
    </Target> 

不幸的是我得到的MSBuild這種行爲:

------ Build started: Project: Project A, Configuration: Debug Any CPU 
MyProperty is: 
--------- Build started: Project: Project B, Configuration: Debug Any CPU ------ 
MyProperty is: MyValue 
========== Build: 2 succeeded or up-to-date, 0 failed, 0 skipped ========== 

我有一個參考項目B中的項目A使用此配置:

<ItemGroup> 
    <ProjectReference IncludeProjectA.dbproj"> 
     <Name>ProjectA</Name> 
     <Project>{f6546bef-cea7-4e7f-b6f1-cce1c06c7b1a}</Project> 
     <Private>True</Private> 
    </ProjectReference> 
    </ItemGroup> 

有什麼辦法可以將項目B中的MyProperty的值注入到項目A中?

回答

5

如何創建一個「目標」文件在兩個項目之間共享?因此,您將擁有類似"DatabaseProjects.Targets"的東西,它將具有基本的MSBuild頭標記,然後是您的屬性組。

在項目A和項目B

然後,後的配置定義,導入目標文件與進口的元件,如<Import Project="DatabaseProjects.Targets" />

這樣一來,酒店將不會在任何單個項目,但在一個共享的「目標導入」。

爲了增加可見性,您可以將目標文件作爲鏈接的「無」/「不要複製」文件添加到項目中。

+0

沒錯,這就是我所做的。我創建了一個自定義Target來構建多個項目,並在每個項目中使用標記傳遞我需要的變量。 – Raffaeu

+0

你可以分享你的跨項目重用的項目文件嗎? – gap

+0

其實沒什麼特別的,你只需要一個標準的MSBuild項目文件根元素 - '。然後你想要的任何屬性,比如'PropertyGroup'。 – Snixtor