.NET MAUI RC3を試してみる（前編）

# .NET MAUI がRC3に到達

https://devblogs.microsoft.com/dotnet/dotnet-maui-rc-3/

.NET6と同時に出る予定だった.NET MAUIも遂にRC3まで来ました。  
興味はあるけどリリースされてから、という人も多いと思います。  
まずデフォルトがどんなコードかチェックするべくコンパイルしてみました。

プロジェクト作成直後のソースはこちら。

https://github.com/hqf00342/MauiApp1

テンプレートソースコードの解説記事は中編を参照してください

https://qiita.com/hqf00342/items/8859d273006554b7828d

## 前提
- Windows10 (21H2) で実行
- **Windows用アプリ** を作成。Android, iOS,等は今回省いています。 
- 前編ではなるべくコード変更せず、Windowsでコンパイル成功するまでとします。


## 準備：VisualStudio 2022Preview

[インストーラーをダウンロードし](https://visualstudio.microsoft.com/ja/vs/preview/)インストールすれば終わりです。
オプションはMAUIだけ選択、14GBあります。追加でAndroidSDKをインストールする人はで空き容量に気を付けましょう。
![vs2022-preview.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54535/dd85fac0-9cc6-02cd-1ad1-b27ccdf860a3.png)

## 準備：開発者モード

Windows用アプリを開発するには「**設定**」で開発者モードをオンにする必要があります。
![dev-mode.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54535/d1e4feb0-97c5-5ffc-d966-2398ee35779d.png)

準備は以上で終了です。

## プロジェクトの作成

早速.NET MAUIプロジェクトを作成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54535/55682948-6eff-b467-5cef-1813d55324aa.png" width="70%">

**「.NET MAUI アプリ（プレビュー）」** テンプレートから作成します。しばらくするとソリューションが作成されます。プラットフォームは5種類対応しているようですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54535/b9828dd9-336a-bce3-6933-e20a250ee5ce.png)

## Android SDK

しばらくするとAndroidSDKのインストールを促してきます。
今回はAndroid向けにはコンパイルしないのでインストールせず、キャンセルしました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54535/ae0fdc60-fcdc-7cf3-6fc0-4c0267b19523.png" width="70%">

## Andriod,iOSを無効化

このプロジェクトをこのままコンパイルしても「Android SDKがありません」と出てコンパイルエラーとなります。今回はWindowsだけとするので他のプラットフォーム対応を削除します。

csprojファイルを直接編集します。
```xml:MauiApp1.csproj
	<PropertyGroup>
		<TargetFrameworks>net6.0-android;net6.0-ios;net6.0-maccatalyst</TargetFrameworks>
		<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net6.0-windows10.0.19041.0</TargetFrameworks>

        <!-- 省略 -->

		<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'ios'">14.2</SupportedOSPlatformVersion>
		<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'maccatalyst'">14.0</SupportedOSPlatformVersion>
		<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'android'">21.0</SupportedOSPlatformVersion>
		<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
		<TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
		<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'tizen'">6.5</SupportedOSPlatformVersion>
	</PropertyGroup>
```

このようになっているので `TargetFrameworks` の1行目と `SupportedOSPlatformVersion` から windows 以外の4行を削除します。

```xml:MauiApp1.csproj (Windows-only)
	<PropertyGroup>
		<TargetFrameworks Condition="$([MSBuild]::IsOSPlatform('windows'))">$(TargetFrameworks);net6.0-windows10.0.19041.0</TargetFrameworks>

        <!-- 省略 -->

		<SupportedOSPlatformVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</SupportedOSPlatformVersion>
		<TargetPlatformMinVersion Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows'">10.0.17763.0</TargetPlatformMinVersion>
	</PropertyGroup>
```

## コンパイル、実行

これでWindowsだけで動くバイナリーをコンパイルできます。
こんなアプリが出来上がります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54535/62447916-6a61-b789-62da-224e68110270.png" width="70%">

「Click me」というボタンがあり、クリックするとカウントアップする仕組みになってます。

ちなみにReleaseビルドしたときのbinフォルダのサイズは220MB・・・。  
なかなか気軽なアプリではなさそうな気配です。

この時点のソースコードをGitHubにアップしておきます。csprojだけ変更しています。

https://github.com/hqf00342/MauiApp1