2017-03-10 17 views
5

Tôi có một ứng dụng Bảng điều khiển lõi đơn giản .Net tham chiếu dự án .Net Framework 4.6.2 trong cùng một giải pháp. Khi tôi xây dựng, tôi nhận được lỗi sau:Gọi một hội đồng .Net Framework 4 (hoặc Mono) từ ứng dụng .Net Core

error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

Tôi đang cố gắng làm điều gì đó không được phép?

Có cách nào để tham chiếu một .Net Framework 4.6 (hoặc Mono) lắp ráp (hoặc P/Gọi nó) từ một ứng dụng .Net Core?

Sử dụng Visual Studio 2017, .Net Core 1.1

Trả lời

7

Trong .NET Core 1.x, bạn không được phép tham chiếu một hội đồng .NET Framework 4.6 (hoặc Mono). .NET Core 1.x và .NET Framework là 2 thời gian chạy khác nhau và các kiểu của chúng không pha trộn - như thông báo lỗi xây dựng nói.

Thay vào đó, những gì bạn có thể làm là biên dịch lại cụm từ .NET Framework 4.6 nhắm mục tiêu "Tiêu chuẩn .NET". Read more about .NET Standard. Biên dịch một thư viện cho .NET Standard cho phép thư viện đó chạy trên .NET Framework, Mono hoặc .NET Core. Một tùy chọn khác là đa mục tiêu mà hội đồng .NET Framework 4.6, do đó, nó xây dựng cả cho .NET Framework 4.6 và cho .NET Core 1.1. Bạn chỉ nên thực hiện điều này nếu các API mà thư viện của bạn yêu cầu không được .NET Standard hỗ trợ. Câu trả lời này gần giống với câu trả lời của @ VMAtm, nhưng bạn có thể làm điều đó với một .csproj duy nhất trong VS 2017.

Tin tốt là, những gì bạn đang cố gắng thực hiện sẽ được hỗ trợ trên .NET Core 2.0, slated for release later this year.

+1

Tôi không thấy bất kỳ đề cập nào trong liên kết mà bạn cung cấp về tham chiếu .Net Framework assembly from .Net core . Bạn có thể đặc biệt chỉ ra nó nếu tôi nhìn nó? Ngoài ra, có cách nào, hiện tại, để P/Invoke (hoặc tương đương) hội đồng .Net Framework từ ứng dụng .Net Core. (giả sử tôi chỉ có một nhị phân cho hội đồng .Net Framework)? – Verax

+1

The.Liên kết tiêu chuẩn NET ở trên liên kết đến [giới thiệu net tiêu chuẩn blog] (https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/). Trong bài đăng đó 'tính năng tương thích này cung cấp cầu nối cho phép bạn chuyển đổi thư viện của mình thành .NET Standard mà không phải từ chối tham chiếu các thư viện hiện có chưa được chuyển đổi.' Không, không có cách nào để tải/chạy mà NET Framework lắp ráp trên .NET Core 1.1, như không có "tương thích shim" trong .NET Core 1.1. –

+0

"Tin tốt là, những gì bạn đang cố gắng làm sẽ được hỗ trợ trên .NET Core 2.0, dự kiến ​​sẽ phát hành vào cuối năm nay." Tôi không thấy gì trong Lộ trình tuyên bố rằng khả năng này sẽ được thêm vào 2.0. Bạn có thể trích dẫn một nguồn không? EDIT: Nevermind, tôi nhìn thấy nó ngay bây giờ. – Verax

1

.Net Core và .Net 4.0 có các thư viện lõi khác nhau. Loại System.Object từ thư viện .Net cũ được xác định trong mscorlib, rõ ràng chưa được tham chiếu.

Nếu bạn tham khảo thư viện đó, bạn có thể sẽ nhận được lỗi giải quyết tên, vì cùng loại sẽ được xác định trong cùng một không gian tên và có cùng tên loại trong các thư viện khác nhau. Vì vậy, có, điều này là không được phép.

Chỉnh sửa: Tuy nhiên, có một cách tiếp cận chung được gọi là Shared project, bạn có thể đọc về nó here. Cũng quaestion này có thể hữu ích cho bạn:

.net core classlibrary calling .net framework class library

Ngoài ra bạn có thể cố gắng tạo ra một thư viện lớp cầm tay, có thể được tham chiếu hoặc từ Net Core và Net 4.6 thư viện.

Portable class libraries are great when your common code is platform-independent as well as for reusable libraries where the platform-specific code can be factored out.

Chỉnh sửa # 2: Như @EricErhardt đề cập, bạn có thể biên tập lại thư viện Net 4.6 của bạn với nhắm mục tiêu khác nhau, có thể không phải là một lựa chọn nếu bạn không có một mã nguồn.

+1

Tôi thực sự không quan tâm đến việc chia sẻ mã (mặc dù thử nghiệm của tôi có thể ngụ ý như vậy). Tôi muốn gọi một hội đồng .Net Framework từ một ứng dụng .Net Core. Tôi vẫn đang tìm kiếm một câu trả lời cho câu hỏi này: Có cách nào để tham khảo một .Net Framework 4.6 (hoặc Mono) lắp ráp (hoặc P/Gọi nó) từ một ứng dụng .Net Core? – Verax

+0

Bạn đã xem bài viết tôi đã liên kết chưa? – VMAtm

+0

Vâng, tất nhiên tôi đã thấy nó, và giải pháp của họ là chia sẻ mã, mà không phải thứ tôi quan tâm. – Verax

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