如何使用NAnt更改文件中的一行?

时间:2011-07-26 11:37:22

标签: .net nant

我需要使用NAnt来更新.js文件中的一个特定行。 该行将类似于:

global.ServerPath = 'http://server-path/';

我需要一种方法来更新该行的“服务器路径”部分与目标服务器的部分 ReplaceString并不好,因为当我更新它时,我不知道文件中的路径是什么。

任何帮助?

提前致谢

3 个答案:

答案 0 :(得分:12)

如果string::replace不起作用<regex>可以完成这项工作。就是这样:

<?xml version="1.0" encoding="utf-8" ?>
<project name="replace.line" default="replace">
  <target name="replace" descripton="replaces a line">
    <property
      name="js.file"
      value="C:\foo.js" />
    <loadfile file="${js.file}" property="js.file.content" />
    <regex
      input="${js.file.content}"
      pattern="(?'BEFORE'.*)global\.ServerPath\s*=\s*'[^']*';(?'AFTER'.*)" />
    <echo
      file="${js.file}"
      message="${BEFORE}global.ServerPath = 'http://bla/';${AFTER}"
      append="false" />
  </target>
</project>

答案 1 :(得分:4)

不应该是[\ w \ s \ W] *而不是。*在AFTER和BEFORE之前能够捕获所有的行吗?

在我的情况下。*仅捕获行,而[\ w \ s \ W] *适用于整个文件

答案 2 :(得分:1)

还可以使用copy task以及过滤链和replacetokens filter

以下是一个例子:

                          

            <token key="WebConfig.EnvironmentName" value="${env_webconfig_EnvironmentName}" />
            <token key="WebConfig.SMTPServerName" value="${env_webconfig_SMTPServerName}" />
            <token key="WebConfig.DatabaseConnectionString" value="${env_drmportal_webconfig_DatabaseConnectionString}" />

        </replacetokens>
    </filterchain>
</copy>

我将所有模板文件保留在/ config /文件夹中(例如web.config.template),并且复制任务的使用在复制到同一个/ config /文件夹但没有“.template”文件时替换值延期。然后我做了之后需要的事情...... \

我承认 使用属性的方式有点麻烦,但你有灵活性,你可以按环境加载不同的属性值集(例如本地,分期,制作等)但这比我想你要的要多一点。