如何在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"不能在此上下文中使用。项目列表不能与其他需要项列表的字符串。使用分号分隔多项目列表。
如果我理解正确,您需要读取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>