2017-01-06 15 views
6

.NET Standard/Coreに移行しようとしているプログラムがあります。ライブラリへのコマンドラインインタフェースは、netcoreapp1.0のターゲットフレームワークで構築されています。私は.NET Core 1.1しかインストールされていないテスター(別のOSを持つ)にこれを送ろうとしました。プログラムは実行されず、エラーが表示されます。.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'. 

これは予期されますか?私が理解しているように、各コア/スタンダードバージョンは、以前のバージョンの厳密なスーパーセットでした。そのため、私は1.1を対象としたプログラムは、すべてのインストールバージョンをマルチターゲット化するのではなく、1.1のシステムで実行することを期待していました。

もっと一般的には、ユーザーが後で.NET Coreの新しいバージョンのみでプログラムを実行できないようにする心配がありません。

+3

'1.1.0'!=' 1.0.1' –

答えて

2

いくつかの概念を理解する必要があります。

  1. dotnet publishを正しく使用すると、.NETコアアプリケーションは自己完結型になります。その後、.NETコアがインストールされていないターゲットマシン(またはそれがビルドされていないバージョン)では、アプリケーションは問題なく実行できます。あなたの説明に基づいて、そうすることを忘れたり、このアプリを公開しようとしていません。

  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

プレビュー4ツールのデフォルトは1.0.1で、今回は.csprojプロジェクトをサポートする唯一のSDKバージョンです(preview3はもう利用できません)。幸いにも、私はプレビュー4がまだ1.1.0(そして、正しいナゲットパッケージを使って1.0.3など)をビルドできることを見出しました。そして、それを使っていくつかの実験を通して、私は1.1としてプログラムを公開することに決めました。 「1.2がリリースされたときに実行され、それがターゲットマシンにインストールされた唯一のバージョンですか?」という問題は解決されませんが、今は取り除くことができます。 – dsmith

2

あなたにはglobal.jsonがありません。アプリケーションを1.0.0ランタイムで起動するようにプロジェクトに追加します(1.1ではなく)。

+0

私は必要なもののような音の並べ替え、しかしかなり。私はVS 2017でビルドしています(これは言及すべきです)。つまり、project.json/global.jsonではなく、.csproj/msbuildを使用しています。実行するバージョンを指定するpublishディレクトリに[projectname] .runtimeconfig.jsonを生成しています* 1.0ではなく1.0.0/1.0.1/1.0.2/1.0.3で動作します。 4(そう、1.0行で期待通り)。しかし、1.1.0でターゲット1.0.4を実行することはありません。 – dsmith

+1

@dsmith私はそれをテストしていませんが、VS2017とcsproj形式でさえ、global.jsonがまだSDKのバージョンを指定するために使用されていることは間違いありません。 global.jsonとproject.jsonは同じものではありません。 – Kushan

+0

trueですが、global.jsonファイルは、使用するビルドツールのセットを指定するものであり、実行時のものではありません。私は.csprojプロジェクトを持っているので、私にとって有効な唯一のツールは、プレビュー4のものです.csproj(プレビュー3も機能しましたが、そのバージョンはインストールされていません)だけをサポートしています。すべてのpreview2ツールはproject.jsonのみをサポートしているため、まったく動作しません。これらは私が持っている唯一のオプションなので、違いを生むglobal.jsonでは何も変更できません。しかし、まだ掘っておくと便利でした。 – dsmith

関連する問題