Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我可以使用msbuild更新非xml配置文件吗?_Msbuild_Configuration Files - Fatal编程技术网

我可以使用msbuild更新非xml配置文件吗?

我可以使用msbuild更新非xml配置文件吗?,msbuild,configuration-files,Msbuild,Configuration Files,我有一个配置文件,它有一个旧的样式格式(没有xml) 根据我发布的系统,我希望在发布后更新和更改值= 这在MSbuild中是可能的吗?你能告诉我怎么做吗 我知道如何使用xml配置文件的xml poke来实现这一点。没有什么比问一个问题来帮助您回答更重要的了 我要这样做 <Target Name="UpdateConfig"> <CreateProperty Value="..\config.cfg"> <Output TaskParamet

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

根据我发布的系统,我希望在发布后更新和更改值=

这在MSbuild中是可能的吗?你能告诉我怎么做吗


我知道如何使用xml配置文件的xml poke来实现这一点。

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

我要这样做

<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任务


然后在MSBuild脚本中引用它。

您可以设置模板系统并使用MSBuild扩展包中的detokenise。请参阅此处的文档:

这意味着您不必一直编写上述自定义目标

所以你应该:

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


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


您可以对其进行模板化,并使用msbuild扩展包中的detokenise。这意味着您不必一直编写上述自定义目标。看起来是一个很好的解决方案。。。回答一个问题,我就投你一票!我将使用Xml任务编写一些基本的Xml,然后使用xsl对其进行转换。这并不是一个比“写出一个文本文件”更好的主意,但在一个文本文件中一行一行地写……在2013年,我觉得不对。只是一个建议,而不是想打架:我在这篇文章中回答了一些基本的xml。xslt给了我荨麻疹:)不过谢谢你的想法!我越来越少地使用它,但对于像这样的小事情……我仍然擅长使用它。除了简单的事情,它很难回去维护。因此,我的规则是,如果我不能在一小时内重新理解它,那么xsl可能太复杂了。我喜欢这个想法的原因是,这将是一个学习如何创建自己的MSBuild任务的好方法。它很小,可以咬掉。我认为这可能是正确的做事方式,尽管我把它作为我的黑客方式,直到我需要重新审视这个问题
 <ItemGroup>
      <Transforms Include="$(ReleasePath)\Yourtemplates\**"/>
    </ItemGroup>


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