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

问题描述 投票:1回答:2

我想从我的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”不能在此上下文中使用。项目列表不能与期望项目列表的其他字符串连接。使用分号分隔多个项目列表。

c# .net visual-studio msbuild csproj
2个回答
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
投票

按照@ 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>
© www.soinside.com 2019 - 2024. All rights reserved.