たくさんの自由帳

.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 アップグレード アシスタントを入れる?

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

実行できない

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

プロジェクトをダブルクリックすると、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>

とりあえず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>

おわりに

直したリポジトリ