書きかけの状態で間違って投稿されてたので削除
.Net desktopRuntimeについて
.Net desktopRuntimeについて質問させていただきます。 VisualStudio Pro Ver17.9.3 を使用して、Windows10とWindows11のデスクトップアプリケーション作成をしています。
アプリケーション発行の際の
配置モード:フレームワーク依存 ターゲットフレームワークは:.Net8.0
に設定しています。
VisualStudio は.Net DeskTopRuntime 8.02 を使用しているようです。
.Net DeskTopRuntime 8.02 のみ手動でインストールして配布を考えています。
将来WindowsUpdateにて、”.Net DeskTopRuntime ”が ”8.02” から ”8.03”になった場合、 VisualStudioで作成したアプリケーションは動作保証されると思い以下のことを試しました。
アプリケーション発行の設定:
配置モード:フレームワーク依存 ターゲットフレームワークは:.Net8.0
に設定しています。
VisualStudio は.Net DeskTopRuntime 8.02 を使用しているようです。
.Net DeskTopRuntime 8.02 のみ手動でインストールして配布を考えています。
「.Net DeskTopRuntime 8.02 のみ手動でインストールして動作確認。」
を
「.Net DeskTopRuntime 8.03 のみ手動でインストールして動作確認。」:動作NG
DeskTopRuntime 8.02を要求されているようです。
手動でインストールした場合は、WindowsUpdate相当にならないのでしょうか。
また、WindowsUpdateでアプリケーションが自動で対応できるようにVisualStudioの設定があればご教授をお願いいたします。
よろしくお願いいたします。
-
-
gekka 9,586 評価のポイント MVP
2024-03-21T09:42:50.64+00:00 発行すると実行ファイルとともに作られる *.runtimeconfig.jsonはどうなっていますか?
{ "runtimeOptions": { "tfm": "net8.0", "rollForward": "disable", "frameworks": [ { "name": "Microsoft.NETCore.App", "version": "8.0.2" }, { "name": "Microsoft.WindowsDesktop.App", "version": "8.0.2" } ], "configProperties": { "System.Reflection.Metadata.MetadataUpdater.IsSupported": false, "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": true } } }
のように、rollForwardの無効化と、バージョンの指定をしてあると、指定されたバージョンでのみ動作するようになります。
このような状態だと、一致するランタイムのダウンロードを要求するダイアログが表示されます。この設定にするには、プロジェクトファイルで、
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net8.0-windows</TargetFramework> <RuntimeFrameworkVersion>8.0.2</RuntimeFrameworkVersion> <RollForward>disable</RollForward>
のように設定すると変更されます。 あるいは、発行プロファイルの定義ファイルである*.pubxmlに設定してあっても変更されます。
<?xml version="1.0" encoding="utf-8"?> <!-- https://go.microsoft.com/fwlink/?LinkID=208121. --> <Project> <PropertyGroup> <Configuration>Release</Configuration> <Platform>Any CPU</Platform> <PublishDir>bin\Release\net8.0-windows\publish\</PublishDir> <PublishProtocol>FileSystem</PublishProtocol> <_TargetId>Folder</_TargetId> <TargetFramework>net8.0-windows</TargetFramework> <SelfContained>false</SelfContained> <!-- バージョン指定 これはcsprojのPropertyGroupに指定してもいい--> <RuntimeFrameworkVersion>8.0.2</RuntimeFrameworkVersion> <!-- バージョンのロールフォワードを無効に --> <RollForward>disable</RollForward> </PropertyGroup> </Project>
または、global.jsonのrollForwardでもロールフォワード動作が無効になる場合があります。
-
IGA-TETSU 0 評価のポイント
2024-03-22T05:39:35.8866667+00:00 ご回答ありがとうございます。
発行すると実行ファイルとともに作られる *.runtimeconfig.jsonは以下のようになっています。 「"rollForward": "disable",」とも「"rollForward": "latestMajor"」とも何も記述されていません。
また、プロジェクトファイルも以下の通りになります。
どこに記載すれば良いのかご教授をお願いいたします。
よろしくお願いいたします。
-
SurferOnWww 3,041 評価のポイント
2024-03-23T01:05:08.8633333+00:00 「.NET 4.8」の導入を検討も考えてみていますが、設定方法を知りたい次第です。
.NET Framework 版の Windows Forms アプリなら、「新しいプロジェクトの作成」で下の画像の〇印の方すなわち (.NET Framework) となっている方を選べば良いです。×印の方は .NET / .NET Core 版(質問に書かれている .NET 8.0 を含む)です。
WPF の場合も (.NET Framework) となっている方を選べば良いです。
.NET 8.0 で作った場合のユーザーの PC のランタイムを気にしているようですが、.NET アプリケーションの発行には「フレームワーク依存」と「自己完結型」という 2 つのモードがあって、後者を選べばいいのでは?
詳しくは以下の Microsoft ドキュメントを見てください。
"ご自分のアプリを "自己完結型" として発行すると、.NET ランタイムとライブラリ、さらにご自分のアプリケーションとその依存関係を含むアプリケーションが生成されます。 そのアプリケーションのユーザーは、.NET ランタイムがインストールされていないコンピューター上でそれを実行することができます"