タグ: .net6

  • .NET アプリがどのランタイムバージョンで動作しているかを調べる

    現在、稼働している.NETのアプリが、どのバージョンのライタイムで、アプリケーションが動作するようになっているのかを調べてみる。この方法は、.NET5よりも後の.NETアプリについて、調べることができる。

    アプリのフォルダで、下記の名前のファイルがあるかを調べる。[appname]の部分には、そのアプリの名前がついている。

    [appname].runtimeconfig.json

    次のそのJSONファイルを開く。メモ帳などのテキストエディタで開けばよい。

    下のような中身になっているので、「tfm」や「version」の部分を確認し、どの.NETバージョンを利用するようになっているのかを確認する。

    {
      "runtimeOptions": {
        "tfm": "net8.0",
        "includedFrameworks": [
          {
            "name": "Microsoft.NETCore.App",
            "version": "8.0.5"
          },
          {
            "name": "Microsoft.AspNetCore.App",
            "version": "8.0.5"
          }
        ],
        "configProperties": {
          "System.GC.Server": true,
          "System.Reflection.Metadata.MetadataUpdater.IsSupported": false,
          "System.Reflection.NullabilityInfoContext.IsSupported": true,
          "System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
        }
      }
    }

    参考: https://learn.microsoft.com/en-us/dotnet/core/runtime-config/

  • .NET6から.NET8に変更して実行したらSQLServerとの接続でエラー

    .NET6のサポート終了が近づいているので、.NET8に変更して実行したところ、SQL Serverとの接続でエラーが発生した。

    An unhandled exception occurred while processing the request.
    Win32Exception: 信頼されていない機関によって証明書チェーンが発行されました。
    Unknown location
    
    SqlException: A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - 信頼されていない機関によって証明書チェーンが発行されました。)
    Microsoft.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, bool breakConnection, Action<Action> wrapCloseInAction)

    「Microsoft.Data.SqlClient パッケージ」の破壊的変更の影響だった。対処としては、ConnectionStringsの接続文字列の最後に、「TrustServerCertificate=True;」を追加した。下記みたいな感じ。

      "ConnectionStrings": {
           ~~~略~~~;Database=DBname;TrustServerCertificate=True
      },

    これでもう一度実行して、実行できることを確認した。

    参考: https://learn.microsoft.com/ja-jp/ef/core/what-is-new/ef-core-7.0/breaking-changes?tabs=v7

  • dotNET6のアプリがIIS上だと原因不明の500エラーになる

    .NET6のアプリをIISにデプロイしたが、500エラーで動作せず。コンパイル自体はエラーになっていなかったが、IIS上にデプロイして、実行するとエラーになった。

    いろいろと調べていくと、「アプリケーションの発行」の設定の「Entity Frameworkの移行」のところにバツマークがついていた。内容は、「dotnet tool restore」だ。これが影響しており、正常にアプリケーションの発行ができていなかった。

    対処として、ソリューションのクリーンとリビルドを行ったが、改善せず。

    表示されていたパスにある「dotnet-tools.json」を別のファイル名にリネームして、再度発行を試したところ、正常に発行ができて、IIS上でも動作した。「dotnet-tools.json」のファイルの更新で問題があったことが原因だった。

  • Visual Studio 2022でデバック実行したら”CreateHostBuilder(args).Build().Run();”でエラーが出た。

    Visual Studio 2022でデバック実行したら”CreateHostBuilder(args).Build().Run();”でエラーになった。もともと、動作していた環境なのだが、久しぶりに起動させたところ、デバック実行で起動できなくなっていた。環境は、Visual Studio 2022、.NET6。

    ■エラーになった個所:Program.CS

    CreateHostBuilder(args).Build().Run();

    ■表示されたエラーやログ

    'xxxxxxxxx.exe' (CoreCLR: clrhost): 'C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.13\System.Security.Cryptography.Csp.dll' が読み込まれました。シンボルの読み込みをスキップしました。モジュールは最適化されていて、デバッグ オプションの [マイ コードのみ] 設定が有効になっています。
    例外がスローされました: 'System.InvalidOperationException' (System.Private.CoreLib.dll の中)
    型 'System.InvalidOperationException' のハンドルされていない例外が System.Private.CoreLib.dll で発生しました
    Unable to configure HTTPS endpoint. No server certificate was specified, and the default developer certificate could not be found or is out of date.
    To generate a developer certificate run 'dotnet dev-certs https'. To trust the certificate (Windows and macOS only) run 'dotnet dev-certs https --trust'.
    For more information on configuring HTTPS see https://go.microsoft.com/fwlink/?linkid=848054.

    いろいろと試した結果・・・

    次のコマンド(2つ)を、Visual Studio 2022 とは別にPowershellを開いて、実行した。そのあと、Visual Studioでデバック実行して正常にウェブアプリが起動することが確認できた。

    dotnet dev-certs https --clean
    dotnet dev-certs https --trust

    “dotnet dev-certs https –trust”のみの実行だと、変らなくて、Cleanのオプションで使っていない証明書をきれいにすることで解消した。ここがわかるまで、結構時間を使ってしまった。

  • asp.netのコントロールのカラーをVBから変えようとしたらエラーに。

    コントロールのプロパティでは、カラー名や値で指定できるのに、VBで、そのまま書くとコンパイルエラーになる。VBやC#などのコードで、指定する場合は、「System.Drawing.Color」を使って、色を指定する必要がある。

    エラーになった記述

    xxxxxxxx.ForeColor = "#FF0000" 
    xxxxxxxx.ForeColor = "Red"

    正常にコンパイルもでき、動作する記述

    ' 色名で指定する場合 
    xxxxxxxx.ForeColor = System.Drawing.Color.FromName("Red") 
    xxxxxxxx.ForeColor = System.Drawing.Color.FromName("Black") 
    ' 数値で指定する場合 
    xxxxxxxx.ForeColor = System.Drawing.Color.FromArgb(0, 255, 0)

    参考 https://learn.microsoft.com/ja-jp/dotnet/api/system.drawing.color.fromargb?view=net-6.0

  • .NET6のランタイムがインストールされているか調べる方法

    .NET6 のアプリケーションを動作させるために、Windowsに「.NET6のランタイム」がインストールされているかを調べた。同じ方法で、「.NET core」のランタイムがインストールされているかも調べることができる。(.NET6 は、Core系の系譜なので)

    ランタイムがインストールされているかどうかは、Powershellを開いて、下記のコマンドを実行する。

     dotnet --list-runtimes

    .NETのランタイムがインストールされていないときは、dotnetコマンドがエラーになる。dotnetコマンドが正常に実行されれば、ランタイムのリストが表示される。

    .NET6などのランタイムがインストールされているときの例)

    PS C:\>  dotnet --list-runtimes 
    Microsoft.AspNetCore.App 3.1.23 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] 
    Microsoft.AspNetCore.App 3.1.25 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] 
    Microsoft.AspNetCore.App 5.0.10 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] 
    Microsoft.AspNetCore.App 5.0.15 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] 
    Microsoft.AspNetCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] 
    Microsoft.AspNetCore.App 6.0.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] 
    Microsoft.AspNetCore.App 6.0.3 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] 
    Microsoft.AspNetCore.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App] 
    Microsoft.NETCore.App 3.1.23 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 
    Microsoft.NETCore.App 3.1.25 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 
    Microsoft.NETCore.App 5.0.10 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 
    Microsoft.NETCore.App 5.0.15 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 
    Microsoft.NETCore.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 
    Microsoft.NETCore.App 6.0.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 
    Microsoft.NETCore.App 6.0.3 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 
    Microsoft.NETCore.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App] 
    Microsoft.WindowsDesktop.App 3.1.23 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] 
    Microsoft.WindowsDesktop.App 3.1.25 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] 
    Microsoft.WindowsDesktop.App 5.0.10 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] 
    Microsoft.WindowsDesktop.App 5.0.15 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] 
    Microsoft.WindowsDesktop.App 5.0.17 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] 
    Microsoft.WindowsDesktop.App 6.0.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] 
    Microsoft.WindowsDesktop.App 6.0.3 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] 
    Microsoft.WindowsDesktop.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App] 
    PS C:\>

    .NET6などのランタイムがないときの例)

    PS C:\>  dotnet --list-runtimes 
    dotnet : 用語 'dotnet' は、コマンドレット、関数、スクリプト ファイル、または操作可能なプログラムの名前として認識されま 
    せん。名前が正しく記述されていることを確認し、パスが含まれている場合はそのパスが正しいことを確認してから、再試行してく 
    ださい。 
    発生場所 行:1 文字:2 
    +  dotnet --list-runtimes 
    +  ~~~~~~ 
        + CategoryInfo          : ObjectNotFound: (dotnet:String) [], CommandNotFoundException 
        + FullyQualifiedErrorId : CommandNotFoundException 
    PS C:\>

  • .NET Core 3.1をAzure上でサポート期間後も使い続けられるのか?

    LTSの .NET Core 3.1が2022年12月3日に延長サポートが終了する。オンプレミスの環境ならば、自己責任で使い続けられるのだが、Azure上だとどうなるのかが気になり調べていた。それでやっと見つけたのが、下記の記事だ。

    https://azure.microsoft.com/ja-jp/updates/extended-support-for-microsoft-net-core-31-will-end-on-3-december-2022/

    https://azure.microsoft.com/ja-jp/updates/netcore31/

    2022年12月3日を過ぎても、Functions でホストされているアプリケーションは引き続き実行され、アプリケーションは影響を受けないとのこと。いきなり使えなくなるということはなさそうだ。サポート切れ後に、新しく.Net Core 3.1でデプロイできるのかどうかは不明だが、この書き方だと当面は大丈夫そうではある。

    しかし、Azure側の推奨としては、「潜在的なサービスの中断やセキュリティの脆弱性を回避するには、2022 年 12 月 3 日までに、Functions アプリケーションをランタイム バージョン 4.x (.NET 6 を使用する)に更新」することが求められている。何かセキュリティ的な問題が発生した場合には、短い期間で.NET Core 3.1のアプリケーションの実行が打ち切られるということもあり得るということ。さっさとLTSの.NET6に移行しろということだ。

    Azure App Serviceのインスタンスでも、App Service でホストされているアプリケーションは引き続き実行され、既存のワークロードには影響しないとのこと。ただし、同じように.NET6への移行が推奨されている。

  • .NET6で、gitignoreを生成する

    .NET6SDKがインストールされていれば、コマンドを実行するだけでgitignoreを生成できる。

    プロジェクトの状況を見ているわけではなく、テンプレートを生成してくれるだけなので、後から実態に合わせて編集する必要はある。それから、空のフォルダ上でも、”.gitgnore”は生成できる。

    PS C:\Dev\test> dotnet new gitignore 
    .NET 6.0 へようこそ! 
    --------------------- 
    SDK バージョン: 6.0.100 
    テレメトリ 
    --------- 
    .NET ツールは、エクスペリエンスの向上のために利用状況データを収集します。データは Microsoft によって収集され、コミュニティと共有されます。テレメトリをオプトアウトするには、好みのシェルを使用して、DOTNET_CLI_TELEMETRY_OPTOUT 環境変数を '1'  または 'true' に設定できます。 
    .NET CLI ツールのテレメトリの詳細をご覧ください: https://aka.ms/dotnet-cli-telemetry 
    ---------------- 
    ASP.NET Core の HTTPS 開発証明書をインストールしました。 
    証明書を信頼するには、'dotnet dev-certs https --trust' (Windows および macOS のみ) を実行します。 
    HTTPS の詳細については、https://aka.ms/dotnet-https を参照してください 
    ---------------- 
    最初のアプリを作成するには、https://aka.ms/dotnet-hello-world を参照してください 
    最新情報については、https://aka.ms/dotnet-whats-new を参照してください 
    ドキュメントを探索するには、https://aka.ms/dotnet-docs を参照してください 
    GitHub で問題の報告とソースの検索を行うには、https://github.com/dotnet/core を参照してください 
    'dotnet --help' を使用して使用可能なコマンドを確認するか、https://aka.ms/dotnet-cli にアクセスしてください 
    -------------------------------------------------------------------------------------- 
    テンプレート "dotnet gitignore ファイル" が正常に作成されました。 
    PS C:\Dev\test>

    初回のみ、いろいろと表示された。コマンドの実行の2回目からは、「テンプレート “dotnet gitignore ファイル” が正常に作成されました。」とだけ表示される。

  • Visual Studio 2019で.net6のアプリは開発できない。

    Visual Studio 2019と .net6 の組み合わせで開発できるかを試そうとしたのだが、.net6のダウンロードページには、Visual Studio 2019 は入っておらず、Visual Studio 2022からだった。

    https://dotnet.microsoft.com/download/dotnet/6.0

    .net6 のVisual Studioのサポートバージョン

    Visual Studio support
    Visual Studio 2022 (v17.0)
    Visual Studio 2022 for Mac (v17.0)

    https://dotnet.microsoft.com/download/dotnet/6.0

    ダメ元で、.net6をインストールして、Visual Studio 2019 を立ち上げて、新規プロジェクトを作ろうとしたが、core 3.1か. net5しか選択できなかった。

    .net6 のプレビュー版では、Visual Studio 2019が使えたところがあったので、対応するかと思っていたのだが、対応せず。Visual Studioのバージョンアップも必要だ。