Tôi đang tạo thư viện có thể tái sử dụng nhắm vào một số nền tảng (.NET 4.0, .NET 4.5, .NETStandard 1.0 và .NETStandard 1.3). Phiên bản .NET 4.5 của dự án này chứa một số tính năng không có sẵn trong phiên bản .NET 4.0.Cách để cho Visual Studio 2015 xproject (project.json) tham khảo khung cao nhất của một dự án phụ thuộc
Dự án thử nghiệm đơn vị tham khảo dự án thư viện này có một nền tảng đích duy nhất, cụ thể là NET 4.5.1. Dự án thử nghiệm này rõ ràng chứa một số mã kiểm tra các tính năng .NET 4.5 cụ thể của thư viện lõi.
Thật không may, dự án thử nghiệm không biên dịch, vì Visual Studio dường như tham chiếu phiên bản .NETStandard 1.0, rõ ràng là không chứa tính năng này.
Để chứng minh vấn đề của tôi, tôi giảm này với hai dự án sau:
Lõi thư viện:
{
"version": "1.0.0-*",
"frameworks": {
"netstandard1.0": {
"dependencies": {
"NETStandard.Library": "1.6.0"
}
},
"net40": {},
"net45": {}
}
}
Mã file:
namespace CoreLibrary
{
#if NETSTANDARD1_0
public class ClassNetStandard { }
#endif
#if NET40
public class ClassNet40 { }
#endif
#if NET45
public class ClassNet45 { }
#endif
}
Kiểm tra thư viện:
{
"version": "1.0.0-*",
"dependencies": {
"CoreLibrary": { "target": "project" }
},
"frameworks": {
"net451": {}
}
}
Code:
// This compiles
new CoreLibrary.ClassNetStandard();
// This doesn't.
// error: Type or namespace 'ClassNet40' does not exist in namespace 'CoreLibrary'
new CoreLibrary.ClassNet40();
// error: Type or namespace 'ClassNet45' does not exist in namespace 'CoreLibrary'
new CoreLibrary.ClassNet45();
Những gì tôi nên thay đổi để cho phép dự án thử nghiệm đơn vị của tôi để biên dịch và kiểm tra NET 4.5 tính năng cụ thể?
Trong trường hợp của tôi (với hai dự án chính xác bạn đã cung cấp), Thư viện kiểm tra thực sự biên dịch với "CoreLibrary.ClassNet45() mới"; và _not_ biên dịch với "new CoreLibrary.ClassNetStandard();". Vì vậy, như bạn mong đợi. Bạn chắc chắn nó thực sự không hoạt động với ClassNet45 trong trường hợp của bạn? Bởi vì nó có thể cho thấy có lỗi trong cửa sổ "lỗi" trong Visual Studio, nhưng vẫn thực sự biên dịch thành công. – Evk
@Evk: Bạn nói đúng. Mặc dù cả IDE và Danh sách Lỗi đều hiển thị lỗi, assembly không được biên dịch vào thư mục bin \ Debug \ net451. Sau khi kiểm tra hội đồng này với Resharper, nó hoạt động. Kết luận: Visual Studio Tooling hút. – Steven
Hãy thử cài đặt phiên bản mới nhất của các công cụ .NET Core cho VS 2015 tại đây: https://www.microsoft.com/net/core#windowsvs2015. Điều này thực sự giải quyết điều này cho tôi (không có lỗi giả nào nữa). – Evk