Tidak dapat memuat file atau perakitan System.Web.Http.WebHost setelah dipublikasikan ke situs web Azure

141

Saya membuat proyek web dan berjalan dengan baik di Visual studio. Namun, saya mendapatkan kesalahan berikut setelah menerbitkannya ke situs azureweb. Apa yang bisa menyebabkan masalah?

Tidak dapat memuat file atau rakitan 'System.Web.Http.WebHost, Versi = 5.0.0.0, Culture = netral, PublicKeyToken = 31bf3856ad364e35' atau salah satu dari dependensinya. Definisi manifes rakitan yang ditemukan tidak cocok dengan rujukan rakitan. (Pengecualian dari HRESULT: 0x80131040)

Deskripsi: Pengecualian yang tidak ditangani terjadi selama eksekusi permintaan web saat ini. Harap tinjau jejak tumpukan untuk informasi lebih lanjut tentang kesalahan dan dari mana asalnya dalam kode.

Rincian Pengecualian: System.IO.FileLoadException: Tidak dapat memuat file atau perakitan 'System.Web.Http.WebHost, Versi = 5.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35' atau salah satu dari ketergantungannya. Definisi manifes rakitan yang ditemukan tidak cocok dengan rujukan rakitan. (Pengecualian dari HRESULT: 0x80131040)

Kesalahan Sumber:

Pengecualian yang tidak tertangani dihasilkan selama eksekusi permintaan web saat ini. Informasi mengenai asal dan lokasi pengecualian dapat diidentifikasi menggunakan jejak tumpukan pengecualian di bawah ini.

Jejak Beban Perakitan: Informasi berikut ini dapat membantu untuk menentukan mengapa perakitan System.Web.Http.WebHost, Versi = 5.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35 'tidak dapat dimuat.

WRN: logging yang mengikat perakitan dimatikan. Untuk mengaktifkan logging kegagalan ikatan bind, atur nilai registri [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) ke 1. Catatan: Ada beberapa penalti kinerja yang terkait dengan logging kegagalan bind rakitan. Untuk mematikan fitur ini, hapus nilai registri [HKLM \ Software \ Microsoft \ Fusion! EnableLog].

Berikut ini adalah bagian dari file web.config.

  <system.web>
    <customErrors mode="Off"/>
    <compilation debug="true" targetFramework="4.5" />
    <httpRuntime targetFramework="4.5" />
    <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" />
    </authentication>
    <pages>
      <namespaces>
        <add namespace="System.Web.Helpers" />
        <add namespace="System.Web.Mvc" />
        <add namespace="System.Web.Mvc.Ajax" />
        <add namespace="System.Web.Mvc.Html" />
        <add namespace="System.Web.Optimization" />
        <add namespace="System.Web.Routing" />
        <add namespace="System.Web.WebPages" />
      </namespaces>
    </pages>
  </system.web>
  <system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
  <handlers>
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers></system.webServer>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.Core" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="DotNetOpenAuth.AspNet" publicKeyToken="2780ccd10d57b246" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.1.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.0.0.0" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
ca9163d9
sumber

Jawaban:

129

Tidak dllada dalam publikasi (lingkungan yang digunakan). Itulah alasan mengapa ia bekerja di Visual Studio yaitu lokal tetapi tidak di Lingkungan Situs Web Azure.

Lakukan saja Copy Local = truedi properti untuk perakitan ( System.Web.Http.WebHost ) dan kemudian lakukan redeploy, itu akan berfungsi dengan baik.

Jika Anda mendapatkan kesalahan yang sama yaitu beberapa perakitan lainnya hilang, maka buatlah perakitan itu menjadi copylocal = true dan gunakan kembali, ulangi ini secara berulang - jika Anda tidak yakin dengan dependensinya.

Naveen Vijay
sumber
2
The Copy Localsudah Benar. Anehnya itu menunjukkan Runtime Versionv4.0.30319 bukan v5?
ca9163d9
4
Tahukah Anda apa yang terjadi di sini? Saya telah berjalan dengan baik selama 18 bulan ketika ini melompat dan menggigit saya.
Glenn Gordon
2
Ini memperbaiki masalah bagi saya Terima kasih! Tetapi tampaknya aneh bagi saya bahwa kita harus memasukkan pustaka kerangka kerja dalam proyek kami (Dalam kasus saya bukan Azure tetapi server IIS). Adakah yang tahu kalau ini kasus menjalankan beberapa pembaruan sehingga kami tidak perlu memasukkannya lagi?
edgarpetrauskas
1
Mini add-on karena butuh selamanya untuk menemukan salinan lokal: Di VS2013, Anda membuka simpul "referensi" di proyek, dan klik kanan-> properti di perpustakaan yang ingin Anda setel "salin lokal".
ArtHare
6
Jika Salin Lokal sudah disetel ke true dan Anda tidak dapat memperbarui WebApi karena dependensi, ada trik untuk mengatur Salin Lokal ke false, bangun, lalu atur Salin Lokal kembali ke true dan bangun. Saya tidak tahu mengapa ini berhasil.
DeeArgee
90

Jika Anda masih mencari jawaban, coba periksa utas pertanyaan ini . Itu membantu saya menyelesaikan masalah yang sama.

sunting: Solusi yang membantu saya adalah menjalankan Update-Package Microsoft.AspNet.WebApi -reinstalldari manajer paket NugGet, seperti yang disarankan oleh Pathoschild. Saya kemudian harus menghapus file .suo saya dan me-restart VS, seperti yang disarankan oleh Sergey Osypchuk di utas ini .

amraby
sumber
Harap hindari hanya tautan jawaban .. lebih baik kirimkan informasi yang relevan dari tautan di atas di sini ..
Anvesh Yalamarthy
3
Menjalankan perintah Update-Package menyelesaikan masalah, sedangkan tidak ada saran lain yang berfungsi. Terima kasih atas jawabannya!
DigiOz Multimedia
Solusi terbaik untuk masalah ini.
Festim Cahani
Jawaban sempurna, Terima kasih!
Apolo
3
Solusi ini juga bekerja untuk saya. Saya cukup yakin ini disebabkan oleh fungsionalitas 'Hapus Majelis Tidak Digunakan' ReSharper. Hapus Assemblies yang tidak terpakai terkadang secara membabi buta menghapus assembly tanpa memeriksa isi paket NuGet.
Joe King
54

Saya bertemu dengan masalah yang sama dan saya mengatasinya dengan menetapkan CopyLocal true untuk lib berikut:

System.Web.Http.dll
System.Web.Http.WebHost.dll
System.Net.Http.Formatting.dll

Saya harus menambahkan bahwa saya menggunakan MVC4 dan NET 4

Bronek
sumber
terima kasih ini sangat membantu. Apakah Anda tahu mengapa file-file ini tidak hanya berada di GAC? Apakah karena situs yang berbeda dapat menggunakan kerangka kerja dotnet yang berbeda, dll?
dellyjm
Seingat saya masalah ini telah terjadi sejak Microsoft menerapkan perbaikan kritis di area itu (saya kira di System.Web / ASP NET / MVC). Saya kira ruang nama ini tidak di GAC (jadi tidak di majelis NET asli) tetapi dalam jalur Visual Studio atau MVC yang terpisah.
Bronek
Ini menyelesaikan masalah pada VPS saya (ini bukan hanya masalah biru)
Evilripper
Ini bekerja untuk saya (meskipun saya tidak menggunakan Azure). Saya memindahkan proyek dari lingkungan .net 4.5 kerangka kerja ke 4.0 satu dan mendapatkan masalah ini di akhir semuanya.
TheQ
1
Per saran DeeArgee di atas, saya sudah memiliki COPY LOKAL = benar untuk semua 3 dll ini. Tetapi saran ini akhirnya menyelesaikan masalah: "Jika Salin Lokal sudah disetel ke true, ada trik untuk mengatur Salin Lokal ke false, bangun, lalu atur Salin Lokal kembali ke true dan bangun. Saya tidak tahu mengapa ini bekerja. - DeeArgee 19 Nov '15 jam 17:16
Debbie A
34

Bagi saya bekerja menambahkan bagian berikut ke web.configfile:

<configuration>
...
    <runtime>
    ...
        <dependentAssembly>
            <assemblyIdentity name="System.Web.Http.WebHost" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.1.0.0" newVersion="5.1.0.0" />
        </dependentAssembly>
    ...
    </runtime>
...
</configuration>

Contoh ini adalah singkatan dari MVC 5.1. Semoga ini akan membantu seseorang untuk menyelesaikan masalah tersebut.

Eadel
sumber
2
kamu Menakjubkan. bekerja seperti pesona di mvc5. Terima kasih
David Graça
2
Terima kasih, bekerja untuk saya juga +1, orang yang menanyakan pertanyaan ini harus menandai ini sebagai jawabannya!
Ray
Atau cukup tambahkan Microsoft.AspNet.WebApi.WebHostpaket melalui nuget.
Optimax
15

Bagi saya itu mulai bekerja setelah memilih "Hapus file tambahan di tujuan" di opsi File publish di bawah pengaturan pada dialog publish.

Magnus Ahlin
sumber
Bekerja untukku! Bagus
Dr Schizo
Ini adalah satu-satunya solusi di sini yang berhasil untuk saya. Saya kira ada beberapa versi lama lain dll yang tersandung. Terima kasih!
Ohad Schneider
10

Dll hilang di lingkungan yang diterbitkan (dikerahkan). Itulah alasan mengapa ia bekerja di Visual Studio yaitu lokal tetapi tidak di Lingkungan Situs Web Azure.

Cukup lakukan Salin Lokal = true di properti untuk perakitan (System.Web.Http.WebHost) dan kemudian lakukan redeploy, itu akan berfungsi dengan baik.

venkat
sumber
sama di sini, ini persis apa yang dibutuhkan.
pabloelustondo
1
Mungkin karena solusi yang sama dijelaskan dalam beberapa jawaban lain setahun sebelumnya.
Chad
6

Saya menggunakan vs2012 dan saya pikir pembaruan KB2781514 mengubah beberapa pengaturan. Semua System.Web.Http saya di proyek MVC4 saya berubah menjadi false dan saya tetap menerima pesan ini. Saya telah mengubah All file in this projectproperti in publish tetapi tidak berfungsi. Akhirnya saya harus mengubah Copy Local = truesatu per satu dan menyelesaikan masalah ini.

selain itu
sumber
2

Saya mendapatkan kesalahan yang sama dan saya mengubah versi saya dari 4 menjadi 3 dan ini diselesaikan:

<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <!-- Ensure correct version of MVC -->
    <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35"/>
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0"/>
    </dependentAssembly>
</assemblyBinding>
Ilaria
sumber
2

Saya memiliki masalah yang sama dalam Aplikasi saya.

System.web.http.webhost not found.

Anda hanya perlu menyalin system.web.http.webhostfile dari proyek utama Anda yang Anda jalankan di Visual Studio dan menempelkannya ke bindirektori proyek yang diterbitkan .

Setelah ini mungkin menampilkan kesalahan yang sama tetapi nama direktori diubah mungkin system.web.http. Ikuti prosedur yang sama seperti di atas. Ini akan berfungsi setelah semua file diunggah. Ini karena paket nuget di Visual Studio yang mereka unduh dari internet tetapi pada server tidak dapat mengunduhnya.

Anda dapat menemukan file ini di bindirektori proyek Anda .

imran khan
sumber
1

Ini terjadi pada saya di VS2013 (Pembaruan 5) /ASP.NET 4.5, di bawah jenis proyek "Aplikasi Web" yang mencakup MVC dan Web API 2. Kesalahan terjadi tepat setelah membuat proyek dan sebelum menambahkan kode apa pun. Menambahkan konfigurasi berikut perbaiki untuk saya. Setelah menyelesaikan "System.Web.Helpers" mengeluarkan dua kesalahan serupa yang muncul untuk "System.Web.Mvc" dan "System.Web.WebPages".

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="5.2.3.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
Masoud Safi
sumber
0

Saya kehilangan beberapa DLL. Bahkan jika saya menyalinnya secara manual ke direktori saat berikutnya saya menerbitkan mereka akan hilang. Masing-masing sudah diatur untuk Menyalin Secara Lokal di VS. Perbaikan untuk saya adalah mengatur masing-masing untuk Menyalin secara Lokal salah, menyimpan, membangun kemudian mengatur masing-masing untuk menyalin secara lokal benar. Kali ini ketika saya menerbitkan semua DLL yang diterbitkan dengan benar. Aneh

Grayson
sumber
0

Jika Anda memiliki beberapa proyek dalam solusi Anda dan salah satu proyek Anda gagal dibangun karena kesalahan ini maka pastikan Anda telah menginstal paket nuget Core WebApi dalam proyek itu. Cukup menambahkan referensi ke System.Web.Http tidak membantu, Anda perlu menginstal paket nuget yang benar ke proyek itu.

Saya memiliki beberapa proyek dalam solusi saya dan WebApi Core sudah diinstal di proyek lain. Saya mereferensikan perakitan System.Web.Http dengan mengklik kanan dan mencentang perakitan dari daftar dan itu tidak bekerja pada Azure, meskipun secara lokal itu akan membangun apa-apa. Saya harus menghapus referensi manual dan menambahkan paket nuget Core WebApi untuk setiap proyek yang membutuhkan referensi perakitan.

Ali
sumber
0

Dalam kasus jika "Salin Lokal" sudah Benar, saya kadang menemukan bahwa itu berfungsi jika Anda menghapus file yang telah diterbitkan dan diterbitkan lagi.

Misalnya, jika Anda menggunakan IIS, hapus situs web dan konten direktori tempat penerbitannya, dan publikasikan kembali.

Mungkin ada versi file yang lebih lama di tujuan, jadi untuk memastikan Anda tidak menggunakan versi yang lebih lama, hapus semuanya sebelum menerbitkan lagi.

Prasanth Louis
sumber
0

Saya menghapus entri berikut dari web.config dan itu berhasil untuk saya.

<dependentAssembly>
                <assemblyIdentity name="System.Web.Http.WebHost" culture="neutral" publicKeyToken="31BF3856AD364E35" />
                <bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.6.0" />
            </dependentAssembly>
Ibrahim Mohammed
sumber
0

Pastikan versi paket sama di seluruh solusi. Saya baru saja menurunkan versi & memutakhirkan Microsoft.AspNet.Mvcpaket di seluruh solusi dan masalahnya teratasi.

Masoud Darvishian
sumber