如何从CSPROJ条件中的appSettings.config中读取值

时间:2013-07-09 21:38:21

标签: c# .net visual-studio msbuild csproj

我想从我的appSettings.config文件中读取一个选项,以便在我的CSPROJ中创建一个条件部分。我知道如何在visual studio 2010 conditional references的帮助下进行条件引用,但我不确定如何从内部访问appSettings文件。

这是否可行,如果可行,请有人提供一些指导。

编辑关注@ palo的回答我现在有:

<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>

但是我收到一个错误说:

  

表达式“Accounts \ @(value)\ Controls \ MyControl.ascx.cs”不能   在这种情况下使用。项目列表不能与其他项目连接   预期项目列表的字符串。使用分号分隔   多个项目清单。

2 个答案:

答案 0 :(得分:2)

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

请记住您的评估顺序。 您无法覆盖全局属性/项目。但是使用msbuild 4.0,您可以覆盖BeforeTargets或AfterTargets

中的项目

答案 1 :(得分:1)

按照@ palo的回答,我想出了以下内容(我将此标记为答案,因为它详细说明了如何实现我想要的信息):

<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>