rksoftware

Visual Studio とか C# とかが好きです

プロジェクト ファイルを編集して .NET 5 プロジェクトにする

以前に .NET 5 を試してみる記事を書きました。
その際は、Visual Studio 2019 Preview の GUI でポチポチして .NET Core 3.1 のプロジェクトを .NET 5 にしました。

今回は、プロジェクト ファイルを直接編集して .NET 5 プロジェクトにしてみます。

■ プロジェクト ファイルを開く

プロジェクト ファイルは <プロジェクト名>.csproj (C# の場合) というファイルです。エクスプローラやコンソールから開いてもいいですし、Visual Studio を使っていれば Visual Studio 内で開いてもいいです。
Visual Studio 内で開く場合は、ソリューションエクスプローラで該当のプロジェクトを右クリック プロジェクト ファイルの編集 で開けます。

■ ファイルの編集

開いたファイルは、例えば .NET Core 3.1 のコンソールアプリでは次のようになっていました。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>

</Project>

.NET 5 にするには TargetFrameworknet5.0 と書き換えます。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net5.0</TargetFramework>
  </PropertyGroup>

</Project>

簡単ですね。

.NET 5 の WinForms で 表示が崩れる場合

.NET 5 の WinForms でプロジェクトを新規作成し設定を変えずに Form にコントロールを置いて実行すると高 DPI 環境で表示が崩れます。

■ 表示例

.NET Core 3.1 の場合

f:id:rksoftware:20201005014636j:plain

.NET 5 の場合

f:id:rksoftware:20201005014650j:plain

■ 対応方法

app.manifest ファイルを作成します。
ソリューションエクスプローラーで右クリック 追加 > 新しい項目 > 全般 > アプリケーション マニフェスト ファイル でファイルを作成します。デフォルトでは app.manifest となりました(作成時に変更可)。 ファイルの中の dpiAware のセクションがコメントになっています。

<!-- アプリケーションが DPI 対応であり、それ以上の DPI で Windows によて自動的にスケーリングされないことを
     示します。Windows Presentation Foundation (WPF) アプリケーションは自動的に DPI に対応し、オプトインする必要は
     ありません。さらに、この設定にオプトインする .NET Framework 4.6 を対象とする Windows Forms アプリケーションは、
     app.config ファイルで 'EnableWindowsFormsHighDpiAutoResizing' 設定を 'true' に設定する必要があります。-->
<!--
<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
  </windowsSettings>
</application>
-->

このコメントを外します。

<!-- アプリケーションが DPI 対応であり、それ以上の DPI で Windows によて自動的にスケーリングされないことを
     示します。Windows Presentation Foundation (WPF) アプリケーションは自動的に DPI に対応し、オプトインする必要は
     ありません。さらに、この設定にオプトインする .NET Framework 4.6 を対象とする Windows Forms アプリケーションは、
     app.config ファイルで 'EnableWindowsFormsHighDpiAutoResizing' 設定を 'true' に設定する必要があります。-->
<application xmlns="urn:schemas-microsoft-com:asm.v3">
  <windowsSettings>
    <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
  </windowsSettings>
</application>

これでビルドをして実行すると、期待通りに動作しました。

f:id:rksoftware:20201005014636j:plain

簡単ですね。

秋葉原 C# もくもく会 #139 勉強会を開催しました

■ C# もくもく会

C# もくもく会 #139 を開催しました。

C# もくもく会 は東京の秋葉原で毎週木曜日に開催している .NET 系の勉強会です。
もくもく自習を基本とし、分からないことを教えあったり情報共有したりしている会です。 定期開催していますので、お時間のある時に遊びに来ていただければと思います。
ちょっと詰まった時、ネット上で聞くのははずかしいなぁ、という課題のできた時などにも思い出していただけると嬉しいです。
f:id:rksoftware:20201004030403j:plain

■ 今週の成果発表

今週も、もくもくの日でした。

  • C# 9!

ちなみにこの勉強会ですが、実は公序良俗に反しなければどのような技術を扱っても大丈夫です。そもそも C# エンジニアが C# だけしか使わないというわけではありませんし。

■初心者歓迎

このもくもく会には、入門者の方も多くご参加いただいています。 突然 C# やらなければならなくなって途方に暮れている方、何となく C# をやってきたけど改めて見直してみたい方なども大歓迎です。
入門セミナー代わりでのご参加も歓迎です。プログラミング入門者の方も是非遊びに来てください。

特に C# で課題をお持ちでなくても是非遊びに来てください。

■ 目指す勉強会スタイル

世界一敷居の低い勉強会を目指しています。

何か聞きたいことがある場合は、聞く相手を決めずに独り言のようにつぶやくと誰かが拾ってくれる

何か共有したい情報を見つけた場合も、聞く相手を決めずに独り言のようにつぶやくと誰かが拾ってくれる

そんなスタイルでやっています。

■ 次回予定

次回は 2020/10/08 に開催予定です。

C# に関心のある方、是非遊びに来てください。

Visual Studio の 16.7.5 がリリースされました

Visual Studio のアップデート 16.7.5 がリリースされました。

■ 更新内容

問題の対策

  • C++ 関連の問題が 10 件対策されています

今回は C++ 関連ということで、C++ を書かれている方には申し訳ございませんが、私が C++ を書かないので慌ててアップデートしなくて良いかもしれません。しかし折角ですし、素早くアップデートしましょう。

■ 更新方法

Visual Studio の更新はメニューの ツール > ツールと機能を取得 で開くインストーラーから行えます。

Visual Studio 2019 Preview 版 をインストールする

先日 .NET 5 を試してみる記事を書きました。

しかしなんと! 大事な Visual Studio の Preview 版のインストールについて書いていなかったので追加で書いておきます。

■ Visual Studio の Preview 版 をインストールする

Visual Studio 2019 の Preview 版のインストーラを次のサイトよりダウンロードできます。

または

ダウンロードしたインストーラでインストールします。
私がダウンロードした Enterprise 版のインストーラは 1.34 MB (エクスプローラ上では 1,375 KB) の .exe ファイルでした。

■ インストールの確認

インストールすると Visual Studio が起動してきます。
起動時のスプラッシュ画面にも PREVIEW と表示されていますが、Visual Studio 本体でも右上に PREVIEW と表示されています。

f:id:rksoftware:20200929160808j:plain

簡単ですね。

.NET 5 RC 1 をインストールする

先日 .NET 5 を試してみる記事を書きました。

しかしなんと! 大事なインストールについて書いていなかったので追加で書いておきます。

■ .NET 5 をインストールする

今現在は SDK 5.0.100-rc.1 という RC 1 版があるので、こちらをインストールします。次のサイトよりインストールします。

私は SDK 5.0.100-rc.1 の Installers の Windows の x64 をダウンロードしました。
ダウンロードすると

  • dotnet-sdk-5.0.100-rc.1.20452.10-win-x64.exe

というファイルがダウンロードされました。このファイルを実行するとインストールできます。

■ インストールの確認

コマンドプロンプトなどを開き

> dotnet --version

とタイプします。次の様に表示されていれば .NET 5 RC 1 インストール成功です。

5.0.100-rc.1.20452.10

簡単ですね。

.NET 5 を RC1 版で動かしてみる

みなさんお待ちかねの .NET 5 のリリースが迫っています。もう少しだけ待ちの日々ですが .NET 5 の RC1 版が公開されて動かすことができます。

そこで、実際に環境を整えて動かしてみましょう。

■ 用意するもの

  • Visual Studio 2019 の Preview 版をインストール
  • .NET 5 SDK をインストール (私は Windows の x64 インストーラーでインストールしました)

■ プロジェクトの作成

dotnet コマンドで作成してもいいのでしょうが、今回は折角インストールしたので Visual Studio 2019 Preview でプロジェクトを作成してみます。
お試しならばコンソールアプリが鉄板ですが、さらに折角なので WPF で行ってみましょう。

WPF App (.NET Core) を選択

f:id:rksoftware:20200926034911j:plain

出来上がったプロジェクトのプロパティを開いて、対象のフレームワーク.NET Core 3.1 になっているのを .NET 5.0 に変更

f:id:rksoftware:20200926034327j:plain

これで実行すれば、.NET 5 の WPF アプリなのですが、実際起動するアプリの見た目は普通の WPF アプリなので .NET 5 のコードを書いて観ます。
.NET 5 で使える C# 9 の新機能に Records という機能があります。これを試してみます。

■ C# 9.0

お試しコードは先の ブログ記事 で書かれている LoginResource レコードにしてみます。

using System.Windows;

namespace WpfApp1
{
    /// <summary>
    /// Records
    /// </summary>
    public record LoginResource(string Username, string Password, bool RememberMe);

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button_Click(object sender, RoutedEventArgs e)
        {
            // Records を new
            LoginResource lr = new("name", "pass", true);

            MessageBox.Show(lr.ToString());
        }
    }
}
<Window x:Class="WpfApp1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp1"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Button Content=".NET 5" Click="Button_Click"/>
    </Grid>
</Window>

■ 実行

実行してボタンをクリックしてみます。

f:id:rksoftware:20200926034350j:plain

計画通り! RecordsToString() 結果は分かり易くていいですね。

■ .NET Core 3.1 に戻してみる

計画通り実行されましたが、実際 .NET 5 だから Records を使えていたことを確認するために .NET Core 3.1 に戻してみます。

f:id:rksoftware:20200926034408j:plain

またしても計画通り! Records が使えずエラーになりました。

f:id:rksoftware:20200926034422j:plain

■ さあやってみよう!

ちょっとインストールしてみるだけで、なんと .NET 5 が試せました。簡単ですね。