it-swarm-id.com

bagaimana cara mengganti string dalam file menggunakan msbuild?

Saya ingin mengganti string seperti "how r u" di file test.xml dengan string "i am fine" di file lain xy.xml. menggunakan ekspresi reguler dalam pembuatan ms.

yaitu saya harus membaca string dari satu file (xy.xml) dan menggantinya di file test.xml lain. jadi tolong berikan langkah-langkah yang diperlukan untuk menyelesaikan masalah ini dengan contoh

28
Nithin

EDIT: Jawaban ini sudah usang. Gunakan solusi di bawah ...

Gunakan tugas ReadLinesFromFile untuk mendapatkan string pengganti dari file xy.xml. Periksa ini

Kemudian gunakan nilai dari xy.xml sebagai string pengganti untuk tugas FileUpdate. Periksa ini

Dan kumpulkan semuanya;)

4
Ludwo

Ini tidak lagi diperlukan ... Anda sekarang dapat menyuntikkan C # ke file proyek/build ...

Tetapkan tugas dan parameter khusus sebagai berikut:

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

Maka cukup sebut saja seperti tugas MSBuild lainnya

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

Contoh di atas menggantikan "$ version $" dengan "1.0.0.2" di "File.exe.config" yang terletak di direktori output.

82
csharptest.net

Anda dapat menggunakan tugas FileUpdate dari MSBuild Community Tasks seperti dijelaskan dalam artikel http://geekswithblogs.net/mnf/archive/2009/07/03/msbuild-task-to-replace-content- di-text-files.aspx

3
Victor Ionescu

Saya menjalankan kedua penggantian terhadap file yang sama yang duduk di drive Unix dan menggunakan jalur unc untuk itu\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" />

dan tindakan kustom cs di atas tidak menambah bom; namun FileUpdate melakukannya:

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

Terima kasih csharptest.net - Saya sedang melakukan exec's dengan perintah subtitute Perl untuk unix builds.

0
Tom