Je souhaite remplacer une chaîne telle que "how r u" dans le fichier test.xml par une chaîne "je vais bien" dans un autre fichier xy.xml.using expression régulière dans ms build.
c'est-à-dire que je dois lire la chaîne d'un fichier (xy.xml) et la remplacer dans un autre fichier test.xml. alors s'il vous plaît fournir les étapes nécessaires pour résoudre ce problème avec l'exemple
EDIT: Cette réponse est obsolète. Utilisez la solution ci-dessous ...
Utilisez la tâche ReadLinesFromFile pour obtenir la chaîne de remplacement à partir du fichier xy.xml. Vérifie ça
Ensuite, utilisez la valeur de xy.xml en tant que chaîne de remplacement pour la tâche FileUpdate. Vérifie ça
Et mettez le tout ensemble;)
Ce n'est plus nécessaire ... vous pouvez maintenant injecter C # dans le fichier projet/construction ...
Définissez une tâche personnalisée et des paramètres 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 n'importe quelle 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 "File.exe.config" situé dans le répertoire de sortie.
Vous pouvez utiliser la tâche FileUpdate à partir des tâches de la communauté MSBuild, comme expliqué dans l'article http://geekswithblogs.net/mnf/archive/2009/07/03/msbuild-task-to-replace-content- in-text-files.aspx
J'ai exécuté les deux remplacements sur le même fichier qui se trouve sur un lecteur Unix et ai utilisé le chemin unc qui lui est destiné\serveur\chemin ...:
<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 le nom d'origine; Cependant, FileUpdate a:
%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 commandes avec des commandes de sous-titrage Perl pour les builds Unix.