我想从我的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”不能 在这种情况下使用。项目列表不能与其他项目连接 预期项目列表的字符串。使用分号分隔 多个项目清单。
答案 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>