1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ASP.NET Coreで.netのバージョン違いのエラーが出たので対応方法を調べてみた

Posted at

はじめに

.netでクリーンアーキテクチャであれこれ開発してみたくなって、
githubからcloneしてきたソリューションをデバックしたところ、以下のようなエラーが発生。

image.png

あんまり見たことないので、せっかくなら記事にしちゃえ~の精神で、解決方法を探していきたいと思います。

何のエラー?

Github Copilot先輩は以下のように返答してくれました。

このエラーは、指定されたバージョンの .NET Core ランタイムまたは 
ASP.NET Core ランタイムが見つからないために発生しています。具体的に
は、アプリケーションが .NET 6.0.0 ランタイムを必要としているが、
システムにはインストールされていないことが原因です。

なるほど👀。ようするに、いまランタイムで実行している.netのバージョンが違うので、動かそうにもできませんよと怒られてしまっている状態ですね。

今回私が用意したASP.NET Coreは.net6.0対応なので、まずはいま手元にあるバージョンを以下のコマンドで確認してみましょう。

.NET SDK のバージョン
dotnet --list-sdks

続いて、今回怒られているランタイムのバージョンも見てみましょう。

.NET ランタイムバージョン
dotnet --list-runtimes

とすると、SDKとランタイムとも.net9.0である(2025年最新版)であることがわかりました。
うーん?一番新しい.netで動かないのはなぜなんだろう...?下位互換性が機能しないものなのか...?という疑問が発生。

対応方法

上記についてとりあえず後述に回して、とりあえず.net6.0をダウンロードします。

Powershellで実施。

wget https://dotnet.microsoft.com/download/dotnet/thank-you/runtime-6.0.0-windows-x64-installer -OutFile dotnet-runtime-6.0.0-win-x64.exe
Start-Process -FilePath .\dotnet-runtime-6.0.0-win-x64.exe -ArgumentList '/quiet' -Wait
Remove-Item .\dotnet-runtime-6.0.0-win-x64.exe

そして、もう一度ビルドしてみると...
同じエラーが発生!!!Σ(・□・;)

詳しく調査すると、SDK・ランタイム両方とも.net6.0にする必要があるそうです。上記ではランタイムのみでしたのでSDKもインストールします。

すると...

image.png

無事起動されましたね!!

.netに下位互換性はないの?

先ほどぶち当たった問題です。6.0以上のバージョンがすでにあるにも関わらず、あえて下位のバージョンをインストールしなければならないのはなかなかに不条理。

これについて生成AIに文句を言うと、このように返答されました。

.NET実行環境には特別な互換性の仕組みがあります。新しいバージョン(9.0など)をインストールしても、古いバージョン(6.0など)のアプリケーションは自動的には動作しません。
これには主に以下の理由があります:

ランタイムの独立性:
各.NETバージョンは独自のランタイム環境を持ち、
アプリケーションはビルド時に特定のバージョンを対象に設計されます。

破壊的変更の可能性: 
メジャーバージョン間では互換性のない変更が導入されることがあります。

ロールフォワードポリシー: 
.NET 5以降は、適切に設定されていれば「ロールフォワード」機能で上位バージョンで動作させることは可能ですが、デフォルトでは厳格に指定されたバージョンのみ使用します。

ASP.NET Coreアプリケーションの場合は特に、フレームワーク依存として公開されていると、指定されたバージョンのランタイムが必要になります。

どうやら、ランタイムには特定バージョンに依ることが必要らしく、最新のSDKを入れたところで動きませんよってことなのですね。
なるほど、.netのバージョン引き上げが苦労するわけですね...。

自己完結型(self-contained)デプロイメントという概念も紹介されましたが、未知の事項なのでまたいずれ試してみたいですね。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?