【问题标题】:How can I read a value from appSettings.config in CSPROJ conditional如何从 CSPROJ 条件中的 appSettings.config 中读取值
【发布时间】:2013-07-07 16:18:41
【问题描述】:

我想从我的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


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您,这帮助我从 XML 文件中获取价值。您能否查看我的编辑并提供一些关于在条件中使用该值的指导?
    【解决方案2】:

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

    【讨论】:

    • 这对我不起作用,直到我添加了双斜杠:Query="//appSettings/..."
    猜你喜欢
    • 2011-10-10
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2018-09-06
    • 2020-11-26
    • 1970-01-01
    相关资源
    最近更新 更多