Visual Studio 2017 - 'System.Runtime, Version = 4.1.0.0' dosyası veya derlemesi veya bağımlılıklarından biri yüklenemedi


106

Visual Studio 2017 kullanıyorum ve bir .Net Standard 1.5 kitaplığı oluşturmaya ve bunu .Net 4.6.2 nUnit test projesinde kullanmaya çalışıyorum.

Aşağıdaki hatayı alıyorum...

Dosya veya derleme 'System.Runtime, Version = 4.1.0.0, Culture = nötr, PublicKeyToken = b03f5f7f11d50a3a' veya bağımlılıklarından biri yüklenemedi. Sistem belirtilen dosyayı bulamıyor.

Aşağıdakileri denedim:

  1. Proje referansı olarak referans Std kitaplığı. Hata: bana önceki hatayı veriyor.
  2. Std kitaplığım için bir NuGet paketi oluşturun ve buna referans verin. Hata: Tür System.String, System.String bekleniyor. Bunun nedeni, System.Runtime'ın proje tarafından referans alınması ve tüm standart türler için tanımlara sahip olmasıdır.
  3. Başvuru NuGet pkg NetStandard.Library. Hata: # ile aynı hatayı ver ("Tür System.String, System.String bekleniyor"). NOT: Bunu yapmadan önce, projeden TÜM NuGet paketlerini temizledim ve ardından sadece nUnit ve NetStandard.Library paketlerini ekledim (45 paket daha yükledim).

Bu bir hata mı? Bir çözüm var mı? Herhangi bir yardım takdir edilmektedir.

Yanıtlar:


93

Aynı sorunu yaşadım ve işe yaradığını bulduğum hiçbir çözüm önerisi yok. Bu sorun için benim çözümüm şuydu: Sürümlerin eşleşip eşleşmediğini görmek için App.config ve packages.config 'i kontrol edin.

Başlangıçta app.config dosyam şunları içeriyordu:

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
</dependentAssembly>

Ancak packages.config şunları içeriyordu:

<package id="System.Runtime" version="4.3.0" targetFramework="net461" requireReinstallation="true" />

App.config girişini newVersion için packages.config ile eşleşecek şekilde değiştirdim:

<dependentAssembly>
  <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.3.0" />
</dependentAssembly>

Değişiklikten sonra sorun çözüldü.


Veya referansı sadece web.config'inize ekleyin: stackoverflow.com/a/38603514/1145177
Doug S

7
NuGet'ten "4.3.0" aldım ancak nedense VS, "4.1.2.0" ı referans aldığımda ısrar ediyor, sadece farklı bir sürüm numarasıyla ilgili benzer çalışmalar benim için çalıştı ...
David Rogers

Bir MSTest projesinde @DavidRogers gibi aynı sorunu yaşadım. App.config ve packages.config arasındaki farkların birleştirilmesi sorunu çözdü.
Oktoat

evet çok teşekkürler ! MSTest testlerimin bulunmaması için çözüm buydu [MSTest][Discovery] Failed to discover tests from assembly Reason:Could not load file or assembly 'System.Reflection, Version=4.1.1.0 etc
Dan M

Çözüm benim için çalıştı. HtmlAgilityPack NUGET yüklendikten sonra sorun başladı. Ve paketlerdeki yanlış sürüm bilgisi nedeniyle çalışmaz. +1
Roberto

35

Bu sorun, bir .NET 4.x projesinden bir .NET Standard projesine başvurduğunuzda oluşur: .NET Standard projesinin nuget paketi başvurularından hiçbiri bağımlılık olarak getirilmez.

Bunu düzeltmek için, .NET 4.x csproj dosyanızın mevcut derleme araçlarına (en az 14) işaret ettiğinden emin olmanız gerekir:

<Project ToolsVersion="15.0">...

Aşağıdakilere artık ihtiyaç duyulmamalı, VS 15.3 civarında düzeltildi:

Bir yoktu bilinen böcek VS2017 içinde özellikle Nuget 4.0.

Hatayı çözmek için .NET 4.x projeniz için .csproj dosyasını açmanız ve şu pasajı eklemeniz gerekir:

<ItemGroup>
  <PackageReference Include="Legacy2CPSWorkaround" Version="1.0.0">
    <PrivateAssets>All</PrivateAssets>
  </PackageReference>
</ItemGroup>

NuGet 4.x beraberinde "paket başvurusu" getiriyor - daha fazla package.config - ancak eski 4.x işlem hattı VS2017'nin başlatıldığı sırada tam olarak güncellenmemişti. Yukarıdaki kod parçacığı, bağımlılıklardan paket referanslarını doğru şekilde eklemek için derleme sistemini "uyandırıyor" gibi görünüyor.


Hangi Visual Studio 17 güncellemesi? Sürümü belirtebilir misin?
Ronak Agrawal

11
Hala 15.5.5 VS2017'de sorun yaşıyorum. Görünüşe göre başka sebepler var.
SerG

Soru: .NET 4.x projeniz paket referanslarını mı kullanıyor yoksa hala packages.config'i mi kullanıyor? Bunun benim için düzeltilmiş görünmesinin nedeninin package.config'den kurtulmam olduğunu merak ediyorum.
Cory Nelson

2
Visual Studio 2017 Sürüm 15.7 ve sonraki sürümlerin, bir projenin packages.config yönetim biçiminden PackageReference biçimine geçirilmesini desteklediğini belirtmek gerekir. docs.microsoft.com/en-us/nuget/reference/…
tranquil tarn

Bağlantınızdan @tranquiltarn: "Geçiş şu anda C ++ ve ASP.NET projeleri için kullanılamıyor."
JP Hellemons

34

Son zamanlarda bu sorunla karşılaştım ve bu başlıkta ve diğerlerinde bahsedilen birçok şeyi denedim. Ben paket referansı eklendi "System.Runtime", Nuget paket yöneticisi tarafından bağlanma redicts sabit app.configve emin olun app.configve package.configmontaj için aynı sürüme sahip. Ancak sorun devam etti.

Son olarak, <dependentAssembly>montaj için etiketi çıkardım ve sorun ortadan kayboldu. Öyleyse, aşağıdakileri içinde kaldırmayı deneyin app.config.

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
</dependentAssembly>

Düzenleme: .NET çerçevesini 4.7.2'ye güncelledikten sonra sorun yeniden ortaya çıktı. Yukarıdaki numarayı denedim ama işe yaramadı. Saatlerce boşa harcadıktan sonra, sorunun System.Linqapp.config dosyasındaki eski bir referans nedeniyle oluştuğunu fark ettim . Bu nedenle, bu sorundan kurtulmak için tüm Linq referanslarını kaldırın veya güncelleyin.


4
OP tarafından belirtilen sorunla her karşılaştığımda, .config dosyasındaki System.Runtime bilgilerini siliyorum ve bu sorunu çözüyor. Bunun olası bir geçerli çözüm olduğu konusunda sizinle hemfikirim. Nuget'ten bir paket eklediğimde benimle olma eğilimindedir.
Wallace B. McClure

Benim için çalıştı. xunit System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.2.0Projelerimi
4.7.2'ye

Cevabınıza göre nuget paketlerimi kontrol ettim ve projelerim arasında 'Google.protobuf' ihtiyaçlarını (Birleştirme) buldum, thnx
Osama_Almaani

29

İnan bana, şaka yapmıyorum. Tüm System.Runtime bağımlılıklarını app.config dosyanızdan kaldırın ve çalışmaya başlayacaktır.


9
Bunun neden işe yarayacağına dair daha iyi bir açıklama yardımcı olacaktır.
Dour Yüksek Arch

Bu yöntemle ilgili sorun, herhangi bir nuget paketini her güncellediğinizde veya yeni nuget paketi eklediğinizde, yeniden eklenmesidir.
Vibgy

16

Bu hatayı NUnit-Project'te NetStandard.Library'ye ve aşağıdaki app.config Dosyasına başvurarak çözdüm .

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Reflection" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.1.0" newVersion="4.1.1.0" />
        </dependentAssembly>
        <dependentAssembly>
            <assemblyIdentity name="System.Runtime.InteropServices" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.1.0" />
        </dependentAssembly>
    </assemblyBinding>
</runtime>

Düzenle

Daha şey diğer olursa System.Runtime, System.Reflectionya System.Runtime.InteropServices(örneğin eksik System.Linq), sonra sadece yeni bir ekleme dependentAssemblydüğüm.

Düzenle 2

Yeni Visual Studio Sürümlerinde (2017 15,8 sanırım) Studio'nun app.config Dosyasını oluşturması mümkündür. Proje Özellikleri - Uygulama'daki Otomatik bağlama yeniden yönlendirmeleri oluştur Onay Kutusunu işaretlemeniz yeterlidir . Bağlama yönlendirmelerini otomatik oluştur

Düzenle 3

Bağlama yeniden yönlendirmelerini otomatik oluştur, .NET Classlibraries ile iyi çalışmaz. Aşağıdaki satırları csproj dosyalarına eklemek bunu çözer ve Classlibary için çalışan bir .config dosyası oluşturulur.

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
  <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

11
Garip bir şekilde, System.Runtime için tüm düğümleri kaldırarak sorunu benim için düzelttim <dependentAssembly>..
Matt Brewerton

1
@MattBrewerton onayladı!
Bart De Boeck

13

Kızkardeşimi silerek düzelttim app.configile

<assemblyIdentity name="System.Runtime" ....> 

girdileri.

app.config yeniden düzenleme sırasında otomatik olarak eklendi (ancak gerekli değil)


Bu benim için çalıştı! Diğer tüm öğeler sizin için çalışmıyorsa kesinlikle bunu deneyin
bOkeifus

3

Bu sorun, bir .NET 4.x projesinden bir .NET Standard projesine başvurduğunuzda oluşur: .NET Standard projesinin nuget paketi başvurularından hiçbiri bağımlılık olarak getirilmez.

System.Runtime 4.3ve NETStandard.Library paketlerini ekleyerek çözdüm ve !! önemli !! System.Runtime.dll sürümünü aramak için refactor aracını kullanıyorum, 4.1.1.1değil 4.3ve daha sonra .config'e bir bindingRedirect ekleyin

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.1.1.1" />
</dependentAssembly>

.NET standardı olarak bir proje ekledikten sonra benim için sorun oluştu. Garip bir şekilde, projeyi kaldırmasına rağmen sorunlar var olmaya devam ediyor.
d219

3

çok geç biliyorum, ne kadar başarılı bir cevap yok. Cevabı başka bir web sitesinden buldum. System.Runtime derleme bağımlılığını sildiğimde sorunu düzelttim. Bunu sildim.

<dependentAssembly> <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/> <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.1.2.0"/> </dependentAssembly>

Saygılarımla



2

Bunun AutoGenerateBindingRedirectsbu soruna neden olabileceğini bulduk .

Gözlemlenen: Aynı proje hedefleniyor net45ve netstandard1.5bir makinede başarıyla oluşturuldu ve diğerinde inşa edilemedi. Makineler, farklı çerçeve sürümlerine sahipti (4.6.1 - başarılı ve 4.7.1 - başarısız). İlk makinedeki çerçeveyi 4.7.1'e yükselttikten sonra, yapı da başarısız oldu.

Error Message:
 System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
  ----> System.IO.FileNotFoundException : Could not load file or assembly 'System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

Auto binding redirectsbir özelliğidir .net 4.5.1. NuGet, projenin geçişli olarak aynı derlemenin farklı sürümlerine referans verdiğini algıladığında, tüm sürümleri gereken en yüksek sürüme yönlendiren çıktı dizininde otomatik olarak yapılandırma dosyasını oluşturacaktır.

Bizim durumumuzda bu tüm sürümlerini yeniden bağlama edildi System.Runtimeiçin Version=4.1.0.0. .net 4.7.1bir 4.3.0.0çalışma zamanı sürümüyle birlikte gelir . Dolayısıyla yeniden yönlendirmeli bağlama, çerçevenin çağdaş bir sürümünde bulunmayan bir sürüme eşlemekti.

4.5 hedef için otomatik bağlama yeniden yönlendirmelerinin devre dışı bırakılması ve yalnızca .net çekirdeği için bırakılmasıyla sorun düzeltildi.

<PropertyGroup Condition="'$(TargetFramework)' == 'net45'">
  <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
</PropertyGroup>

2

Nuget aracılığıyla MsTest V2 ekledikten sonra bir Birim Testi projesinde bununla karşılaştım. App.config'i yeniden adlandırmak (çok etkili bir şekilde kaldırmak) benim için hile yaptı.

Yukarıdaki tüm yazıları okuduktan sonra, neden hala emin değilim, üzgünüm!


2

Bu sorunun birçok nedeni var ... benim durumumda sorun, web.config dosyamda System.Runtime derlemesini ekleyen bir etiketti:

<assemblies>
    <add assembly="System.Runtime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
</assemblies>

ancak bir paket aynı derlemeyi diğer sürümle bağımlılık olarak ekledi:

<package id="System.Runtime" version="4.3.0" targetFramework="net47" />

web.config dosyamdan "derleme ekle" etiketini kaldırmak sorunu çözdü.


2

App.config veya web.config'e ekleyin

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="b03f5f7f11d50a3a" culture="neutral"/>
    <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="4.0.0.0"/>
</dependentAssembly>

Bu benim için çalıştı. Bir .NET Core (daha sonra .NET Standard olarak değiştirildi) projesi eklendikten sonra sorun başladı. Referansı kaldırdıktan ve web.config'i sıfırladıktan (ve .NET standardından bahseden diğer yanıtların çoğunu denedikten) sonra bile sorun devam etti.
d219

2

Görünüşe göre bu sorun, packages.config ve app.config arasında sürüm çakışması olduğunda ortaya çıkıyor. App.config dosyasında, "AutoGenerateBindingRedirects" adlı şey tarafından otomatik olarak oluşturulan derleme bağlama yönlendirmelerine sahipsiniz. Nuget paketini her indirdiğinizde etkinleştirildiğinde, packages.config içinde yeni giriş yapmaya ek olarak, bu bağlama yeniden yönlendirme bilgisini app.config dosyasına ekleyin, bunun amacı burada açıklanmaktadır: Assembly Binding yeniden yönlendirmesi: Nasıl ve Neden?

Orada @Evk kullanıcısının yazdıklarını okuyabilirsiniz:

Bağlayıcı yönlendirmeler neden gerekli? Kitaplık B'ye ve ayrıca 1.1.2.5 sürümünün C kitaplığına başvuran A uygulamanız olduğunu varsayalım. Kitaplık B de kitaplık C'ye başvurur, ancak 1.1.1.0 sürümüne aittir. Şimdi bir çatışmamız var çünkü çalışma zamanında aynı derlemenin farklı sürümlerini yükleyemezsiniz. Bu çakışmayı çözmek için, genellikle yeni sürüme bağlama yeniden yönlendirmesi kullanabilirsiniz.

Yani, HIZLI Düzeltme: app.config tüm girdileri kaldırın.

Benim durumumda sadece bu programı yaparak çalışmaya başladı, ancak muhtemelen yalnızca çalışma zamanında aynı derlemenin herhangi bir sürüm çakışması yoksa çalışacaktır.

Böyle bir çakışma yaşıyorsanız, app.config'deki bu sürüm numaralarını montajların gerçekten kullanılan sürümleriyle eşleşecek şekilde düzeltmelisiniz, ancak manuel işlem zahmetlidir, bu nedenle Paket Yöneticisi Konsolu'nu açarak bunları otomatik olarak oluşturmanızı ve yazarak paketleri yeniden yüklemenizi öneririm. Update-Package -reinstall


1

NET 4.6.1 web sitemle birkaç kez bu duruma düştüm. Ayrı bir .NET Core projesine her başvuru eklediğimde sorunu yarattım. Visual Studio oluşturulduktan sonra bu tür çapraz çerçeve referanslarının geçersiz olduğu konusunda beni doğru bir şekilde uyardı ve proje referansını hızla sildim. Proje bundan sonra iyi inşa edildi, ancak System.Runtime hatası web sitesine erişirken ortaya çıktı ve gitmeyi reddetti.

Düzeltme her seferinde kötü ama etkiliydi: Proje dizinini sildim ve kaynak kontrolünden yeniden indirdim. Öncesi ile sonrası arasında bir fark olmasa da projeyi oluşturup sayfaya hiçbir şikayet olmadan ulaşabildim.


1

Nuget Paketini System.Runtimekaldırıp yeniden yükleyerek sorunu çözdüm


1

Aynı problemi olan bir projem vardı, dotnet core versiyonunu 2.2'den 2.0'a değiştirerek çözdüm, probleminiz devam ettiyse, bu çözümü deneyin


1

Birim testlerini çalıştırmadan önce, çalışma zamanı etiketlerini app.config dosyasından kaldırmanız yeterlidir. Sorun çözülecek.


0

VS 2017 15.45'te benzer bir sorun yaşadım - TPL Dataflow nesnelerine erişmeye çalıştığımda, projenin derlenmiş ve çalıştırılmış olmasına rağmen System.Runtime ile ilgili bir system.IO.FileNotFoundException ile geldiğini kontrol ettiğimde buldum.

Çözümdeki projeleri kontrol ettiğimde, bunlardan biri (en üstteki) temeldeki projeler tarafından kullanılan System.Runtime paketini kaçırıyordu. Nuget'ten yükledikten sonra her şey doğru çalıştı.


0

Buradaki tüm çözümleri denedim ama boşuna. Sonunda, yeni csproj dosyasını açarak sorunu çözdüm ve aşağıdaki bölümü manuel olarak ekledim:

<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
</Reference>

0

ASP.Net CORE 2.1 kullanıyorum ve bu hatayı büyük bir depoda yaklaşık 40'lık bir listeden bir .csproj seçerek çalıştırdığımda aldım. Csproj dosyasını tek tek açtığımda, hata çözüldü. Programın nasıl başlatıldığıyla ilgili bir şey csproj açıldığında farklıydı.


0

Bu sorunu .NET 4.7.2 => .NET 4.5.2'den geçip 472'ye geri dönerek çözüyorum. Bu nedenle bazı durumlarda bu hata, paket yöneticisi bağımlılıkları çözemediği için ortaya çıkıyor.


0

Daha önce çalışıyorsa, bir App.config değişikliği olmalıdır. App.config geri al benim için çalıştı.


0

Ben de bu hatayı geçtim ve ondan nasıl kurtulduğumu paylaştım.

Benim durumumda aşağıdaki satır webapi projesinin web.config dosyasında mevcuttu ancak package.config dosyasında paket referansı yoktu.

Webapi Projesinde Web.config dosyasındaki kod

<dependentAssembly>
    <assemblyIdentity name="System.Runtime" publicKeyToken="B03F5F7F11D50A3A" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.1.2.0" newVersion="4.3.0" />
</dependentAssembly>

Web api projesinde packages.config dosyasına eklediğim kod elementi kapatmadan önce.

<package id="System.Runtime" version="4.3.0" targetFramework="net461" />

Benim Durumumda Çalışan Başka Bir Çözüm:

Projeyi küçük farklı paket sürümlerine sahip olabilecek başka bir Bilgisayar sistemine kopyaladığınızda işe yarayabilecek başka bir Sure kısaltması, çalıştırdığınızda web sitesinde / webapi'de hatalı olarak verilen sürüme montaj sürümünü değiştirmeyi deneyebilirsiniz. Bu durumda olduğu gibi, soruda verildiği gibi Sürüm gerekli '4.1.0.0'dır, bu nedenle web.config'deki mevcut sürümü aşağıdaki gibi hata ile gösterilen sürüme değiştirmeyi deneyin.

Hata:

Could not load file or assembly 'System.Runtime, Version=4.1.0.0' or one of its dependencies

Sürüm Değişikliği


0

Azure İşlevi oluştururken bu hatayı yaşadım (bir kuyruk tetikleyicisiyle, fark yaratırsa)

Bu durumda sorun AzureFunctionsVersion, v3 yerine v2 olarak ayarlanmasıydı. VS2019 aracılığıyla güncellemek için, projeyi kaldırın ve ardından csproj dosyasını düzenleyin. PropertyGroupDüğüm içinde aşağıdakileri ekleyin / düzenleyin:

<PropertyGroup>
  <AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>
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.