.Net desktopRuntimeについて

IGA-TETSU 0 評価のポイント
2024-03-21T07:19:44.88+00:00

.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の設定があればご教授をお願いいたします。

よろしくお願いいたします。

Visual Studio
Visual Studio
Windows、Web、モバイル デバイス用のアプリケーションを構築するための統合開発ツールの Microsoft スイートのファミリ。
34 件の質問
{count} 件の投票

4 件の回答

並べ替え方法: 最も役に立つ
  1. gekka 6,846 評価のポイント MVP
    2024-03-21T09:29:10.85+00:00

    書きかけの状態で間違って投稿されてたので削除

    0 件のコメント コメントはありません

  2. gekka 6,846 評価のポイント 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でもロールフォワード動作が無効になる場合があります。

    0 件のコメント コメントはありません

  3. IGA-TETSU 0 評価のポイント
    2024-03-22T05:39:35.8866667+00:00

    ご回答ありがとうございます。

    発行すると実行ファイルとともに作られる *.runtimeconfig.jsonは以下のようになっています。 「"rollForward": "disable",」とも「"rollForward": "latestMajor"」とも何も記述されていません。User's image

    また、プロジェクトファイルも以下の通りになります。

    User's image

    どこに記載すれば良いのかご教授をお願いいたします。

    よろしくお願いいたします。


  4. SurferOnWww 1,916 評価のポイント
    2024-03-23T01:05:08.8633333+00:00

    「.NET 4.8」の導入を検討も考えてみていますが、設定方法を知りたい次第です。

    .NET Framework 版の Windows Forms アプリなら、「新しいプロジェクトの作成」で下の画像の〇印の方すなわち (.NET Framework) となっている方を選べば良いです。×印の方は .NET / .NET Core 版(質問に書かれている .NET 8.0 を含む)です。

    newproject

    WPF の場合も (.NET Framework) となっている方を選べば良いです。

    .NET 8.0 で作った場合のユーザーの PC のランタイムを気にしているようですが、.NET アプリケーションの発行には「フレームワーク依存」と「自己完結型」という 2 つのモードがあって、後者を選べばいいのでは?

    詳しくは以下の Microsoft ドキュメントを見てください。

    .NET アプリケーションの発行の概要

    "ご自分のアプリを "自己完結型" として発行すると、.NET ランタイムとライブラリ、さらにご自分のアプリケーションとその依存関係を含むアプリケーションが生成されます。 そのアプリケーションのユーザーは、.NET ランタイムがインストールされていないコンピューター上でそれを実行することができます"