たくさんの自由帳

.NET 6 から 8 に移行する

投稿日 : | 0 日前

文字数(だいたい) : 3977

どうもこんばんわ。
Windows サンドボックスにファイルをコピーしたくて、どうすれば良いのかなって調べたら、ファイルをコピーしてサンドボックスで貼り付ければいいらしい。
https://www.reddit.com/r/Windows10/comments/bwcgrd/how_do_i_move_files_between_windows_and_windows/

Imgur

たしかに、別にテキスト以外も送れたのか・・・

本題

.NET 6LTSがついに終わってしまうらしい。ので、今回は次のLTSである.NET 8にします。
今も使ってるWindowsで動くアプリが.NET 6時代のままなので、アップデートしていきます。

環境

自作アプリはWindows App SDKでできたアプリと、WinFormのアプリになります。それらを上げます

なまえあたい
Windows10 Pro
Visual StudioCommunity 2022 Version 17.11.4

バックアップをとっとく

gitを使ってバージョン管理してるならすぐ戻せますが、もし使ってない場合はバックアップしといたほうが良いです。

.NET8 にする

.NET アップグレード アシスタントを入れる?

https://learn.microsoft.com/ja-jp/dotnet/core/porting/upgrade-assistant-install#install-the-visual-studio-extension

Imgur

ダウンロードします

Imgur

パッケージがダウンロードできるので、Visual Studio へインストールします。
もしかしたらVisual Studioの拡張から直接入れられたかも知れない。

Imgur

ダブルクリックするとなんか始まる

Imgur

Visual Studio起動中だと進まないので閉じます

Imgur

Imgur

アップグレードアシスタントを起動してみた

さっきと同じようにアップグレードを押すとこんな画面に。
.NET バージョンの方を選ぶ

Imgur

.NET 8を選んで次へ。

Imgur

よくわかんないし、最悪戻せるのでこのままアップグレードの選択を押します

Imgur

はじまりました。と思ったらほとんどスキップで終わった。

Imgur

差分をgitで見てみたけど、<TargetFramework>が変わったくらい?

Imgur

ライブラリ更新もしておく

ソリューションから、プロジェクト選んで、Nugetパッケージの管理を押して、更新があれば更新しておきます。

Imgur

Imgur

.NET 8 にあげたのに 6 を使っているから互換性がないと言われた

いやさっき.NET 8にしたんですけど、なんでまだ6使ってると思われてるの?

Imgur

というわけで色々見てみた感じ、どうやらまだ設定しないとダメらしい?
まずはプロパティを開きます

Imgur

つぎに、上げたはずのターゲットフレームワーク.NET 8にします。、、、、む、押しても戻ってしまいます

Imgur

PublishProfiles の TargetFramework が 6 のままだった

もしプロジェクト内にPropertiesがあって、その中にPublishProfilesがある場合、その傘下にあるファイルの.NETバージョンも変更する必要があります。

Imgur

多分値は、アップグレードアシスタントの値と同じものを入れておけば良さそう。

<?xml version="1.0" encoding="utf-8"?>
<!--
https://go.microsoft.com/fwlink/?LinkID=208121.
-->
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <PublishProtocol>FileSystem</PublishProtocol>
    <Platform>x64</Platform>
    <RuntimeIdentifier>win10-x64</RuntimeIdentifier>
    <PublishDir>bin\\\win10-x64\publish\win10-x64\</PublishDir>
    <SelfContained>false</SelfContained>
    <PublishSingleFile>true</PublishSingleFile>
    <PublishReadyToRun Condition="'$(Configuration)' == 'Debug'">False</PublishReadyToRun>
    <Configuration>Release</Configuration>
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    <!-- 
    See https://github.com/microsoft/CsWinRT/issues/373
    <PublishTrimmed>True</PublishTrimmed>
    -->
  </PropertyGroup>
</Project>

これで晴れて.NET 8に更新することができました。

Imgur

実行できない

ありがとうございます:https://zenn.dev/shinta0806/articles/dotnet8-netsdk1083

指定された RuntimeIdentifier、'win10-x64' が認識されません。 詳細については、「 https://aka.ms/netsdk1083 」を参照してください。

リンク先は https://learn.microsoft.com/ja-jp/dotnet/core/compatibility/sdk/8.0/rid-graph
どうやら、win10-x64となっている部分を、win-x64にしろってことらしい。

プロジェクトをダブルクリックすると、xmlが開くはずで、その中から<RuntimeIdentifiers>の行を探します。

Imgur

わたしの場合はこうなってて、これをまずは以下のようにします。win10winだけにする。

<RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
<RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>

つぎに、PropertiesPublishProfilesにあるファイルにも<RuntimeIdentifiers>があるので、同様にwin10winだけにしていきます。

Imgur

Properties\PublishProfiles\win10-arm64.pubxml

<RuntimeIdentifier>win-arm64</RuntimeIdentifier>

Properties\PublishProfiles\win10-x64.pubxml

<RuntimeIdentifier>win-x64</RuntimeIdentifier>

Properties\PublishProfiles\win10-x86.pubxml

<RuntimeIdentifier>win-x86</RuntimeIdentifier>

まだ実行できない

.NET 8にしたけどまだダメなのかな。。。

This version of the Windows App SDK requires Microsoft.Windows.SDK.NET.Ref 10.0.19041.38 or later.
    Please update to .NET SDK 6.0.134, 6.0.426, 8.0.109, 8.0.305 or 8.0.402 (or later).
    Or add a temporary Microsoft.Windows.SDK.NET.Ref reference which can be added with:
        <PropertyGroup>
            <WindowsSdkPackageVersion>10.0.19041.38</WindowsSdkPackageVersion>
        </PropertyGroup>

というか私以外も引っかかってるのこれ?
https://github.com/microsoft/WindowsAppSDK/issues/4698

とりあえずPropertyGroupに一行書き足せって書いてあるので書き足してみる。一番最後のWindowsSdkPackageVersionってやつ。

<PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows10.0.19041.0</TargetFramework>
    <TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
    <RootNamespace>DesktopLine</RootNamespace>
    <ApplicationManifest>app.manifest</ApplicationManifest>
    <Platforms>x86;x64;arm64</Platforms>
    <RuntimeIdentifiers>win-x86;win-x64;win-arm64</RuntimeIdentifiers>
    <PublishProfile>win10-$(Platform).pubxml</PublishProfile>
    <UseWinUI>true</UseWinUI>
    <EnableMsixTooling>true</EnableMsixTooling>
    <ApplicationIcon>Resources\desktop_line_icon.ico</ApplicationIcon>
    <WindowsAppSDKSelfContained>true</WindowsAppSDKSelfContained>
    <WindowsPackageType>None</WindowsPackageType>
    <WindowsSdkPackageVersion>10.0.19041.38</WindowsSdkPackageVersion>
</PropertyGroup>

うごいた!

やったぜ

Imgur

発行できるかも試す

zipWindows App SDK吐き出せるか試します。プロジェクトを右クリックで発行を押します。

Imgur

一回も押したことがない場合は違う画面が開くと思う?。既存のプロジェクトなのでそのまま発行を押します。
Imgur

成功したぽい!!

Imgur

おおお
ちゃんと起動できた。

Imgur

WinForm は?

多分<TargetFramework>net8になるだけ?
該当部分抜き出し。

<PropertyGroup>
    <OutputType>WinExe</OutputType>
    <TargetFramework>net8.0-windows</TargetFramework>
    <UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>

おわりに

直したリポジトリ