2013-07-09 13 views
1

我想從我的appSettings.config文件中讀取選項以在CSPROJ中創建條件部分。我知道如何在visual studio 2010 conditional references的幫助下完成條件引用,但我不確定如何從內部訪問appSettings文件。如何從CSPROJ中的appSettings.config中讀取值條件

這是可能的,如果是這樣,有人可以提供一些指導請。

編輯繼@帕洛的答案,我現在有:

<Target Name="BeforeBuild"> 
     <XmlPeek XmlInputPath="SiteSettings.config" Query="appSettings/add[@key='cProjectNumber']/@value"> 
      <Output TaskParameter="Result" ItemName="value" /> 
     </XmlPeek> 
     <Message Text="TESTING: @(value)" Importance="high" /> 
    </Target> 

這種運作良好,並打印出即Testing: 012項目編號。現在,我如何在一些編譯包含中使用它?我曾嘗試:

<ItemGroup> 
    <Compile Include="Accounts\@(value)\Controls\MyControl.ascx.cs"> 
     <SubType>ASPXCodeBehind</SubType> 
    </Compile> 
</ItemGroup> 

,但我得到一個錯誤說:

表達 「帳戶\ @(值)\控件\ MyControl.ascx.cs」 不能 在這種情況下使用。項目列表不能與其他需要項目列表的 字符串連接。用分號分隔 多個項目列表。

回答

1

繼@帕洛的答案覆蓋的項目,我想出了以下的(因爲它詳細介紹如何實現我想要的信息,我將標誌着這爲答案):

<Target Name="BeforeBuild"> 
    <XmlPeek XmlInputPath="SiteSettings.config" Query="appSettings/add[@key='cProjectNumber']/@value"> 
     <Output TaskParameter="Result" ItemName="value" /> 
    </XmlPeek> 
    <Message Text="TESTING: @(value)" Importance="high" /> 
    <PropertyGroup> 
     <ProjectNumber>@(value)</ProjectNumber> 
    </PropertyGroup> 
    <ItemGroup> 
     <Compile Include="Accounts\$(ProjectNumber)\Controls\MyControl.ascx.cs"> 
      <SubType>ASPXCodeBehind</SubType> 
     </Compile> 
    </ItemGroup> 
</Target> 

隨着XML結構,如:

<appSettings> 
    <add key="cProjectNumber" value="123" /> 
</appSettings> 
+0

直到我添加雙正斜槓時,這並不適用於我:Query =「// appSettings/...」 –

1

如果我理解正確,您需要讀取appconfig(xml文件)的元素值,然後在您的csproj文件中使用它的值。 嘗試使用XmlPeek - http://msdn.microsoft.com/en-us/library/ff598684.aspx; How to use XmlPeek task?

請記住您的評估順序。 您無法覆蓋全局屬性/項目。但隨着MSBuild的4.0,你可以BeforeTargets內或AfterTargets

+0

謝謝你提供的,幫助我走出XML文件中的值。你能否看到我的編輯並提供一些有關在有條件的情況下使用該值的指導? – webnoob