Memperbaiki Kegagalan Build sgen.exe di Visual Studio

Jika Anda mengalami masalah dengan sgen.exe yang gagal selama proses build di Visual Studio, Anda tidak sendirian. Banyak pengembang menghadapi kesalahan ini, terutama setelah memodifikasi direktori output proyek mereka. Panduan ini akan membantu Anda memahami masalah ini dan memberikan solusi untuk memperbaikinya secara efektif.

Memahami Masalah

Mengubah direktori output proyek Visual Studio Anda dapat menyebabkan sgen.exe gagal dengan kesalahan berikut:

Error: The specified module could not be found. (Exception from HRESULT: 0x8007007E)
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft.Common.targets(1902,9): error MSB6006: "sgen.exe" exited with code 1.

Kesalahan ini biasanya terjadi karena jalur yang diteruskan ke sgen.exe dalam konfigurasi build Anda tetap tidak berubah setelah perubahan direktori output.

Gejala Masalah

  • Proses build gagal, memunculkan kesalahan terkait sgen.exe.
  • Bahkan setelah mengubah pengaturan konfigurasi, kesalahan tetap ada.
  • Solusi sementara mungkin menonaktifkan fitur penting seperti pembuatan serialisasi.

Solusi untuk Masalah

Pendekatan 1: Konfigurasi Manual sgen.exe

Salah satu metode yang efektif untuk mengatasi masalah ini adalah dengan menyesuaikan parameter untuk sgen.exe secara manual di dalam file proyek Anda.

Langkah untuk Menyesuaikan Opsi sgen.exe:

  1. Buka File Proyek Anda
    Gunakan editor teks pilihan Anda untuk membuka file .csproj atau .vbproj.

  2. Modifikasi Definisi Target
    Anda dapat menambahkan target yang memberi tahu sgen.exe untuk secara eksplisit menentukan opsi pembuatan serializer. Misalnya:

    <Target Name="GenerateSerializationAssembliesForAllTypes"
      DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource"
      Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)"
      Outputs="$(OutputPath)$(_SGenDllName)">
        <SGen BuildAssemblyName="$(TargetFileName)"
          BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)"
          ShouldGenerateSerializer="true" UseProxyTypes="true"
          KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)"
          DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
            <Output TaskParameter="SerializationAssembly"
              ItemName="SerializationAssembly" />
        </SGen>
    </Target>
    
  3. Kunci Perubahan
    Pastikan Anda mengatur atribut UseProxyTypes menjadi true, yang memungkinkan Anda mengontrol cara tipe diserialisasi.

  4. Bangun Kembali Proyek Anda
    Setelah perubahan disimpan, bangun kembali proyek Anda di Visual Studio untuk menerapkan konfigurasi baru.

Pendekatan 2: Dokumentasi Referensi

Untuk pemahaman yang lebih baik dan kustomisasi lebih lanjut, pertimbangkan untuk merujuk ke dokumentasi resmi MSDN untuk sgen.exe, di mana Anda dapat menemukan opsi dan parameter yang tersedia untuk alat tersebut.

Sumber lain dapat ditemukan di posting blog ini yang membahas nuansa sgen dan tips untuk mengelola serialisasi secara efektif.

Rekomendasi Tambahan

  • Hapus .XmlSerializers.dll Sebelumnya
    Jika Anda terus menghadapi masalah, pertimbangkan untuk menghapus file .XmlSerializers.dll di direktori output untuk memastikan kondisi bersih.

  • Periksa Kembali untuk Memastikan Referensi yang Tepat
    Pastikan semua jalur ke assembly tergantung masih valid setelah mengubah lokasi output.

Kesimpulan

Menghadapi kegagalan sgen.exe bisa sangat frustrasi, terutama di tengah jadwal pengembangan yang ketat. Dengan menyesuaikan file proyek Anda dan mengelola konfigurasi dengan hati-hati, Anda dapat menyelesaikan masalah ini secara efisien. Ingat untuk menjaga cadangan file proyek asli Anda sebelum melakukan perubahan besar.

Dengan strategi ini, Anda seharusnya siap untuk mengatasi dan mencegah kesalahan build di masa depan yang terkait dengan sgen.exe di Visual Studio!