visual usar studio que instalar español como msbuild msbuild-task msbuild-propertygroup msbuild-buildengine

usar - msbuild visual studio



¿Cómo reemplazar la cadena en el archivo usando msbuild? (4)

Quiero reemplazar una cadena como "how ru" en el archivo test.xml por una cadena "i fine" en otro archivo xy.xml.using expresión regular en ms build.

es decir, tengo que leer la cadena de un archivo (xy.xml) y reemplazarla en otro archivo test.xml. así que por favor proporcione los pasos necesarios para resolver este problema con el ejemplo


Corrí los dos reemplazos contra el mismo archivo que se encuentra en una unidad Unix y usé la ruta unc para / server / ruta ...:

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

y la acción personalizada cs anterior no agrega el bom; sin embargo, el FileUpdate hizo:

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

Gracias csharptest.net - Estaba haciendo ejecutables con comandos de subtitulado de Perl para compilaciones de Unix.


Esto ya no es necesario ... ahora puede insertar C # en el proyecto / archivo de compilación ...

Defina una tarea personalizada y los parámetros de la siguiente manera:

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

Entonces simplemente llámalo como cualquier otra tarea de MSBuild

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

El ejemplo anterior reemplaza "$ version $" con "1.0.0.2" en "File.exe.config" ubicado en el directorio de salida.



EDITAR: Esta respuesta es obsoleta. Use la solución a continuación ...

Use la tarea ReadLinesFromFile para obtener una cadena de reemplazo del archivo xy.xml. Mira esto

Luego use el valor de xy.xml como una cadena de reemplazo para la tarea FileUpdate. Mira esto

Y ponlo todo junto;)