.NETの異なるバージョン
https://dotnet.microsoft.com/ja-jp/download
.NETにはバージョンがあります。
異なるバージョンの互換性の問題
通常の手順に従うとローカルマシンのグローバル環境にインストールすることになり、たとえば、.NET6.0から.NET7.0にアップグレードする際など、既存の個別の.NETプロジェクトでバージョン互換性の問題が発生してしまいます。
Dockerなどのコンテナ技術は、このような複数の異なるバージョンを互いに安全に隔離して、異なるバージョンでそれぞれ開発されたプロジェクトやアプリケーションを運用するために開発された技術であると言えます。
環境の隔離
Docker(ドッカー)は、コンテナ仮想化を用いてアプリケーションを開発・配置・実行するためのオープンプラットフォームである[5]。
.NET Framework での side-by-side 実行
https://learn.microsoft.com/ja-jp/dotnet/framework/deployment/side-by-side-execution
side-by-side 実行は、アプリケーションまたはコンポーネントの複数のバージョンを同じコンピューターで実行する機能です。 共通言語ランタイムの複数のバージョン、および 1 つの共通言語ランタイムを使用するアプリケーションとコンポーネントの複数のバージョンを同じコンピューターで同時に実行できます。
https://atmarkit.itmedia.co.jp/fdotnet/technology/idnfw11_04/idnfw11_04_01.html
.NET Frameworkのバージョン・ポリシー
これまで、開発者はソフトウェアのバージョンについて、次のような悩みを抱えていた。
- ユーザーにできるだけ新しいバージョンを使ってもらいたい。
下位互換性のテストはやりたくないし、完全にはできない。
また、ユーザーはユーザーで次のような悩みを抱えていた。新しいバージョンを入れた結果、既存のアプリケーションが動かなくなるのは困る。
新バージョンに問題がある場合は、素早く簡単に、うまく動作していた以前のバージョンに戻したい。
.NET Frameworkには、これまでの反省が大いに活かされている。ここからは、.NET Frameworkのソフトウェアのバージョン管理方法を解説しよう。
.NETでは実行時からして、バージョン非互換の問題が発生しないようなバージョン・ポリシーがある優れた設計です。
ポータブル.NETプロジェクトの作成が可能
.NET Frameworkでは実行時だけではなく、開発プロジェクト毎に異なるSDKバージョンをインストールすることができます。いわばポータブル.NETプロジェクトが作成可能なのです。
繰り返しですが、通常の手順に従うとローカルマシンのグローバル環境にインストールすることになり、たとえば、.NET6.0から.NET7.0にアップグレードする際など、既存の個別の.NETプロジェクトでバージョン互換性の問題が発生してしまいます。
しかし、ちょっとした工夫でDockerのような仕組みを必要とせず、プロジェクト・ディレクトリー毎に異なる.NET Framework環境を安全に隔離することができます。
ポータブル.NETプロジェクトの作成アウトライン
1. .NET-SDKダウンロード
公式サイトから任意のプラットフォームの特定バージョンの.NET-SDKのバイナリ(アーカイブ)をダウンロードする
2. プロジェクト・ディレクトリにSDKを配置
プロジェクトディレクトリ下に.NET-SDKディレクトリを作成し、そのディレクトリ下で解凍・展開
3. PATHを通す
ターミナル環境とVSCodeで.NET-SDKの相対PATHを通す
1. .NET-SDKダウンロード
公式サイトから任意のプラットフォームの特定バージョンの.NET-SDKのバイナリ(アーカイブ)をダウンロードします。
https://dotnet.microsoft.com/ja-jp/download
おすすめ 、とも書いてあるし、最近安定リリースされた.NET 7.0をLinux環境にインストールすることにします。
ここで、通常のインストールならば、OS毎の インストーラー を選択することになるのですが、ポータブルSDKインストールのためにはバイナリを個別に指定してダウンロードします。また、dotnet-install scriptsでもできないことはないかもしれませんが、事前知識やコマンドが煩雑になると思います。
今回は、LInux/x64プラットフォームのバイナリをダウンロードします。
dotnet-sdk-7.0.102-linux-x64.tar.gz
というような特定のバージョンと特定のプラットフォームのアーカイブファイルがダウンロードされるはずです。
2. プロジェクト・ディレクトリにSDKを配置
プロジェクトディレクトリ下に.NET-SDKディレクトリを作成し、そのディレクトリ下でダウンローしたアーカイブファイルを解凍・展開していきます。
任意のプロジェクト・ディレクトリを作成します。今回はfs-test
という名前のF#(.NET)のためのプロジェクトを作成します。
以下ターミナル環境
$ mkdir fs-test
作成したディレクトリへ移動し、さらに.NET-SDKのディレクトリを作成します。なんでも良いのですが、.net
という名前のディレクトリを作成します。
$ cd fs-test
$ mkdir .net
適当なアンアーカイバ−を利用し、すでにダウンロードしているファイルを解凍し、このディレクトリ下に配置します。
結果、以下のようなディレクトリ構成になるようにします。
fs-test
└── .net
├── dotnet
├── host
├── LICENSE.txt
├── packs
├── sdk
├── sdk-manifests
├── shared
├── templates
└── ThirdPartyNotices.txt
3. PATHを通す
ターミナル環境とVSCodeで.NET-SDKの相対PATHを通します。
https://dotnet.microsoft.com/ja-jp/download/dotnet/thank-you/sdk-7.0.102-linux-x64-binaries
には、
とありますが、これは$HOME
に配置されたSDKへのPATHを通す方法です。
$HOME/dotnet
の代わりに./.net/dotnet
と相対パスにする方法もありますが、自分はZSHの.zshrc
で、以下のようにdotnet
コマンドのエイリアスを作りました。
alias dotnet='.net/dotnet'
ターミナル環境(ZSH)を再度立ち上げるなどして、環境偏向を反映させます。
カレントディレクトリがプロジェクトルートの fs-test
であることを確認した上で、dotnet
コマンドが通るか?正しいバージョンが表示されるか?確認します。
$ dotnet --version
7.0.102
これで、別の.NETプロジェクトでたとえばNET6.0-SDKを配置した場合、同じコマンドで、相対PATHでプロジェクトローカルのSDK特定されるので、異なる適切な.NETバージョンが表示されるはずです。
ポータブル.NETプロジェクトのSDKのディレクトリである.net
のサイズは535.6Mでした。
Top comments (0)