ODCでC#を利用する仕組みである、External Logicはリリース当初は.NET 6を対象としていた。
しかし、.NET 6のサポートが終了してしまうため、.NET 8にアップデートが必要。
その手順がドキュメントとして公開されていたので、関連情報と合わせて読んでいく。
環境情報
ODC Studio (Version 1.4.28)
手順は、MacBook Air M2 2022上のVSCodeで確認。
(NuGet Package ManagerはC# Dev KitというExtensionの一部のようなので、コマンドパレットで出てこなかったら、C# Dev Kitをインストール)
対象ドキュメント
Upgrading custom code libraries to .NET 8 - ODC Documentation
.NET 6のサポート停止予定は2024/12/20
フォーラムにOutSystemsスタッフからの言及があった。
External Logic now supports .NET 8 | OutSystems
By the end of the year (December 20, 2024), we will stop supporting External Logic based on the .NET 6 Runtime.
この日を過ぎても動かなくなるわけではないが、「.NET 6を使ったExternal LogicのアップロードやReleaseはできなくなる」とのこと。
当然ながら、.NET 6を使うのはサポート対象外になるため、基本的にアップデートすることになる。
また、この状況で新しいExternal Logicを.NET 6で作っても、問題を増やすだけなので、新しいプロジェクトなら基本的に.NET 8で作成する。
警告表示
現時点で、ODC Portal > External logicページで、.NET 6を使って作られたものは、Runtime version列に警告のアイコンが表示されるようになっている。
アイコンにマウスオーバーすると、「This library is using a runtime version that will be discontinued on Dec 20, 2024.」と表示される(廃止予定のバージョンを使っているという警告)。
アップデートを試す前に:自動テストがある場合は動作確認として実行しておく
自動テスト作成済みであれば、アップデート前後でテストを実行することで、回帰テストとすることができる。
C#コードとしてのテストなら、xunitなどを使ったユニットテスト
OutSystemsのActionとしてのテストなら、BDDFrameworkを使ったテスト
今回、手元でアップデートしようとしているExternal Logicに対しては、以前BDDFrameworkのテストを作成済みだったのでこれを実行しておいた。
アップデート手順を試す
Identify .NET 6: .NET 6で作られたExternal Libraryを特定する
これは、↑で書いたように、ODC Portalの一覧画面でチェックするのが簡単。
Upgrade to .NET 8: .NET 8にアップグレード
.NET 8 SDKをインストール
Download .NET 8.0 (Linux, macOS, and Windows)から.NET 8のSDKをダウンロードしてインストールする。
インストールが終わったら、念のため以下のコマンドで確認。
dotnet --list-sdks
8.0.403 [/usr/local/share/dotnet/sdk]
プロジェクトファイルを書き換えてバージョンアップ
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="OutSystems.ExternalLibraries.SDK" Version="1.4.0" />
</ItemGroup>
Target Frameworkを書き換える(net6.0 -> net8.0)。
ライブラリのバージョン更新
VSCodeのコマンドパレットで「NuGet: Update NuGet Package」と入力。出てきたオプションから「NuGet: Update NuGet Package」を選択。
参照しているライブラリが出てくる。少なくとも、OutSystems.ExternalLibraries.SDKは必ず使っているのでこれを選択。他のライブラリを使っているプロジェクトなら、個別に更新の必要性を判断する。
新しいバージョンが出ていたら更新を検討(今回は最新の、1.5.0を選択。External Library機能が当初リリースされた時は、1.4.0を使っていたので更新になる)。
.csprojファイルの参照バージョンが更新される。
Release the new version of the library: ODCにアップロード > Release Libraryする
この部分の手順はこれまでと変わらない。
以下のコマンドをターミナルから入力し、
dotnet publish -c Release -r linux-x64 --self-contained false
<プロジェクト>/Release/net8.0/linux-x64/publishにできているファイルをzip圧縮して、ODC Portal > External logicメニュー > .NET 6時に登録済みのLibraryを選択 > Upload new revisionボタンから、作成したzipファイルをアップロードする。
External LibraryはLibraryの一種なので、アップロードが終わったら、Releaseを忘れずに。
詳細は以下を参照。
Runtime versionが.NET 8.0に更新されたことを確認する。
回帰テストを実施する
今回は自動テストがあるので、テストAppの参照を更新し、テストScreenを開き直し、全テストが成功していることを確認して終わり。