2017-01-06 29 views
6

Tôi có một chương trình mà tôi đang cố di chuyển sang .NET Standard/Core. Giao diện dòng lệnh vào thư viện được xây dựng với một khung mục tiêu của netcoreapp1.0. Tôi đã thử gửi này đến một thử nghiệm (với một hệ điều hành khác nhau) những người chỉ có NET Core 1.1 cài đặt. Chương trình sẽ không chạy và cung cấp lỗi:Ứng dụng .NET Core 1.0 sẽ không chạy trên hệ thống .NET Core 1.1

The specified framework 'Microsoft.NETCore.App', version '1.0.1' was not found. 
- Check application dependencies and target a framework version installed at: 
    /usr/share/dotnet/shared/Microsoft.NETCore.App 
- The following versions are installed: 
    1.1.0 
- Alternatively, install the framework version '1.0.1'. 

Đây có phải là dự kiến ​​không? Như tôi đã hiểu, mỗi phiên bản Core/Standard là một phiên bản cực kỳ nghiêm ngặt của phiên bản trước đó. Như vậy, tôi dự kiến ​​một chương trình nhắm mục tiêu 1.0 sẽ vẫn chạy trên một hệ thống có 1.1, thay vì phải nhắm mục tiêu đa mọi phiên bản cài đặt.

Nói chung, làm cách nào để tôi có thể thiết lập mọi thứ để tôi không phải lo lắng về việc người dùng đến sau này chỉ với phiên bản .NET Core mới hơn không thể chạy chương trình?

+3

'1.1.0'! =' 1.0.1' –

Trả lời

2

Bạn cần hiểu thêm một vài khái niệm.

  1. Ứng dụng .NET Core trở nên độc lập nếu bạn sử dụng dotnet publish đúng cách. Sau đó, trên một máy tính mục tiêu mà không có .NET Core được cài đặt (hoặc không phải là phiên bản nó xây dựng chống lại) các ứng dụng có thể chạy mà không có vấn đề. Dựa trên mô tả của bạn, bạn có thể quên làm như vậy hoặc bạn không cố gắng xuất bản ứng dụng này.

  2. Nếu ý định của bạn chỉ là di chuyển mã .NET Core 1.0.1 sang máy khác và máy chỉ cài đặt 1.1.0, bạn có thể chạy tập lệnh dotnet-install để cài đặt thời gian chạy yêu cầu,

https://docs.microsoft.com/en-us/dotnet/articles/core/preview3/tools/dotnet-install-script

Vì bạn đang sử dụng Visual Studio 2017 RC đã có, bạn nên biết rằng NET lõi 1.0.x bây giờ sẽ được 1.0.3. Hỗ trợ cho phiên bản 1.0.0-1.0.2 đã hết hạn.

+0

1.0.1 là mặc định cho công cụ preview4, là phiên bản duy nhất của SDK để hỗ trợ các dự án .proproj tại thời điểm này (preview3 không khả dụng nữa). May mắn thay tôi đã thấy rằng preview4 vẫn có thể xây dựng 1.1.0 (cũng như 1.0.3, vv, bằng cách sử dụng gói nuget phù hợp), và thông qua một số thí nghiệm với điều đó tôi đã quyết định chỉ xuất bản chương trình là 1.1 . Nó không giải quyết vấn đề của "Nó sẽ chạy khi 1.2 được phát hành, và đó là phiên bản duy nhất được cài đặt trên một máy mục tiêu?", Tuy nhiên, nhưng tôi có thể đặt nó đi ngay bây giờ. – dsmith

2

Bạn đang thiếu global.json. Thêm một vào dự án của bạn để ứng dụng biết khởi động với thời gian chạy là 1.0.0 và không phải 1.1.

+0

Sắp xếp các âm thanh như những gì tôi cần nhưng không hoàn toàn. Tôi đang xây dựng trong VS 2017 (nên đã đề cập rằng), có nghĩa là tôi đang sử dụng .csproj/msbuild, không phải project.json/global.json. Nó * là * tạo một [projectname] .runtimeconfig.json trong thư mục xuất bản chỉ định phiên bản để chạy và nó hoạt động cục bộ với 1.0.0/1.0.1/1.0.2/1.0.3, nhưng không phải trên 1.0. 4 (như vậy, như mong đợi cho dòng 1.0). Nó sẽ không chạy một mục tiêu 1.0.4 trên 1.1.0, một trong hai, mặc dù. – dsmith

+1

@dsmith Tôi chưa thử nghiệm nó, nhưng tôi khá chắc chắn rằng ngay cả trong VS2017 và định dạng csproj, global.json vẫn được sử dụng để xác định phiên bản SDK. global.json và project.json không giống nhau. – Kushan

+0

Đúng, nhưng tệp global.json là chỉ định tập hợp công cụ xây dựng nào để sử dụng, không phải bất kỳ công cụ nào trong thời gian chạy. Vì tôi có các dự án .csproj, các công cụ hợp lệ duy nhất cho tôi là các công cụ preview4, chỉ hỗ trợ .csproj (preview3 cũng đã hoạt động nhưng tôi chưa cài đặt phiên bản nào). Tất cả các công cụ preview2 chỉ hỗ trợ project.json, có nghĩa là chúng sẽ không hoạt động. Vì đó là những lựa chọn duy nhất tôi có, tôi không thể thay đổi gì trong global.json để tạo nên sự khác biệt. Vẫn còn hữu ích để có đào vào, mặc dù. – dsmith

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