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

本文关键字:appSettings config 读取 CSPROJ 条件 | 更新日期: 2023-09-27 18:21:39

我想从appSettings.config文件中读取一个选项,以便在CSPROJ中创建一个条件部分。我知道如何在visualstudio2010条件引用的帮助下进行条件引用,但我不知道如何从中访问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"不能在此上下文中使用。项目列表不能与其他需要项列表的字符串。使用分号分隔多项目列表。

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

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

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

根据@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>