Azure web sitesinde yayınlandıktan sonra System.Web.Http.WebHost dosyası veya montajı yüklenemedi


141

Bir web projesi oluşturdum ve Visual Studio'da iyi çalışıyor. Ancak, azurewebsites yayınladıktan sonra aşağıdaki hatayı aldım. Soruna ne neden olabilir?

Dosya veya montaj 'System.Web.Http.WebHost, Sürüm = 5.0.0.0, Kültür = nötr, PublicKeyToken = 31bf3856ad364e35' veya bağımlılıklarından biri yüklenemedi. Konumlandırılan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor. (HRESULT istisnası: 0x80131040)

Açıklama: Geçerli web isteğinin yürütülmesi sırasında işlenmeyen bir özel durum oluştu. Hata ve kodun nereden kaynaklandığı hakkında daha fazla bilgi için lütfen yığın izlemesini inceleyin.

Özel Durum Ayrıntıları: System.IO.FileLoadException: Dosya veya derleme 'System.Web.Http.WebHost, Sürüm = 5.0.0.0, Kültür = nötr, PublicKeyToken = 31bf3856ad364e35' veya bağımlılıklarından biri yüklenemedi. Konumlandırılan derlemenin bildirim tanımı derleme başvurusuyla eşleşmiyor. (HRESULT istisnası: 0x80131040)

Kaynak Hatası:

Geçerli web isteğinin yürütülmesi sırasında işlenmeyen bir özel durum oluşturuldu. Kural dışı durumun kaynağı ve yeri ile ilgili bilgiler aşağıdaki kural dışı durum yığını izlemesi kullanılarak tanımlanabilir.

Montaj Yükü İzleme: Aşağıdaki bilgiler, 'System.Web.Http.WebHost, Sürüm = 5.0.0.0, Kültür = nötr, PublicKeyToken = 31bf3856ad364e35' derlemesinin neden yüklenemediğini belirlemek için yardımcı olabilir.

WRN: Montaj ciltleme günlüğü KAPALI. Derleme bağlama hatası günlüğünü etkinleştirmek için [HKLM \ Software \ Microsoft \ Fusion! EnableLog] (DWORD) kayıt defteri değerini 1 olarak ayarlayın. Not: Derleme bağlama hatası günlüğü ile ilişkili bir performans cezası vardır. Bu özelliği kapatmak için [HKLM \ Software \ Microsoft \ Fusion! EnableLog] kayıt defteri değerini kaldırın.

Aşağıdaki web.config dosyasının bir parçasıdır.

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

Yanıtlar:


129

dllYayımlanmış (konuşlandırılmış ortamda) eksik. Azure Web Sitesi Ortamında değil yerel yani Visual Studio'da çalışmasının nedeni budur.

Sadece Copy Local = truemontajın özelliklerini ( System.Web.Http.WebHost ) yapın ve sonra yeniden konuşlandırın, iyi çalışmalıdır.

Benzer hatayı alırsanız, örneğin başka bir derleme eksikse, o derlemeyi copylocal = true ve yeniden konuşlandırmaya getirin, bağımlılıklarından emin değilseniz bunu tekrarlayın.


2
Copy LocalZaten True. Garip bir şekilde Runtime Versionv5 yerine v4.0.30319 olduğunu gösterir ?
ca9163d9

4
Burada ne olduğunu biliyor musun? Bu atladı ve beni ısırdı 18 ay boyunca iyi koşuyordu.
Glenn Gordon

2
Bu benim için sorunu düzeltti Teşekkürler! Ancak bana, projelerimize çerçeve kitaplıkları eklememiz gerektiği garip görünüyor (Benim durumumda Azure değil bir IIS sunucusu). Herkes bazı güncellemeleri çalıştırmak durumunda olduğunu biliyorum, bu yüzden artık onları dahil etmek zorunda değilsiniz?
edgarpetrauskas

1
Mini eklenti, yerel kopyayı bulmamı sonsuza dek sürdüğümden beri: VS2013'te, projedeki "başvurular" düğümünü ve "yerel kopyala" seçeneğini ayarlamak istediğiniz kitaplıkta sağ tıklatma> özelliklerini açıyorsunuz.
ArtHare

6
Yerel Kopyala zaten true olarak ayarlandıysa ve bağımlılıklar nedeniyle WebApi'yi güncelleyemiyorsanız, Yerel Kopyala'yı false, oluştur, sonra Yerel Kopyala'yı tekrar doğru ve oluştur olarak ayarlama hilesi vardır. Bunun neden işe yaradığını bilmiyorum.
DeeArgee

90

Hâlâ bir yanıt arıyorsanız, bu soru dizisini kontrol etmeyi deneyin . Benzer bir sorunu çözmeme yardımcı oldu.

edit: Bana yardımcı olan çözüm Update-Package Microsoft.AspNet.WebApi -reinstallPathoschild tarafından önerildiği gibi NugGet paket yöneticisinden çalıştırmak oldu. Sonra bu iş parçacığında Sergey Osypchuk tarafından önerildiği gibi .suo dosyamı silmek ve VS yeniden başlatmak zorunda kaldı .


Lütfen bağlantı sadece cevaplar kaçının .. yerine lütfen yukarıdaki bağlantıdan ilgili bilgileri buraya
gönderin

3
Güncelleştirme Paketi komutunu çalıştırmak sorunu çözerken diğer önerilerin hiçbiri işe yaramadı. Cevap için teşekkür ederim!
DigiOz Multimedia

Soruna en iyi çözüm.
Festim Cahani

Mükemmel cevap, teşekkürler!
Apolo

3
Bu çözüm benim için de işe yaradı. Bunun ReSharper'ın 'Kullanılmayan Montajları Kaldır' işlevselliğinden kaynaklandığından oldukça eminim. Kullanılmayan Montajları Kaldır Bazen NuGet paket içeriğini kontrol etmeden montajları körü körüne kaldırır.
Joe King

54

Aynı sorunla karşılaştım ve CopyLocalaşağıdaki kütüphaneler için true olarak ayarlayarak çözdüm:

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

MVC4 ve NET 4 kullandığımı eklemeliyim


teşekkür ederim bu yardımcı oldu. Bu dosyaların neden sadece GAC'de olmadığını biliyor musunuz? Farklı siteler farklı dotnet çerçeveleri vb kullanıyor olabilir mi?
dellyjm

Hatırladığım kadarıyla Microsoft bu alanda kritik düzeltmeler uyguladığından beri bu sorun oldu (Sanırım System.Web / ASP NET / MVC). Bu ad alanları GAC (yerel NET derlemelerinde değil) değil, ayrı Visual Studio veya MVC yollarında sanırım.
Bronek

Bu,
VPS'imdeki

Bu benim için çalıştı (Azure kullanmama rağmen). Bir projeyi .net 4.5 çerçeve ortamından 4.0 projesine taşıyordum ve bu sorunu her şeyin sonunda aldım.
TheQ

1
DeeArgee'nin yukarıdaki önerisine göre, zaten bu dll en 3 için YEREL KOPYA = true vardı. Ancak bu öneri nihayet sorunu çözdü: "Yerel Kopyalama zaten true olarak ayarlanmışsa, Kopyalama Yerel ayarını yanlış, oluşturma, sonra Kopyalama Yerel ayarını tekrar doğru ve oluşturma olarak ayarlama hilesi var. Bunun neden çalıştığını bilmiyorum. - DeeArgee Kasım 19 '15, 17:16
Debbie A

34

Benim için web.configdosyaya aşağıdaki bölümü ekleyerek çalıştım :

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

Bu örnek MVC 5.1 içindir. Umarım birisinin bu sorunu çözmesine yardımcı olur.


2
müthişsin. mvc5'te bir cazibe gibi çalıştı. Teşekkürler
David Graça

2
Teşekkür ederim, benim için de çalıştı +1, bu soruyu soran kişi bunu cevap olarak işaretlemeli!
Ray

Ya da sadece Microsoft.AspNet.WebApi.WebHostnuget ile paket ekleyin .
Optimax

15

Benim için yayınlama iletişim kutusundaki ayarlar altındaki Dosya yayınlama seçenekleri'nde "Hedefteki ek dosyaları kaldır" ı seçtikten sonra çalışmaya başladı.


Benim için çalıştı! Güzel bir.
Dr Schizo

Bu benim için işe yarayan tek çözüm. Sanırım şeyleri tetikledi orada bir dll başka bir eski sürümü vardı. Teşekkürler!
Ohad Schneider

10

Dll yayınlanan (konuşlandırılmış ortamda) eksik. Azure Web Sitesi Ortamında değil yerel yani Visual Studio'da çalışmasının nedeni budur.

Derleme (System.Web.Http.WebHost) özelliklerinde Copy Local = true komutunu yapın ve sonra yeniden konuşlandırın, düzgün çalışmalıdır.


burada da aynen bu gerekliydi.
pabloelustondo

1
Muhtemelen bir yıl önce diğer birkaç cevapta da aynı çözüm olduğu için.
Çad

6

Vs2012 kullanıyorum ve güncelleme KB2781514 bazı ayarları değiştirdi düşünüyorum. MVC4 projemdeki tüm System.Web.Http yanlış olarak değiştirildi ve ben bu mesajı aldım. All file in this projectYayınlama mülkünü değiştirmiştim ama çalışmıyor. Sonunda Copy Local = truebirer birer değiştirmek zorunda kaldım ve bu sorunu çözdüm.


2

Aynı hatayı aldım ve sürümümü 4'ten 3'e değiştirdim ve çözüldü:

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

2

Uygulamamda da aynı problem vardı.

System.web.http.webhost not found.

system.web.http.webhostDosyayı Visual Studio'da çalıştırdığınız ana projenizden kopyalamanız ve yayımlanan proje bindizininize yapıştırmanız yeterlidir .

Bundan sonra aynı hatayı gösterebilir, ancak dizin adı değiştirilmiş olabilir system.web.http. Yukarıdaki prosedürün aynısını uygulayın. Tüm dosyalar yüklendikten sonra çalışır. Bu, internetten indirdikleri Visual Studio'daki nuget paketi nedeniyle ancak sunucuda indirememektedir.

Bu dosyayı proje bindizininizde bulabilirsiniz.


1

Bu, VS2013 (Güncelleme 5) /ASP.NET 4.5'de, MVC ve Web API 2'yi içeren proje türü "Web Uygulaması" altında gerçekleşti. Projeyi oluşturduktan hemen sonra ve herhangi bir kod eklemeden önce hata oluştu. Aşağıdaki yapılandırmayı eklemek benim için düzeltti. "System.Web.Helpers" sorunu çözüldükten sonra "System.Web.Mvc" ve "System.Web.WebPages" için iki benzer hata daha ortaya çıktı.

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

0

Birkaç DLL eksikti. Bir dahaki sefere yayınladığımda bunları dizine manuel olarak kopyalasam bile kaybolacaklardı. Her biri VS'de Yerel Olarak Kopyala olarak ayarlanmıştı. Benim için düzeltme, her birini Yerel Olarak Kopyala yanlış olarak ayarlamak, kaydetmek, oluşturmak ve her birini yerel olarak doğru kopyalamak için ayarlamaktı. Bu sefer doğru yayınlanan tüm DLL'leri yayınladığımda. Garip


0

Çözümünüzde birden çok projeniz varsa ve projelerinizden biri bu hata nedeniyle oluşturulamıyorsa, WebApi Çekirdek nuget paketini bu projeye yüklediğinizden emin olun. System.Web.Http dosyasına bir başvuru eklemek yardımcı olmaz, bu projeye doğru nuget paketini yüklemeniz gerekir.

Çözümümde birden fazla proje vardı ve WebApi Core başka bir projeye zaten kurulmuştu. Listeyi sağ tıklatıp derleme listeyi işaretleyerek System.Web.Http derlemesine başvurdum ve yerel olarak iyi inşa edecek olsa da, Azure üzerinde çalışmadı. Manuel başvuruyu kaldırmak ve derleme başvurusu gereken her projeye WebApi Core nuget paketini eklemek zorunda kaldım.


0

"Yerel Kopyala" zaten Doğru ise, yayınlandığı dosyaları kaldırır ve yeniden yayınlarsanız bazen işe yaradığını görürüm.

Örneğin, IIS kullanıyorsanız, yayımlandıkları dizinin web sitelerini ve içeriğini kaldırın ve yeniden yayınlayın.

Hedefte dosyaların daha eski sürümleri olabilir, bu nedenle eski sürümleri kullanmadığınızdan emin olmak için yeniden yayınlamadan önce her şeyi silin.


0

Aşağıdaki girişi web.config'den kaldırdım ve benim için çalıştı.

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

0

Paket sürümünün çözüm boyunca eşit olduğundan emin olun. Sadece Microsoft.AspNet.Mvcçözüme göre paket indirdi ve yükseltme ve sorun çözüldü.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.