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
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;)
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.
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
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.