Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/22.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
.net 如何使用NAnt更改文件中的一行?_.net_Nant - Fatal编程技术网

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

.net 如何使用NAnt更改文件中的一行?,.net,nant,.net,Nant,我需要使用NAnt更新.js文件中的一行。 该行将类似于: global.ServerPath = 'http://server-path/'; <token key="WebConfig.EnvironmentName" value="${env_webconfig_EnvironmentName}" /> <token key="WebConfig.SMTPServerName" value="${env_webconfig

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

global.ServerPath = 'http://server-path/';
            <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>
我需要一种方法将该行的“服务器路径”部分更新为目标服务器的路径。
ReplaceString不行,因为我更新文件时不知道文件中的路径是什么

            <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>
有什么帮助吗

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

如果
string::replace
不起作用,请提前感谢
可以完成此工作。就是这样:

<?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>
            <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>

还可以与filterchain和一起使用

            <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>
下面是一个例子:

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

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

            <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”文件扩展名时,我使用的复制任务将替换这些值。然后我做了以后需要做的事\

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

我承认,以您必须的方式使用属性有点麻烦,但您有灵活性,可以按环境加载不同的属性值集(例如本地、暂存、生产等),但这比我想的要多一些。

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

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

在我的例子中,.*只捕获一行,而[\w\s\w]*对整个文件有效

您是否考虑过将服务器路径“硬”编码到js文件中是否是最佳解决方案(无论它解决了什么问题)?在客户端javascript中从整个URL获取值,或者从服务器端页面(基于实际的主机头)发出一小段内联js可能是一些替代方法。是的,不幸的是这是必要的。我们将应用程序作为插件托管在第三方应用程序中,第三方系统需要JS中的这一行来找到我们。如果
string::replace
不起作用
可以完成这项工作。我需要解决这个问题。请继续关注……我和艾德娜有同样的问题。使用
(?'BEFORE'[\w\s\w]*)
而不是
(?'BEFORE'.*)
(与后匹配组类似)对我有效。我想知道这是否是一个编码的东西。
            <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>