2017-10-20 54 views
11

Tôi có ứng dụng web nhắm mục tiêu ban đầu 4.6.1. Ứng dụng web này tham chiếu thư viện lớp; lần lượt, điều này tham chiếu một thư viện lớp chuẩn Net 1.6.Lỗi tham chiếu Tiêu chuẩn thuần từ mạng 4.6.1/4.7

Thêm tham chiếu vào thư viện chuẩn Net là thay đổi mới nhất và dường như đã khiến ứng dụng bị hỏng: ứng dụng web hoạt động tốt cho đến khi thư viện Net Standard được giới thiệu; tại thời điểm đó, tôi bắt đầu gặp lỗi:

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.Runtime được bao gồm trong gói NuGet trong ứng dụng web.

Nó có thể không liên quan, nhưng khi tôi nhìn vào thư mục gói; Tôi thấy System.Runtime.4.3.0 \ lib có các thư mục net45net462, nhưng không phải 4.6.1 hoặc 4.7 (xem dưới đây để biết tại sao tôi mong đợi điều này).

Một số điều mà tôi đã cố gắng mà vẫn chưa làm việc:

  • Mặc dù thấy here rằng 4.6.1 hỗ trợ Net Std 1.6, tôi đã cố gắng nâng cấp lên 4.7, nhưng vô ích.
  • Đã cố gắng thiết lập chuyển hướng lắp ráp trong web.config. Điều này thay đổi lỗi một chút để nói rằng nó đang tìm kiếm 4.0.0.0 và sau đó lại trực tiếp đá vào, nhưng nó về cơ bản là cùng một lỗi.
  • Đã cố gắng xóa thư mục gói, để xem liệu tôi có thể bắt buộc làm mới (cũng đã cố gắng Cập nhật gói trên System.Runtime) hay không.
  • Khi tìm kiếm trên web, tôi đã tìm thấy một số vấn đề tương tự; một trên GitHub (mà tôi dường như không thể di dời) ngụ ý rằng bản cập nhật cho VS2017 sẽ khắc phục được vấn đề.

Có đủ nội dung gần đây trên web khiến tôi nghĩ rằng tôi không phải là người duy nhất trải nghiệm điều này; mặc dù tôi không tìm thấy bất kỳ lời giải thích nào về nguyên nhân có thể là gì. Bất cứ ai có thể cung cấp một lời giải thích như những gì có thể gây ra điều này, hoặc bất kỳ bước chẩn đoán mà tôi có thể sử dụng?

+0

Bạn đang sử dụng phiên bản studio trực quan nào? –

+0

Visual Studio 2017 (15.4.1) –

+0

Có thể bạn có thể tạo dự án tối thiểu để tái tạo và xuất bản nó ở đâu đó? – Evk

Trả lời

2

Tài liệu tiêu chuẩn .NET herehere có thông tin xung đột khi nói đến .NET Framework. Tôi nghi ngờ thứ hai là mới nhất.

Về cơ bản, nó chỉ ra rằng .NET Framework không được hỗ trợ trên .NET Standard 1.6 trừ khi bạn đã cài đặt .NET Core 2.0 SDK.

Hoặc, .NET Standard 1.5 trở xuống được hỗ trợ với .NET Core 1.0 SDK được cài đặt.

+0

Tôi đang/đang chạy trên Net Core 2.0 SDK - vì vậy đó không phải là nguyên nhân gây ra sự cố. –

0

Điều đáng nói là NuGet sẽ cài đặt phiên bản khung mới nhất tại hoặc dưới khung mục tiêu của dự án của bạn. Điều này có nghĩa là khi nó đang nhắm mục tiêu 4.6.1, phiên bản được tham chiếu sẽ là net45 hoặc 4.5 sẽ giảm tất cả các bạn xuống Net Standard 1.1.

Trong lý thuyết nâng cấp lên 4,7 thì có nghĩa là nó tham chiếu net462 nhưng có thể là do cạnh chảy máu nên không phải mọi thứ đều hoạt động bình thường. Bạn đã cố gắng cập nhật lên 4.6.2 chưa?

0

Sau một quá trình chuyển đổi dài, tôi mô tả here Tôi có kinh nghiệm: bạn phải cài đặt gói NuGet NETStandard.Library cũng trong dự án chính của bạn (trong webapp .net 4.6.1). Nó sẽ cài đặt rất nhiều gói.

Tôi sử dụng NETStandard.Library version 1.6.1.

Nếu bạn sử dụng System.Runtime.Serialization trong mã netstandard của mình, bạn phải cài đặt System.Runtime.Serialization.Primitives và System.Runtime.Serialization.Xml hoặc .Json trong dự án chính, quá.

Và tất cả các tài liệu tham khảo khác của dự án chuẩn cũng phải được tham chiếu trong dự án chính.

3

Tôi đã gặp sự cố tương tự và tôi đã giải quyết vấn đề này bằng cách xóa tham chiếu System.Runtime khỏi dự án và cài đặt nó qua Nuget (Tương thích chuẩn Net). Nó không phải là gói duy nhất có vấn đề (ví dụ khác, System.Net.Http). Ngoài ra, nếu bạn có nhiều dự án trong giải pháp của mình, bạn nên cài đặt Net Standard trên mỗi một dự án.

Các vấn đề liên quan