【问题标题】:Can I update non-xml config files using msbuild?我可以使用 msbuild 更新非 xml 配置文件吗?
【发布时间】:2014-06-01 20:11:37
【问题描述】:

我有一个旧样式格式的配置文件(无 xml)

dbpath=C:\Program Files\Mongodb\Data\Db
journal=true
smallfiles=true

根据我发布的系统,我也想更新和更改 = 之后的值

这对 MSbuild 可行吗?你能告诉我怎么做吗?

我知道如何对 xml 配置文件使用 xml poke。

【问题讨论】:

  • 我会使用 Xml Task 写一些基本的 xml,然后使用 xsl 对其进行转换。与“写出文本文件”的想法相比,这不是一个更好的主意,但是在文本文件中逐行写入.....在 2013 年对我来说感觉不对。只是一个建议,而不是寻找战斗:O
  • 在这篇文章中查看我的答案(不是我的问题),以编写一些基本的 xml。 stackoverflow.com/questions/13867117/…
  • xslt 给我带来了荨麻疹 :) 谢谢你的想法!
  • 我越来越少用它了,但是对于这样的小事……我还是很擅长的。除了简单的事情,它很难回去维护。所以我的规则是,如果我不能在一个小时内重新计算出来,那么 xsl 可能太复杂了。

标签: msbuild configuration-files


【解决方案1】:

您可以设置模板系统并使用 msbuild 扩展包中的 detokenise。在此处查看文档:http://www.msbuildextensionpack.com/help/4.0.6.0/Index.html

这意味着您不必一直像上面那样编写自定义目标

所以你有:

 <ItemGroup>
      <Transforms Include="$(ReleasePath)\Yourtemplates\**"/>
    </ItemGroup>


    <MSBuild.ExtensionPack.FileSystem.Detokenise
      TaskAction="Detokenise"
      TargetFiles="%(Transforms.FullPath)"/>

【讨论】:

  • 我认为这可能是正确的做事方式,但在我需要重新审视问题之前,我将其保留为我的老生常谈方式
【解决方案2】:

没有什么比问一个问题来帮助你回答更重要了!

我会这样做

<Target Name="UpdateConfig">
    <CreateProperty Value="..\config.cfg">
         <Output TaskParameter="Value" PropertyName="path" />
    </CreateProperty>

    <Message Text="LogFilePath=$(LogFilePath)"/>

    <FileUpdate Files="$(path)"
        Regex="logpath=.*"
        ReplacementText="logpath=$(LogFilePath)" />
</Target>

这不是我所说的优雅,但我对 msbuild 没有太多了解!

有更好的建议吗?

【讨论】:

  • 您可以对其进行模板化并使用 msbuild 扩展包中的 detokenise。这意味着您不必一直像上面那样编写自定义目标。
  • 看起来是个不错的解决方案...做出回答,我会支持你!
【解决方案3】:

编写您自己的 MSBuild 任务,

http://msdn.microsoft.com/en-us/library/t9883dzc(v=VS.90).aspx

然后在您的 MSBuild 脚本中引用它。

【讨论】:

  • 我喜欢这个想法的原因是它是学习如何创建自己的 MSBuild 任务的好方法。它小到可以咬掉。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 2018-09-27
  • 1970-01-01
相关资源
最近更新 更多