2017-01-06 3 views
6

У меня есть программа, которую я пытаюсь перенести на .NET Standard/Core. Интерфейс командной строки для библиотеки построен с целевой структурой netcoreapp1.0. Я попробовал отправить это тестеру (с другой ОС), у которого был установлен только .NET Core 1.1. Программа не будет работать и выдаст ошибку:Приложение .NET Core 1.0 не будет работать в системе .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'. 

Ожидаемо ли это? Насколько я понял, каждая версия Core/Standard была строгим надмножеством предыдущего. Как таковой, я ожидал, что программа, нацеленная на 1.0, все равно будет работать в системе с 1.1, вместо того, чтобы иметь множественную цель для каждой версии установки.

В целом, как я могу настроить вещи так, чтобы мне не нужно было беспокоиться о том, что пользователь придет позже, когда только более новая версия .NET Core не сможет запустить программу?

+3

'1.1.0'! =' 1.0.1' –

ответ

2

Вам нужно понять еще несколько концепций.

  1. .NET, ядро ​​приложение становится самодостаточным, если вы используете dotnet publish должным образом. Затем на целевой машине, на которой не установлен .NET Core (или нет версии, с которой она работает) приложение может работать без проблем. Основываясь на вашем описании, вы, вероятно, забыли сделать это или не пытаетесь опубликовать это приложение.

  2. Если вы намереваетесь переместить свой код на основе .NET Core 1.0.1 на другой компьютер, и на этом компьютере установлена ​​только 1.1.0, ну, вы должны иметь возможность запускать сценарий dotnet-install для установки требуемого времени выполнения,

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

Поскольку вы используете Visual Studio 2017 RC уже, вы должны знать, что .NET ядра 1.0.x должны теперь быть 1.0.3. Поддержка 1.0.0-1.0.2 истекла.

+0

1.0.1 был по умолчанию инструментом preview4, который является единственной версией SDK для поддержки проектов .csproj в это время (предварительный просмотр3 больше не доступен). К счастью, я обнаружил, что preview4 все еще может создавать 1.1.0 (а также 1.0.3 и т. Д., Используя правильный пакет nuget), и с помощью ряда экспериментов с этим я решил просто опубликовать программу как 1.1 , Это не решает проблему «Будет ли она работать при выпуске версии 1.2, и это единственная версия, установленная на целевой машине?», Хотя, но я могу ее отложить. – dsmith

2

Вам не хватает global.json. Добавьте один из них в свой проект, чтобы приложение могло загрузиться с 1.0.0, а не 1.1.

+0

Вид звуков, как будто мне нужно, но не совсем. Я создаю VS 2017 (должен был упомянуть об этом), что означает, что я использую .csproj/msbuild, а не project.json/global.json. Он * * генерирует [projectname] .runtimeconfig.json в каталоге публикации, который указывает версию для запуска, и работает локально с 1.0.0/1.0.1/1.0.2/1.0.3, но не на 1.0. 4 (так, как и ожидалось для линии 1.0). Однако он не будет запускать цель 1.0.4 на 1.1.0. – dsmith

+1

@dsmith Я не тестировал его, но я уверен, что даже в VS2017 и формате csproj global.json все еще используется для указания версии SDK. global.json и project.json - это не одно и то же. – Kushan

+0

Верно, но файл global.json должен указать, какой набор инструментов построения использовать, а не какой-либо материал времени исполнения. Поскольку у меня есть проекты .csproj, единственными действительными инструментами для меня являются файлы Preview4, которые поддерживают только .csproj (preview3 также работал бы, но у меня нет установленной версии). Все инструменты preview2 поддерживают только project.json, а это значит, что они вообще не будут работать. Поскольку это единственные варианты, которые у меня есть, я ничего не могу изменить в global.json, который бы изменил ситуацию. Тем не менее, все-таки полезно было влезть. – dsmith