在MSBuild任务中读取配置值

3

有没有一种方法在MSBuild任务中读取System.Config连接字符串?

基本上,我在配置文件中设置了我的连接字符串。

<add name="MyApp.MyConnectionString" connectionString="..." />

我希望你能在MSBuild任务中引用它,就像这样...
<Target Name="Migrate" DependsOnTargets="Build">
    ...
    <Migrate Connectionstring="$(MyApp.MyConnectionString)" ... />
</Target>
1个回答

3

MSBuild社区任务项目中有一个XMLRead任务,它使用xpath来提取值。

<XmlRead 
  XPath="/add/@connectionString"
  XmlFileName="app.config">
    <Output TaskParameter="Value" PropertyName="MyConnectionString" />
</XmlRead>
<Message Text="MyConnectionString: $(MyConnectionString)"/>

(注意:完全未经测试)


这样不好,因为它要求我知道我的配置文件是什么。我想读取设置本身,以便它可以完全不可知。用户可以在本地配置文件或machine.config中设置其连接字符串。但是,我对MSBuild还相当陌生。这是否意味着我可以从任务内部填充属性?所以我可以编写一个使用System.Configuration来获取配置值并将其放入msbuild属性的任务吗? - Jim Mitchener
不太确定您的意思 - 为什么不知道文件的名称?您可以使用ItemGroup搜索文件,然后指定XmlFileName属性,它将在找到的任何文件上运行(我认为在这种情况下可能有一种不同的方式来指定propertyName,以便它进入组而不是单个属性值)。但是,是的,您可以填充属性,然后在构建文件中的其他地方使用它。 - gregmac
1
我不知道文件名的名称,因为System.Configuration会正确处理配置。用户可以在Machine.config、app.config、app.config包含的某些文件中设置值,这并不重要。我知道的只有属性的名称。 - Jim Mitchener
抱歉,我没有意识到你在谈论一个实时环境。只要你能够在 msbuild 中以某种方式执行,在该上下文中,你应该能够使用 System.Configuration 并读取该值。例如,你可以将一个小应用程序作为程序的一部分,msbuild 可以执行它,输出配置值(或将其写入临时文件)。对我来说,在构建环境中需要这样做似乎有点奇怪,但我猜你需要这个来运行测试之类的东西(我个人可能会使用一个被检入 SCM 的测试配置文件)。 - gregmac
是的,我想我最后会用C#编写自己的简单任务,从System.Configuration中提取一个值,并将其填充到另一个任务中要使用的属性中。 - Jim Mitchener

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接