技術メモ

【C#,VB.NET】.NET Framework 4.8から.NET6へコンバートする(try-convertを利用する)。その他コンバート後の注意点まとめ

try-convertというツールを利用して、以下の手順でコンバートする(Visual Studio 2022で作成した.NET Frramework4.8のWindowsフォームの前提)。

コンバート手順

※実行する前に全ファイルを別フォルダなどにコピーしてバックアップしておくこと!
 コンバートは自動でバックアップしてくれず、そのままプロジェクトが書き換えられるので注意!

    1. Windowsのスタートメニューから、Visual Studio2022(のフォルダの方)→x64 Native Tools Command Prompt for VS 2022をダブルクリックして起動
    2. 「dotnet tool install -g try-convert」を実行し、try-convertをインストールする。
      既にインストール済みの場合、「dotnet tool update -g try-convert」を実行し、try-convertを最新版にアップデートする(この記事を作成した際に利用したバージョンは、0.9.232202)
    3. 「cd c:\~(.slnファイルが保存されているパス)」で、.slnファイルが保存されているパスまで移動
    4. 「try-convert」を実行する
    5. しばらく待ち、「Conversion complete!」と表示されればコンバート完了!
    6. .slnファイルをダブルクリックし、Visual Studioを起動する
    7. ビルドを試すと、次のエラーが表示される。
      「エラー NETSDK1136 Windows フォームまたは WPF を使用しているとき、またはそのようなプロジェクトまたはパッケージを参照しているときには、ターゲット プラットフォームを Windows に設定する必要があります (通常は TargetFramework プロパティに ‘-windows’ を含めることによる)。」
    8. ソリューションエクスプローラーからプロジェクト名を右クリックし、プロパティをクリック。表示された画面の「アプリケーション」のターゲットOSが「(なし)」になっているので「Windows」を指定する。
      ターゲットフレームワークが「.NET 7.0」になっているので「.NET 6.0」を指定し、再度ビルドする。

これで、とりあえず.NET6としてコンバートが完了した。

以下の旧プロジェクトファイルが残るので、これらは削除してOK
「XXX.csproj.old(C#の場合)」「XXX.vbproj.old(VB.NETの場合)」

以下に、コンバート後に手修正した問題点を随時追記していく。

警告つぶし

「警告 CA1416 この呼び出しサイトはすべてのプラットフォームで到達可能です。’Font’ は ‘windows’ でのみサポートされています。」というような「CA1416」の警告が出た場合は、とりあえず以下のように警告をつぶすことができる。

C#

#pragma warning disable CA1416
    LabelText.Font = new System.Drawing.Font("Meiryo UI", 21.75F);
#pragma warning restore CA1416

VB.NET

#Disable Warning CA1416
    LabelText.Font = New System.Drawing.Font("Meiryo UI", 21.75F)
#Enable Warning CA1416 

上記のように#から始まるディレクティブを使って、警告がでないようにする。

フォームのデザインがおかしくなる

フォーム自体のフォントが「Yu Gothic UI, 9pt」になるので、これを「MS UI Gothic, 9pt」に変更すれば元のデザインのままになった。

Process.Startが実行時エラーになってしまう

.NET Framework4.8のときは、以下を実行すると既定のブラウザで指定したURLのページが表示されていた

System.Diagnostics.Process.Start("https://juraku-software.net");

しかし、.NET6だとこれを実行すると「System.ComponentModel.Win32Exception: ‘An error occurred trying to start process ‘https://juraku-software.net’ with working directory ‘C:\~\bin\Debug\net6.0-windows’. 指定されたファイルが見つかりません。’」というエラーになってしまう。

そのため、.NET 6では以下のように修正する。

C#

    var processStartInfo = new ProcessStartInfo
    {
        UseShellExecute = true,
        FileName = "https://juraku-software.net"
    };

    System.Diagnostics.Process.Start(processStartInfo);

VB.NET

    Dim processStartInfo As New ProcessStartInfo With {
        .UseShellExecute = True,
        .FileName = "https://juraku-software.net"
    }
    System.Diagnostics.Process.Start(processStartInfo)

こういう実行時エラーが一番怖い・・・挙動を変えないで欲しかった・・・

【C#】フォーム上の全てのLabelの文字色を変更するにはControlsをOfType

フォーム自身(this)のControlsの中から、OfTypeを利用してLabelのみを抜き出せばOK

foreach (Label label in this.Controls.OfType<Label>())
{
    label.ForeColor = Color.Red;
}

また、例えば対象のラベル名がlabel1~label5である場合、以下のように名前でFindすることもできる。

for (int i = 1; i <= 5; i++)
{
    Control label = this.Controls.Find("label" + i, true).FirstOrDefault();
    if (label is Label)
    {
        label.ForeColor = Color.Red;
    }
}

 

【C#】Math.Roundを利用して四捨五入する際にはMidpointRounding.AwayFromZeroを必ず指定する

まず、AwayFromZeroを指定しない場合の例を以下に記載した。
期待通りになる場合と、ならない場合があるので問題に気付きにくく、厄介!

? Math.Round(100.5)
100
? Math.Round(101.5)
102
? Math.Round(102.5)
102
? Math.Round(103.5)
104
? Math.Round(104.5)
104

以下のようにMidpointRounding.AwayFromZeroを指定すると期待した通りに四捨五入してくれる。

? Math.Round(100.5, MidpointRounding.AwayFromZero)
101
? Math.Round(101.5, MidpointRounding.AwayFromZero)
102
? Math.Round(102.5, MidpointRounding.AwayFromZero)
103
? Math.Round(103.5, MidpointRounding.AwayFromZero)
104
? Math.Round(104.5, MidpointRounding.AwayFromZero)
105 

【WebAPI】郵便番号から住所を検索する

Excel APIというサービスを利用すると、簡単に取得できる。

https://api.excelapi.org/post/address?zipcode=1638001

実行結果:東京都新宿区西新宿2丁目8−1 東京都庁

1日1万アクセスまで無料で、Excel以外からのアクセスもOKとのこと。
ありがたいですね。

2023/05/15 追記
これを試したのは夜で、そのときは早かったのですが、翌日の昼間に試したところ、結果が返ってくるまで数十秒かかることがありました。速度が不安定だと使えないので、利用しないことにしました。残念・・・
PostcodeJP」というサービスもあるので、そちらだと夜でも昼間でも安定して(大体20ms~60ms程度で返ってくる)ましたので、件数が少なければこちらの無料プランの方がよさそうです。

【Word,Excel】タイトルバーなど全体が灰色になってしまったのを戻す

今日Excelを開いたら、以下のようにタイトルバーなど全体の色が灰色になってしまっていた…

元の状態に戻すには、画面左上の「ファイル」をクリックし、表示された画面左下の「アカウント」をクリックする(※アカウントが表示されない場合は、Excelの画面幅を広げれば表示される)。

次に、Officeテーマを「濃い灰色」から「カラフル」に変更すれば元に戻る!(この設定を変更するとWordの背景色もカラフルになる)。

戻ったあと。よかったよかった。

 

【Slack,zoom,Google Meet,Teams】カメラをオンにできない。デバイスマネージャにも表示されない。

先に解決方法から

今回の原因は、キーボードのFnキーでWebカメラの機能がOFFになっていたことが原因だった…。ONにしたら問題なくビデオ通話ができるようになった。

Fn+F10キーを押すとカメラのON/OFFが切り替わる(機種によって違うはず)

事象

昨日までは問題なくビデオ通話ができていたのに、本日は「カメラが接続されていません」などのエラーメッセージが表示されてしまうようになった。

Slack

Windowsの設定を確認し、Slackにカメラへのアクセスを付与してください。

zoom

カメラ欄に何も表示されない

Google Meet

カメラが見つかりません。システム設定で、カメラが使用できる状態にあることを確認します。使用できない場合は、カメラを設定してください。設定後、ブラウザの再起動が必要な場合があります。

Teams

カメラが接続されていません

デバイスマネージャ

カメラの欄が無くなってしまっている。

デバイスマネージャを見て、カメラが無くなっていたので、ドライバの問題かと思い色々と試したが解決せず、結局はFn+F10キーを押してカメラをONにするだけだった…。
横のF9キーが音量を上げる役割のため、間違えて押してしまったのかも。
にしても、デバイスマネージャから見えなくなるのも分かりにくいと思う。

 

【Git for Windows】アップデートに失敗する

Git CMDを起動し「git update-git-for-windows」を実行したところ、「curl: (60) SSL certificate problem: unable to get local issuer certificate」エラーが発生した。

ウィルス対策ソフトによりブロックされていたことが原因であった。
ブロックを解除したところ、以下のように更新された。
git update-git-for-windows
Git for Windows 2.39.0.windows.2 (64-bit)
Update 2.39.1.windows.1 is available
Download and install Git for Windows 2.39.1 [N/y]? y
################################################################################################################ 100.0%

Gitも脆弱性の修正が定期的に行われているので、更新を忘れないようにしたい。
参考:「Git」に3件の脆弱性 ~修正版のv2.39.1が公開