Kesalahan Microsoft.Web.Infrastructure, Versi = 1.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35

92

Saya memiliki aplikasi web kecil. Yang berfungsi dengan baik sampai saya menambahkan dua genericHandler di aplikasi saya.

Saya telah membuat perubahan berikut untuk penangan http

 <system.web>
    <authentication mode="Forms" >
        <forms protection="All" timeout="720" defaultUrl="Default.aspx" loginUrl="Login.aspx" >
        </forms>
    </authentication>
    <authorization>
        <deny users="?"/>
    </authorization>
    <compilation debug="true" targetFramework="4.0" />

    <httpHandlers>
        <!--Code Log Handler-->
        <add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
        <add verb="*" type="InfoDomeNewUI.Handler.SendOWA" path="SendOWA.ashx" />
        <add verb="*" type="InfoDomeNewUI.Handler.SendSOS" path="SendSOS.ashx" />
    </httpHandlers>
    <customErrors mode="Off">
        <error statusCode="404" redirect="Templates/PageNotFound.html" />
    </customErrors>
</system.web>
<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
        <!--Code Log Handler-->
        <add name="LogHandler1" path="SendOWA.ashx" verb="*" type="InfoDomeNewUI.Handler.SendOWA"/>
        <!-- SMS SENDER-->
        <add name="SendSOS" path="SendSOS.ashx" verb="*" type="InfoDomeNewUI.Handler.SendSOS"/>
    </handlers>
</system.webServer>

Could not load file or assembly 'Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The system cannot find the file specified.

Saya menggunakan asp.net4.0 dan C #. Saya tidak menggunakan MVC
Pada host lokal, ini berfungsi dengan baik.
Tetapi ketika saya menghosting kode yang diterbitkan itu memberi saya kesalahan di atas.

Pelacakan Tumpukan: -

[FileNotFoundException: Tidak dapat memuat file atau rakitan 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35' atau salah satu dependensinya. Sistem tidak dapat menemukan file yang ditentukan.] System.Web.Http.WebHost.SuppressFormsAuthRedirectModule.Register () +0

[InvalidOperationException: Metode inisialisasi awal pra-aplikasi Mulai pada tipe System.Web.Http.WebHost.PreApplicationStartCode melontarkan pengecualian dengan pesan galat berikut: Tidak dapat memuat file atau rakitan 'Microsoft.Web.Infrastructure, Version = 1.0.0.0, Budaya = netral, PublicKeyToken = 31bf3856ad364e35 'atau salah satu dependensinya. Sistem tidak dapat menemukan file yang ditentukan ..] System.Web.Compilation.BuildManager.InvokePreStartInitMethods (metode ICollection`1) +11708830 System.Web.Compilation.BuildManager.CallPreStartInitMethods () +465 System.Web.Hosting.HostingEnvironment.Initialize ( ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLeve

[HttpException (0x80004005): Metode inisialisasi pra-aplikasi mulai Mulai jenis System.Web.Http.WebHost.PreApplicationStartCode melontarkan pengecualian dengan pesan galat berikut: Tidak dapat memuat file atau rakitan 'Microsoft.Web.Infrastructure, Version = 1.0 .0.0, Culture = neutral, PublicKeyToken = 31bf3856ad364e35 'atau salah satu dependensinya. Sistem tidak dapat menemukan file yang ditentukan ..] System.Web.HttpRuntime.FirstRequestInit (konteks HttpContext) +11697760 System.Web.HttpRuntime.EnsureFirstRequestInit (konteks HttpContext) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate (IttpContextRequestNotificationPrivate) +4866485

शेखर
sumber
1
Menginstal Microsoft.Web.Infrastructure.dll dari paket nuget, berhasil untuk saya.
ATUL SHARMA

Jawaban:

197

Tampaknya Microsoft.Web.Infrastructure.dll tidak diinstal di GAC, meskipun .net (4.0 atau 4.5 atau lainnya) berhasil diinstal di Windows Server. Di localhost (biasanya klien Windows), sepertinya itu berada di GAC ketika alat / platform (Visual Studio dll.) Diinstal.

Sebagai salah satu kemungkinan perbaikan, silakan coba berikut ini:

  1. Jalankan perintah berikut di Package Manager Console. (Jika Anda menggunakan Visual Studio, ini dapat dicapai melalui opsi menu "Tools -> Library Package Manager -> Package Manager Console :)

    PM> Install-Package Microsoft.Web.Infrastructure
    

    Anda akan melihat pesan berikut jika berhasil diinstal.

    Successfully installed 'Microsoft.Web.Infrastructure 1.0.0.0'.
    Successfully added 'Microsoft.Web.Infrastructure 1.0.0.0' to Web.
    
  2. Anda akan melihat bahwa Microsoft.Web.Infrastructure.dll sekarang telah ditambahkan sebagai Referensi (dapat dilihat di folder referensi proyek Anda di Solution Explorer)

  3. Jika Anda melihat properti referensi ini, Anda akan melihat bahwa " Salin Lokal " telah disetel ke " Benar " secara default.

  4. Sekarang ketika Anda "Publikasikan" proyek Anda, Microsoft.Web.Infrastructure.dll akan digunakan.

rockyb
sumber
2
Terima kasih, itu menyelesaikan masalah saya! Saya menggunakan pengontrol WebApi di aplikasi Webforms saya dan penerapan gagal karena pesan kesalahan yang disebutkan. Dengan menambahkan referensi ke proyek saya dan menyalin .dll, saya dapat membuatnya berfungsi.
magnattic
1
Awalnya saya mencoba melalui antarmuka "Kelola Paket NuGet Untuk Solusi Ini", tetapi hanya dikatakan bahwa Microsoft.Web.Infrastructure.dll sudah diinstal, meskipun saya tidak dapat melihat referensi ke sana di mana pun. Dengan menjalankan baris perintah Anda, saya dapat menginstal di atas, melihat referensi, mengatur untuk menyalin lokal, diterapkan ulang ... diperbaiki. Terima kasih!!
hardba11
1
Saya menginstal dengan Package Manager tetapi sudah diinstal. Tetapi saya tidak dapat melihat Referensi pada proyek tersebut. Jadi saya menambahkan sendiri dan mengatur Salin Lokal ke True =)
Akira Yamamoto
27
Perhatikan bahwa dalam beberapa kasus, Anda mendapatkan pesan "Webapp sudah memiliki referensi ke 'Microsoft.Web.Infrastructure 1.0.0.0'.". Gunakan "Update-Package Microsoft.Web.Infrastructure -Reinstall" dalam kasus tersebut.
Robba
1
Saya sudah menginstalnya tetapi 'Salin Lokal' disetel ke false. Mengubahnya menjadi true memperbaikinya! Terima kasih
Lyall
19

Saya menginstal MVC4 melalui WPI dan itu membantu saya.

Alex Shyba
sumber
1
Yang ini berfungsi untuk saya karena masalah saya ada di server tetapi tidak di mesin saya.
Yohanes
14

Saya memiliki masalah yang sama. Ketika saya mencoba jawaban yang diterima (rockyb), saya mendapat pesan bahwa paket tersebut sudah diinstal dan ditugaskan ke proyek saya. Namun, ketika saya memeriksa daftar referensi, itu TIDAK direferensikan.

Microsoft.Web.Infrastructure diinstal di folder paket solusi saya. Alih-alih menggunakan NuGet untuk menambahkan paket, saya hanya menggunakan opsi Add Reference. Di sisi kiri jendela pop-up, saya memilih Browse, lalu menekan tombol Browse di bagian bawah jendela. Saya menavigasi ke folder paket di bawah folder tempat solusi saya berada, lalu mengebor ke ... \ mysolution \ packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 dan mengklik Microsoft.Web.Infrastructure .dll. Setelah mengklik OK, paket muncul di daftar Referensi saya. Saya menggunakan opsi Paket Penyebaran Web untuk menerapkan situs web saya dan semuanya berfungsi.

Glenn Gordon
sumber
1
Uang. Karena jawaban ini sangat baru, dan yang diterima (yang juga tidak berhasil untuk saya) sudah sangat tua, saya berasumsi ini ada hubungannya dengan versi Visual Studio yang diperbarui. Terima kasih!
cabaiNUT
1
Seperti yang dikatakan Robba dalam komentar di jawaban yang berbeda, Anda dapat menyelesaikan masalah karena tidak ada dalam daftar referensi (tetapi paket diinstal) dengan: "Update-Package Microsoft.Web.Infrastructure -Reinstall". Saya pikir itu lebih baik daripada melihat-lihat perakitan.
Jim W mengatakan mengembalikan Monica
9

Mengapa tidak menyalin file Microsoft.Web.Infrastructure.dll secara manual ke folder BIN server. Ini bekerja untuk. Proyek saya adalah Situs VS2010.

File ini dapat ditemukan:

C: \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Packages \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40

Cukup salin dan tempel di folder BIN.

Anda mungkin perlu memasukkan ini di web.config jika Anda belum memilikinya

<compilation debug="true" targetFramework="4.0">
  <assemblies>
    <add assembly="Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
  </assemblies>
</compilation>

Referensi: http://thedeveloperblog.com/

BenW
sumber
6

Saya menemukan masalahnya. Alih-alih menambahkan (.cs)file kelas karena kesalahan saya telah menambahkan Web API Controllerkelas yang menambahkan file konfigurasi dalam solusi saya. Dan file konfigurasi itu mencari DLL yang disebutkan (Microsoft.Web.Infrastructure 1.0.0.0). Ini berfungsi ketika saya menghapus file itu, membersihkan aplikasi dan kemudian menerbitkannya.

शेखर
sumber
4

Setelah menginstal Microsoft.Web.Infrastructure melalui Nuget-Package Manager

PM> Install-Package Microsoft.Web.Infrastructure

Salin Microsoft.Web.Infrastructure.dllsecara manual dari Nuget-Packagefolder di aplikasi web Anda dan kemudian tempelkan di folder bin aplikasi web Anda yang digunakan di server web.

paket \ Microsoft.Web.Infrastructure.1.0.0.0 \ lib \ net40 \ Microsoft.Web.Infrastructure.dll

Itu berhasil untuk saya.

Gokulnath
sumber
Uninstall-Package Microsoft.Web.Infrastructure (kemudian periksa perubahan apa pun jika menggunakan Team Foundation Server) lalu Instal-Package Microsoft.Web.Infrastructure berfungsi untuk saya.
GJKH
3
terkadang peretasan adalah satu-satunya cara agar produk microsoft berfungsi
eagor
Ini berhasil juga untuk saya. ya itu hack tapi menghemat banyak waktu. bagaimana itu secara otomatis dihapus dari bin adalah misteri
Heemanshu Bhalla
4

Update-Package -reinstall Microsoft.Web.Infrastructure tidak berhasil untuk saya, karena saya terus menerima kesalahan bahwa itu sudah diinstal.

Saya harus menavigasi ke folder Microsoft.Web.Infrastructure.1.0.0.0 di folder paket dan secara manual menghapus folder itu.

Setelah melakukan ini, jalankan Install-Package Microsoft.Web.Infrastructuremenginstalnya.

Catatan: CopyLocalsecara otomatis disetel ke true.

contactmatt
sumber
tidak berhasil dalam kasus saya. saya menghapus folder infrastruktur dari paket dan paket yang
terpasang
0

Saya mengalami masalah yang sama dan "Microsoft.Web.Infrastructure.dll" tampaknya hilang. Saya telah mencoba beberapa saran dan menginstal MVC, dll. Dan tidak ada yang membantu. Solusinya adalah dengan menginstal "Web Services Enhancements (WSE) 1.0 SP1 for Microsoft .NET" yang mencakup Microsoft.Web.Infrastructure.dll. Tersedia di: http://www.microsoft.com/en-gb/download/details.aspx?id=4065

Zly-Zly
sumber
0

Saya memiliki masalah yang sama. Saya mencoba menginstal Visual Studio 2010 SP1 tetapi tidak berhasil.

Akhirnya saya mendapatkan Microsoft.Web.Infrastructure.dll dari rekan kerja. Anda dapat menemukan dll ke PC teman Anda di mana proyek tersebut bekerja dengan sempurna. Cobalah untuk mencari dll ke File Temp / Sementara ASP.NET. Pergi ke Temp menggunakan% temp% ke dalam jendela run.

Setelah mendapatkan dll ke pc Anda, cukup tambahkan referensi ke proyek Anda dan itu akan berhasil.

Ankit
sumber
0

Menerbitkan ulang situs memperbaiki masalah saya.

PhillyNJ
sumber
0

Menghadapi masalah yang sama dan sayangnya tidak ada yang berfungsi di sini. Akhirnya, saya menemukan tautan ini: https://blogs.msdn.microsoft.com/jjameson/2009/11/18/the-copy-local-bug-in-visual-studio/

Ternyata solusinya agak bodoh: atur copy-local untuk dll microsoft.web.infrastructure ke False, lalu setel kembali ke True.

Ngomong-ngomong, menurut saya yang terjadi adalah ada dua versi dll microsoft.web.infrastructure, satu sudah diinstal sebelumnya di GAC, dan satu lagi yang sekarang menjadi paket nuget. Saya pikir yang satu menutupi yang lain, sehingga menyebabkan masalah. Dalam kasus khusus saya, di server build saya, saya membutuhkannya untuk disalin ke folder (folder ini kemudian di-zip dan dikirim ke penyebaran). Saya kira sistem memiliki salinan secara lokal dan hanya berpikir "tidak, ini akan baik-baik saja"

information_interchange
sumber
0

Saya memiliki situs web file saja. Menambahkan MVC 5 ke aplikasi formulir web (menargetkan net45). Saya harus memodifikasi package.config

package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45"

untuk

package id="Microsoft.AspNet.Mvc" version="5.2.3" targetFramework="net45" developmentDependency="true"

untuk memulai di kotak lokal dalam mode debug (sebelumnya memiliki kesalahan yang dijelaskan atas). Menjalankan VS 2017 di Windows 7 ... dibuka melalui File> Buka> Situs Web> File (pilih direktori root di luar IIS).

Pesolek
sumber
0

Saya mengalami masalah yang sama setelah memutakhirkan banyak paket NuGet.
Saya telah mencoba semua jenis penghapusan, pembersihan, pemasangan ulang yang dijelaskan di sini dan beyong tidak berhasil. Referensi tersebut tidak memiliki Microsoft.Web.Infrastructure meskipun manajer NuGet menunjukkan bahwa itu diinstal.

Masalahnya diselesaikan dengan mengganti:

  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net45" />

dengan

  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />

di packages.config. Pelakunya tampaknya "net45".

Hong
sumber