Saya memiliki proyek lama yang menggunakan ASP.NET MVC/WebAPI, berjalan di .NET Framework, dan dipublikasikan ke Layanan Cloud Azure. Saya mencoba bermigrasi ke React dan ingin menghindari penambahan build webpack sebagai file di .csproj. Saya telah berhasil mendapatkan langkah-langkah pembangunan yang menjalankan npm run build untuk menghasilkan output, tetapi file yang dibangun tidak ditambahkan ke paket yang diterbitkan ketika saya mencoba untuk menerbitkan.

Dalam aplikasi .NET 5 saat Anda menggunakan template React/SPA, file .csproj memiliki sesuatu seperti berikut:

    <Target Name="PublishRunWebpack" AfterTargets="ComputeFilesToPublish">
        <!-- As part of publishing, ensure the JS resources are freshly built in production mode -->
        <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
        <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build" />

        <!-- Include the newly-built files in the publish output -->
        <ItemGroup>
            <DistFiles Include="$(SpaRoot)build\**" />
            <ResolvedFileToPublish Include="@(DistFiles->'%(FullPath)')" Exclude="@(ResolvedFileToPublish)">
                <RelativePath>%(DistFiles.Identity)</RelativePath>
                <CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
                <ExcludeFromSingleFile>true</ExcludeFromSingleFile>
            </ResolvedFileToPublish>
        </ItemGroup>
    </Target>

Saya rasa saya mengerti apa yang dilakukannya, tetapi saya mengalami masalah dengan analog yang bekerja dengan .NET Framework. Ketika saya menjalankannya seperti ini, perintahnya bahkan tidak berjalan. Saya menduga target ComputeFilesToPublish tidak dipanggil pada proyek gaya lama ini. Saya telah mencoba menjalankannya menggunakan BeforeTargets dan AfterTargets dari Build dan Publish, dan ketika saya melakukannya, saya dapat melihat dari log bahwa npm install dan npm run build dipanggil, tetapi file tidak disalin ke direktori publish (dalam hal ini csx).

Apa yang dapat saya lakukan di .csproj agar file build saya ditarik ke dalam paket publish?

0
Mike 7 Mei 2021, 23:52

1 menjawab

Jawaban Terbaik

Masalahnya adalah bahwa target build untuk .NET 5 Azure Web App berbeda dari .NET Framework Azure Cloud Service. Inilah saus rahasia yang saya butuhkan:

  <Target Name="BuildRunWebpack" BeforeTargets="BeforeBuild">
    <Message Importance="normal" Text="Running npm install as a Pre-build step" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm install" />
    <Message Importance="normal" Text="Running npm run build (compile webpack) as a Pre-Build step" />
    <Exec WorkingDirectory="$(SpaRoot)" Command="npm run build" />
  </Target>
  <Target Name="PublishRunWebpack" BeforeTargets="CollectFilesFromContent">
    <!--On publish, this will pull any files in the ClientApp\dist folder that were built by webpack. These files need to be in the published package.-->
    <Message Importance="normal" Text="Collecting webpack bundle for publish" />
    <ItemGroup>
      <Content Include="$(SpaRoot)dist\**" />
    </ItemGroup>
  </Target>
0
Mike 12 Mei 2021, 20:21