Visual Studio 2017 - Không thể tải tệp hoặc lắp ráp 'System.Runtime, Version = 4.1.0.0' hoặc một trong các phụ thuộc của nó


103

Tôi đang sử dụng Visual Studio 2017 và đang cố gắng tạo thư viện .Net Standard 1.5 và sử dụng nó trong dự án thử nghiệm .Net 4.6.2 nUnit.

Tôi nhận được lỗi sau...

Không thể tải tệp hoặc lắp ráp 'System.Runtime, Phiên bản = 4.1.0.0, Văn hóa = trung lập, PublicKeyToken = b03f5f7f11d50a3a' hoặc một trong các phụ thuộc của nó. Hệ thống không thể tìm thấy các tập tin được chỉ định.

Tôi đã thử những cách sau:

  1. Tham khảo thư viện Std làm tài liệu tham khảo dự án. Lỗi: cho tôi lỗi trước.
  2. Tạo một pkg NuGet cho thư viện Std của tôi và tham chiếu nó. Lỗi: Loại là System.String, mong đợi System.String. Điều này là do System.Runtime kết thúc được tham chiếu bởi dự án và nó có các định nghĩa cho tất cả các loại tiêu chuẩn.
  3. Tham khảo NuGet pkg NetStandard.Library. Lỗi: cung cấp cho tôi lỗi tương tự như # ("Loại là System.String, mong đợi System.String"). LƯU Ý: Trước khi thực hiện việc này, tôi đã xóa TẤT CẢ các gói NuGet khỏi dự án, sau đó chỉ thêm gói nUnit và NetStandard.Library (đã cài đặt 45 gói khác).

Đây có phải là một lỗi? Có một công việc xung quanh? Bất kỳ trợ giúp được đánh giá cao.

Câu trả lời:


91

Tôi đã gặp vấn đề tương tự và không có giải pháp được đề xuất nào mà tôi thấy hiệu quả. Giải pháp của tôi cho vấn đề này là: Kiểm tra App.config và package.config để xem các phiên bản có khớp nhau không.

Ban đầu app.config của tôi chứa:

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

Nhưng các package.config chứa:

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

Tôi đã sửa đổi mục nhập app.config để phù hợp với package.config cho newVersion:

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

Sau khi thay đổi, sự cố đã được giải quyết.


Hoặc chỉ cần thêm tham chiếu vào web.config của bạn: stackoverflow.com/a/38603514/1145177
Doug S

7
Tôi đã lấy "4.3.0" từ NuGet nhưng vì một số lý do VS khăng khăng rằng tôi tham chiếu "4.1.2.0", công việc tương tự xung quanh chỉ là một số phiên bản khác phù hợp với tôi ...
David Rogers

Tôi đã gặp vấn đề tương tự như @DavidRogers trong dự án MSTest. Việc hợp nhất sự khác biệt giữa app.config và package.config đã giải quyết được vấn đề.
Octoate

vâng, cảm ơn rất nhiều ! Đây là giải pháp cho các bài kiểm tra không tìm thấy MSTest của tôi [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

Giải pháp làm việc cho tôi. Sự cố bắt đầu xảy ra sau khi cài đặt HtmlAgilityPack NUGET. Và sẽ không chạy do thông tin phiên bản không chính xác trong các gói. +1
Roberto

35

Sự cố này xảy ra khi bạn tham chiếu dự án .NET Standard từ một dự án .NET 4.x: không có tham chiếu gói nuget nào của dự án .NET Standard được đưa vào dưới dạng phụ thuộc.

Để khắc phục điều này, bạn cần đảm bảo tệp .NET 4.x csproj của bạn đang trỏ đến các công cụ xây dựng hiện tại (ít nhất là 14):

<Project ToolsVersion="15.0">...

Bên dưới sẽ không còn cần thiết nữa, nó đã được sửa xung quanh VS 15.3:

Có một lỗi đã biết trong VS2017, cụ thể là trong NuGet 4.0.

Để khắc phục lỗi, bạn cần mở tệp .csproj cho dự án .NET 4.x của mình và thêm đoạn mã này:

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

NuGet 4.x mang theo "tham chiếu gói" - không còn package.config - nhưng đường ống 4.x cũ không được cập nhật đầy đủ vào thời điểm ra mắt VS2017. Đoạn mã trên dường như "đánh thức" hệ thống xây dựng để bao gồm chính xác các tham chiếu gói từ các phần phụ thuộc.


Bản cập nhật nào của Visual Studio 17? Bạn có thể chỉ định phiên bản?
Ronak Agrawal

11
Tôi vẫn gặp sự cố trong 15.5.5 VS2017. Có vẻ như có những nguyên nhân khác.
SerG

Câu hỏi: dự án .NET 4.x của bạn có đang sử dụng tham chiếu gói không hay vẫn đang sử dụng package.config? Tôi tự hỏi liệu lý do điều này xuất hiện đã được khắc phục cho tôi là tôi đã loại bỏ package.config.
Cory Nelson

2
Cần lưu ý rằng Visual Studio 2017 Phiên bản 15.7 trở lên hỗ trợ di chuyển một dự án từ định dạng quản lý package.config sang định dạng PackageReference. docs.microsoft.com/en-us/nuget/reference/…
yên tĩnh

@tranquiltarn từ liên kết của bạn: "Di chuyển hiện không khả dụng cho các dự án C ++ và ASP.NET."
JP Hellemons

34

Tôi gặp phải vấn đề này gần đây và tôi đã thử nhiều thứ được đề cập trong chủ đề này và những thứ khác. Tôi đã thêm tham chiếu gói cho "System.Runtime"bởi trình quản lý gói nuget, sửa lỗi redicts liên kết trong app.configvà đảm bảo rằng app.configpackage.configcó cùng phiên bản cho assembly. Tuy nhiên, vấn đề vẫn tồn tại.

Cuối cùng, tôi đã xóa <dependentAssembly>thẻ cho lắp ráp và vấn đề đã biến mất. Vì vậy, hãy thử xóa phần sau trong của bạn 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>

Chỉnh sửa: Sau khi tôi cập nhật .NET framework lên 4.7.2, sự cố lại xuất hiện. Tôi đã thử thủ thuật trên nhưng nó không hoạt động. Sau nhiều giờ lãng phí, tôi nhận ra sự cố đang xảy ra do một System.Linqtham chiếu cũ trong app.config. Do đó, hãy xóa hoặc cập nhật tất cả các tham chiếu Linq cũng để loại bỏ vấn đề này.


4
Bất cứ khi nào tôi gặp sự cố do OP chỉ định, tôi xóa thông tin System.Runtime trong tệp .config và điều này giải quyết được nó. Tôi đồng ý với bạn rằng đây là một giải pháp hợp lệ tiềm năng. Nó có xu hướng xảy ra với tôi khi tôi thêm một gói từ nuget.
Wallace B. McClure

Đã làm cho tôi. Tôi đã gặp lỗi xunit System.IO.FileNotFoundException: Could not load file or assembly 'System.Runtime, Version=4.1.2.0sau khi nâng cấp các dự án của mình lên 4.7.2
Anton Krshlov 10/12/18

Dựa trên câu trả lời của bạn tôi đã kiểm tra gói NuGet của tôi và thấy nhu cầu 'Google.protobuf' (Củng cố) giữa các dự án của tôi, thnx
Osama_Almaani

28

Hãy tin tôi, tôi không nói đùa. Xóa tất cả các phụ thuộc System.Runtime khỏi app.config của bạn và nó sẽ bắt đầu hoạt động.


9
Một lời giải thích tốt hơn về lý do tại sao điều này sẽ hữu ích.
Dour High Arch

Vấn đề với phương pháp này là, bất cứ khi nào bạn cập nhật bất kỳ gói nuget nào hoặc thêm gói nuget mới, nó sẽ được thêm lại.
Rung động

16

Tôi đã giải quyết lỗi đó bằng cách tham chiếu NetStandard.Library và tệp app.config sau trong NUnit-Project.

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

Biên tập

Nếu bất kỳ điều gì khác hơn System.Runtime, System.Reflectionhoặc System.Runtime.InteropServicesbị thiếu (ví dụ System.Linq), thì chỉ cần thêm một dependentAssemblynút mới .

Chỉnh sửa 2

Trong các phiên bản Visual Studio mới (tôi nghĩ là 15.8 2017), có thể Studio tạo Tệp app.config. Chỉ cần đánh dấu vào Hộp kiểm Tự động tạo chuyển hướng ràng buộc trong Thuộc tính dự án - Ứng dụng . Tự động tạo chuyển hướng ràng buộc

Chỉnh sửa 3

Tự động tạo chuyển hướng ràng buộc không hoạt động tốt với Thư viện lớp .NET. Thêm các dòng sau vào tệp csproj sẽ giải quyết được vấn đề này và tệp .config đang hoạt động cho Classlibary sẽ được tạo.

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

11
Thật kỳ lạ, tôi đã khắc phục sự cố cho mình bằng cách xóa tất cả <dependentAssembly>các nút cho System.Runtime ..
Matt Brewerton 27/02

@MattBrewerton đã xác nhận!
Bart De Boeck

13

Tôi đã sửa nó bằng cách xóa app.configbằng

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

mục.

app.config đã được thêm tự động (nhưng không cần thiết) trong quá trình tái cấu trúc


Điều này đã làm việc cho tôi! Chắc chắn thử này nếu tất cả các mặt hàng khác không làm việc ra cho bạn
bOkeifus

3

Sự cố này xảy ra khi bạn tham chiếu dự án .NET Standard từ một dự án .NET 4.x: không có tham chiếu gói nuget nào của dự án .NET Standard được đưa vào dưới dạng phụ thuộc.

Tôi đã giải quyết bằng cách thêm 4.3gói System.Runtime và NETStandard.Library và !! quan trọng !! Tôi sử dụng công cụ tái cấu trúc để tra cứu phiên bản System.Runtime.dll, Nó 4.1.1.1không phải 4.3và sau đó thêm một bindRedirect trong .config

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

3

Tôi biết thì đã quá muộn, dù sao vẫn không có câu trả lời thành công. Tôi đã tìm thấy câu trả lời từ một trang web khác. Tôi đã khắc phục sự cố khi xóa sự phụ thuộc lắp ráp System.Runtime. Tôi đã xóa cái này.

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

Trân trọng


2

Tôi đã gặp sự cố với điều này trong một dự án NUnit 2.6.4 nhắm mục tiêu khung dotnet 4.6.2. Tôi đã gặp phải System.Runtime FileNotFoundlỗi đó khi cố gắng sử dụng Humanizer .

Tôi đã sửa lỗi của mình bằng cách cài đặt NetStandard.Library vào dự án thử nghiệm đơn vị của mình.


2

Chúng tôi đã phát hiện ra rằng AutoGenerateBindingRedirectscó thể gây ra sự cố này.

Đã quan sát: nhắm mục tiêu cùng một dự án net45netstandard1.5được tạo thành công trên một máy và không tạo được trên máy kia. Các máy đã cài đặt các phiên bản khác nhau của khung (4.6.1 - thành công và 4.7.1 - thất bại). Sau khi nâng cấp khung trên máy đầu tiên lên 4.7.1, bản dựng cũng không thành công.

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 redirectslà một tính năng của .net 4.5.1. Bất cứ khi nào nuget phát hiện ra rằng dự án đang tham chiếu chuyển tiếp các phiên bản khác nhau của cùng một assembly, nó sẽ tự động tạo tệp cấu hình trong thư mục đầu ra chuyển hướng tất cả các phiên bản đến phiên bản yêu cầu cao nhất.

Trong trường hợp của chúng tôi, nó đã gắn kết tất cả các phiên bản của System.Runtimethành Version=4.1.0.0. .net 4.7.1gửi với một 4.3.0.0phiên bản thời gian chạy. Vì vậy, ràng buộc chuyển hướng đang ánh xạ tới một phiên bản không có sẵn trong phiên bản khung hiện đại.

Sự cố đã được khắc phục bằng cách tắt chuyển hướng liên kết tự động cho mục tiêu 4.5 và chỉ để lại nó cho lõi .net.

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

2

Sự cố này có nhiều nguyên nhân ... trong trường hợp của tôi, sự cố là trong web.config của tôi một thẻ thêm cụm System.Runtime:

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

nhưng một gói cũng đã thêm assembly giống như phụ thuộc với phiên bản khác:

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

xóa thẻ "thêm lắp ráp" khỏi web.config của tôi đã giải quyết được sự cố.


2

Có vẻ như sự cố được gây ra khi có xung đột phiên bản giữa package.config và app.config. Trong app.config, bạn có các chuyển hướng liên kết lắp ráp được tạo tự động bởi thứ gọi là "AutoGenerateBindingRedirects". Khi được bật mỗi khi bạn tải xuống gói nuget, nó sẽ bổ sung cho việc tạo mục nhập mới trong package.config, thêm thông tin chuyển hướng ràng buộc này vào app.config, mục đích của việc này được giải thích ở đây là gì: Assembly Binding redirect: How and Why?

Ở đó, bạn có thể đọc những gì người dùng @Evk đã viết:

Tại sao chuyển hướng ràng buộc lại cần thiết? Giả sử bạn có ứng dụng A tham chiếu đến thư viện B và cả thư viện C của phiên bản 1.1.2.5. Thư viện B cũng tham chiếu đến thư viện C, nhưng thuộc phiên bản 1.1.1.0. Bây giờ chúng ta có một xung đột, vì bạn không thể tải các phiên bản khác nhau của cùng một assembly trong thời gian chạy. Để giải quyết xung đột này, bạn có thể sử dụng chuyển hướng ràng buộc, thường là phiên bản mới

Vì vậy, KHẮC PHỤC NHANH: Xóa tất cả các mục trong app.config.

Trong trường hợp của tôi, chỉ cần thực hiện chương trình đó đã bắt đầu hoạt động, nhưng nó có thể sẽ hoạt động chỉ khi bạn không có bất kỳ xung đột phiên bản nào của cùng một hội đồng trong thời gian chạy.

Nếu bạn có xung đột như vậy, bạn nên sửa các số phiên bản này trong app.config để khớp với các phiên bản lắp ráp được sử dụng thực sự, nhưng quá trình thủ công rất khó khăn, vì vậy tôi khuyên bạn nên tự động tạo lại chúng bằng cách mở Bảng điều khiển trình quản lý gói và thực hiện cài đặt lại gói bằng cách nhập Update-Package -reinstall


1

Tôi đã gặp phải tình huống này vài lần với trang web .NET 4.6.1 của mình. Tôi đã tạo ra sự cố mỗi lần khi tôi thêm tham chiếu đến một dự án .NET Core riêng biệt. Khi xây dựng, Visual Studio đã cảnh báo tôi một cách chính xác rằng các tham chiếu khung chéo như vậy không hợp lệ và tôi đã nhanh chóng xóa tham chiếu dự án. Dự án được xây dựng tốt sau đó, nhưng lỗi System.Runtime xuất hiện khi truy cập trang web và không chịu biến mất.

Bản sửa lỗi mỗi lần đều khập khiễng nhưng có hiệu quả: Tôi đã xóa thư mục dự án và tải lại nó từ kiểm soát nguồn. Mặc dù không có sự khác biệt giữa trước và sau, tôi vẫn có thể xây dựng dự án và truy cập trang mà không có khiếu nại.


1

Vừa mới bắt đầu làm việc này trong một dự án Unit Test sau khi thêm MsTest V2 thông qua Nuget. Đổi tên app.config (rất hiệu quả để loại bỏ nó) đã thực hiện thủ thuật cho tôi.

Đã đọc qua tất cả các bài viết trên, tôi vẫn không hiểu tại sao, xin lỗi!


1

Tôi đã khắc phục sự cố bằng cách xóa Gói Nuget System.Runtimevà sau đó cài đặt lại nó


1

Thêm vào app.config hoặc web.config

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

1

Tôi đã có một dự án với vấn đề tương tự, tôi đã giải quyết nó bằng cách thay đổi phiên bản lõi dotnet từ 2.2 thành 2.0, Nếu vấn đề của bạn vẫn còn, hãy thử giải pháp này


1

Trước khi chạy các bài kiểm tra đơn vị, chỉ cần xóa các thẻ thời gian chạy khỏi tệp app.config. Vấn đề sẽ được giải quyết.


0

Tôi đã gặp sự cố tương tự trong VS 2017 15.45 - Tôi phát hiện ra khi kiểm tra rằng mặc dù dự án đã biên dịch và chạy nó vẫn đi kèm với system.IO.FileNotFoundException liên quan đến System.Runtime khi tôi cố gắng truy cập các đối tượng TPL Dataflow.

Khi tôi kiểm tra các dự án trong giải pháp, một trong số chúng (cái trên cùng) bị thiếu gói System.Runtime được sử dụng bởi các dự án bên dưới. Sau khi tôi cài đặt nó từ Nuget, tất cả đều hoạt động bình thường.


0

Tôi đã thử tất cả các giải pháp ở đây, nhưng không có kết quả. Cuối cùng, tôi đã giải quyết được bằng cách mở tệp csproj mới và thêm phần sau theo cách thủ công:

<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

Tôi đang sử dụng ASP.Net CORE 2.1 và tôi gặp lỗi này khi chạy bằng cách chọn .csproj từ danh sách khoảng 40 trong một repo lớn. Khi tôi mở tệp csproj riêng lẻ, lỗi đã được giải quyết. Có điều gì đó với cách khởi chạy chương trình đã khác khi csproj được mở.


0

Tôi giải quyết vấn đề này bằng cách chuyển từ .NET 4.7.2 => .NET 4.5.2 và sau đó chuyển về 472. Vì vậy, trong một số trường hợp, lỗi này xảy ra do trình quản lý gói không thể giải quyết sự phụ thuộc


0

Nếu nó hoạt động trước đây, thì sẽ có một thay đổi trong App.config. Hoàn tác App.config đã làm việc cho tôi.


0

Tôi cũng đã trải qua lỗi này và chia sẻ cách tôi thoát khỏi nó.

Trong trường hợp của tôi, dòng dưới đây tồn tại trong web.config của dự án webapi nhưng không có tham chiếu gói trong tệp package.config.

Mã trong Web.config trong Dự án Webapi

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

Mã Tôi đã thêm vào tệp package.config trong dự án api web Trước khi đóng phần tử.

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

Một giải pháp khác đã hoạt động trong trường hợp của tôi:

Một đoạn ngắn Chắc chắn khác có thể hoạt động trong trường hợp bạn sao chép dự án sang một hệ thống Máy tính khác có thể có các phiên bản gói nhỏ khác nhau mà bạn có thể thử thay đổi phiên bản lắp ráp thành phiên bản được đưa ra do lỗi trên trang web / webapi khi bạn chạy nó. Giống như trong trường hợp này như được đưa ra trong câu hỏi Phiên bản cần thiết là '4.1.0.0', vì vậy chỉ cần thử thay đổi phiên bản hiện tại trong web.config thành phiên bản được hiển thị trong lỗi như bên dưới

Lỗi:

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

Phiên bản CHange


0

Tôi đã gặp lỗi này khi tạo Hàm Azure (với trình kích hoạt hàng đợi, nếu nó tạo ra sự khác biệt)

Vấn đề trong trường hợp này là do AzureFunctionsVersionđược đặt thành v2 thay vì v3. Để cập nhật nó qua VS2019, hãy dỡ bỏ dự án rồi chỉnh sửa tệp csproj. Trong PropertyGroupnút, thêm / chỉnh sửa những điều sau:

<PropertyGroup>
  <AzureFunctionsVersion>v3</AzureFunctionsVersion>
</PropertyGroup>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.