comment remplacer la chaîne dans le fichier en utilisant msbuild?

Je veux remplacer une chaîne telle que "how r u" dans le test de fichier.xml avec une chaîne "je vais bien" dans un autre fichier xy.XML.utilisation de l'expression régulière dans MS build.

Ie je dois lire la chaîne d'un fichier (xy.xml) et le remplacer dans un autre test de fichier.XML. veuillez donc fournir les étapes nécessaires pour résoudre ce problème avec example

28
demandé sur Nithin 2011-10-20 18:40:20

4 réponses

EDIT: cette réponse est obsolète. L'utilisation de la solution ci-dessous...

Utilisez la tâche ReadLinesFromFile pour obtenir une chaîne de remplacement du xy.fichier xml. Cochez cette case

Ensuite, utilisez la valeur de xy.xml comme chaîne de remplacement pour la tâche FileUpdate. Cochez cette case

Et tout mettre ensemble;)

4
répondu Ludwo 2017-05-29 06:53:18

Ce n'est plus nécessaire... vous pouvez maintenant injecter C# dans le fichier projet / build...

Définissez une tâche et des paramètres personnalisés comme suit:

<UsingTask TaskName="ReplaceFileText" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
  <ParameterGroup>
    <InputFilename ParameterType="System.String" Required="true" />
    <OutputFilename ParameterType="System.String" Required="true" />
    <MatchExpression ParameterType="System.String" Required="true" />
    <ReplacementText ParameterType="System.String" Required="true" />
  </ParameterGroup>
  <Task>
    <Reference Include="System.Core" />
    <Using Namespace="System" />
    <Using Namespace="System.IO" />
    <Using Namespace="System.Text.RegularExpressions" />
    <Code Type="Fragment" Language="cs">
      <![CDATA[
            File.WriteAllText(
                OutputFilename,
                Regex.Replace(File.ReadAllText(InputFilename), MatchExpression, ReplacementText)
                );
          ]]>
    </Code>
  </Task>
</UsingTask>

Ensuite, appelez-le simplement comme toute autre tâche MSBuild

<Target Name="AfterBuild">
  <ReplaceFileText 
    InputFilename="$(OutputPath)File.exe.config" 
    OutputFilename="$(OutputPath)File.exe.config" 
    MatchExpression="\$version\$" 
    ReplacementText="1.0.0.2" />
</Target>

L'exemple ci-dessus remplace "$version$" par "1.0.0.2" dans le Fichier".EXE.config" situé dans le répertoire de sortie.

77
répondu csharptest.net 2014-03-22 00:01:14

Vous pouvez utiliser la Task FileUpdate de MSBuild Community Tasks comme expliqué dans l'article http://geekswithblogs.net/mnf/archive/2009/07/03/msbuild-task-to-replace-content-in-text-files.aspx

3
répondu Victor Ionescu 2014-10-02 08:20:12

J'ai couru les deux remplacements contre le même fichier qui se trouve sur un lecteur Unix et utilisé le chemin unc vers it \ server \ path...:

<ReplaceFileText
  InputFilename="$(fileToUpdate)"
  OutputFilename="$(fileToUpdate)"
  MatchExpression="15.0.0"
  ReplacementText="15.3.1"/>


<FileUpdate Files="$(fileToUpdate2)"
            Regex="15.0.0"
            ReplacementText="15.3.1" />

Et l'action personnalisée cs ci-dessus n'ajoute pas la nomenclature; cependant, le FileUpdate a fait:

%head -2 branding.h branding2.h
==> branding.h <==
#/* branding.h
#** This file captures common branding strings in a format usable by both sed and C-preprocessor.

==> branding2.h <==
#/* branding.h
#** This file captures common branding strings in a format usable by both sed and C-preprocessor.

Merci csharptest.net - je faisais des exec avec des commandes perl subtitute pour les builds unix.

0
répondu Tom 2015-03-20 16:34:10