2016-07-06 24 views
13

Tôi khá mới đối với .Net Core, nhưng đã tạo một trang web Asp.Net Core WebAP làm việc - bây giờ tôi muốn chia sẻ một số mã với một mã khác project ...Một thư viện lớp phổ biến được tiêu thụ bởi cả .NET Core và .Net 4.5.2

  • Tôi đã cài đặt Visual Studio 2015 với Update 3.
  • Tôi có DotNetCore.1.0.0-VS2015Tools.Preview2.exe được cài đặt từ here.

Tôi muốn tạo một thư viện chia sẻ (PCL) có thể được sử dụng bởi hai thư viện khác - nó chỉ chứa các lớp/giao diện nguyên thủy không có phụ thuộc khác. Một trong những thư viện tiêu thụ là một dự án vani mới nhắm mục tiêu "netstandard1.6", thư mục kia là một thư viện máy khách cũ nhắm mục tiêu .Net 4.5.2 (Tôi có thể nâng cấp lên 4.6.x nếu tôi phải).

Tôi đã tròn trong vòng tròn, và tôi không thể làm tài liệu tham khảo thư viện netstandard1.6 PCL - Tôi chỉ đươc nghe các loại đang thiếu:

Lỗi CS0246: Loại hoặc namespace tên 'SomeTypeHere' không thể được tìm thấy (là bạn thiếu một chỉ thị sử dụng hoặc tham khảo một hội?)

Các PCL có tên là "ClassLibrary1" 's project.json được tự động tạo ra như:

{ 
    "supports": {}, 
    "dependencies": { 
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1", 
    "NETStandard.Library": "1.6.0" 
    }, 
    "frameworks": { 
    "netstandard1.1": {} 
    } 
} 

Thư viện tiêu thụ của tôi project.json là:

{ 
    "version": "1.0.0-*", 
    "dependencies": { 
    "NETStandard.Library": "1.6.0", 
    "Newtonsoft.Json": "9.0.1" 
    }, 
    "frameworks": { 
    "netstandard1.6": { 
     "dependencies": { 
     "ClassLibrary1": { 
      "target": "project" 
     } 
     } 
    } 
    } 
} 

Tôi có thể thực hiện công việc này bằng cách nào?

EDIT 2016/07/07:

tôi đã thực hiện các giải pháp sau đây có sẵn, mà chứng minh thiết lập của tôi: https://github.com/JonnyWideFoot/netcore-prototype Xem ExperimentClient :: GetLocationAsync cho nơi tôi muốn sử dụng các hợp đồng thư viện trong Net 4.5.2/4.6.x Khách hàng.

+0

FYI - chúng không còn được gọi là PCL nữa với sự ra đời của .NET Core :) –

Trả lời

1

Cách duy nhất tôi tìm thấy để thực hiện công việc này là hack tài liệu tham khảo.tập tin csproj của thư viện Chủ đầu tư: https://github.com/JonnyWideFoot/netcore-prototype/blob/master/src/JE.API.Experiment.Client/JE.API.Experiment.Client.csproj

<Reference Include="JE.Api.Experiment.Contract, Version=1.0.0.0, Culture=neutral, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>..\JE.Api.Experiment.Contract\bin\$(Configuration)\net452\JE.Api.Experiment.Contract.dll</HintPath> </Reference>

By cứng mã hóa đường dẫn đến thư mục đầu ra đúng từ thư viện hợp đồng, tất cả đều tốt.

... nghĩ đây có thể là lỗi trong studio trực quan.

4

Đây là cách tôi tạo các thư viện có thể được tiêu thụ từ cả hai dự án cốt lõi .NET và .NET 4.5 dự án chia sẻ:

SharedLibrary \ project.json

"dependencies": { }, 
"frameworks": { 
    "net45": { }, 
    "netstandard1.1": { 
    "dependencies": { 
     "NETStandard.Library": "1.6.0" 
    } 
    } 
}, 
"version": "1.0.0" 

Một tiêu thụ (NET lõi) thư viện trong cùng một giải pháp tham khảo nó như thế này:

"dependencies": { 
    "SharedLibrary": { 
    "target": "project", 
    "version": "1.0.0" 
    } 
}, 
"frameworks": { 
    "netstandard1.1": { } 
    } 
} 

Dự án tiêu thụ .NET 4.5 sử dụng project.json sẽ giống nhau ngoại trừ net45 trong phần khung công tác. Cài đặt trong một dự án .NET 4.5 dựa trên csproj cũng hoạt động, nếu một gói NuGet cho SharedLibrary được tạo ra.

Theo .NET Platform Standard docs, chỉ cần nhắm mục tiêu netstandard1.1 cũng nên cho phép thư viện được chia sẻ cũng được cài đặt trong các dự án .NET 4.5+. Tôi đã gặp phải các vấn đề lạ với điều đó, nhưng nó có thể là kết quả của công cụ beta.

+0

Cảm ơn! - Hiện tại, tôi đã có mặt 'chuẩn net' đang hoạt động, nhưng vẫn gặp sự cố khi tham chiếu dự án Chia sẻ từ máy khách .Net 4.5.2. { "phụ thuộc": {}, "khuôn khổ": { "net452": {}} , "phiên bản": "1.0.0" } tôi tham khảo dự án trong visual studio (cả các thư viện nằm trong cùng một giải pháp) và tôi nhận được "lỗi CS0234". Tuy nhiên, thư viện được chia sẻ HAS đã tạo ra một tệp .Net 4.5.2 dll. kỳ lạ nếu tôi tham khảo trực tiếp, mọi thứ đều hoạt động. –

+0

Khi tham chiếu dự án thay vì DLL, đường dẫn gợi ý trong cửa sổ thuộc tính là chính xác: \ ClientLib \ bin \ Debug \ net452 \ SharedLib.dll Tất cả rất lạ ... Làm thế nào để M $ thực hiện công cụ này SO phức tạp . .Net được sử dụng để đơn giản :-( –

+0

@JonRea: Để làm rõ - bạn có đang tham chiếu dự án được chia sẻ từ dự án .NET 4.5.2 dựa trên 'project.json' hoặc dựa trên' csproj'? –

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