Nant эквивалент задачи замены муравья - PullRequest
3 голосов
/ 07 мая 2010

Ищем эквивалент задачи Ant Replace в Nant

Ответы [ 3 ]

3 голосов
/ 07 мая 2010

Насколько я могу судить, функции фильтра в NAnt это именно то, что вы ищете. Поддерживаемые задачами <copy> и <move>, вы определяете выражения замены токенов, которые преобразуют содержимое файла во время операций копирования / перемещения файла.

0 голосов
/ 20 июня 2019

Вы можете написать собственное задание:

<target name="deftask-replregexp"
        description="define custum task like ants task replaceregexp">
  <script language="C#">
    <!-- NAnt 0.92 reference states that this is loaded by default. Do not 
         know why this is required. --> 
    <references>
      <include name="System.dll"/>
    </references>
    <imports> 
      <import namespace="System.Text.RegularExpressions" />
    </imports>
    <code>               
      <![CDATA[
        [TaskName("replaceregexp")]
        public class ReplaceRegExp : Task 
        {

          #region Public Instance Properties

          [TaskAttribute("file", Required=true)]
          public string InFile { get; set; }

          [TaskAttribute("match", Required=true)]
          public string Match { get; set; }

          [TaskAttribute("replace", Required=true)]
          public string Replace { get; set; }

          #endregion Public Instance Properties

          #region Override implementation of Task

          protected override void ExecuteTask() 
          {
            if ( !File.Exists(this.InFile) )
            {
              throw new BuildException("The file \"" + this.InFile 
                                       + "\" does " + "not exist.");              
            }
            doReplaceRegExp( this.InFile, this.Match, this.Replace);
          }
          private static void doReplaceRegExp(String inFile, 
                                              String pattern, 
                                              String replacement)
          {
            String outFile = Path.GetTempFileName();
            Regex regex = new Regex(pattern, RegexOptions.Compiled
                                             | RegexOptions.IgnoreCase);
            bool replaceDone = false;
            try
            {
              using (StreamReader input = new StreamReader(inFile, true))
              using (TextWriter output = new StreamWriter(
                                              new FileStream(outFile,
                                                             FileMode.Create),
                                              input.CurrentEncoding))
              {
                  String line;
                  do
                  {
                      line = input.ReadLine();
                      if (line != null)
                      {
                          System.Text.RegularExpressions.Match m 
                              = regex.Match(line);
                          if (m.Success)
                          {
                              replaceDone = true;
                              line = regex.Replace(line, replacement, 1);
                          }
                          output.WriteLine(line);
                      }
                  } while (line != null);
                  input.Close();
                  output.Close();
              }
              if (replaceDone)
              {
                  File.Copy(outFile, inFile, true);
              }
            }
            finally
            {
              if (outFile != null && File.Exists(outFile))
              {
                  File.Delete(outFile);
              }
            }
          }

          #endregion Override implementation of Task
        }
      ]]>
      </code>
    </script>
</target>
0 голосов
/ 07 мая 2010

В Nant нет прямого эквивалента.

Эта ссылка http://maonet.wordpress.com/2008/08/12/replace-file-content-in-nant-task/ имеет несколько вариантов.

...