SkiaSharp という描画系ライブラリを使おうと思って試行錯誤していたときの備忘録です。
(MAUIでカスタムコントロールでプログレスバーを作るサンプル: 外部リンク)
– – – – – –
目次
前提
- Visual Studio 2022
- Windows 10
- .NET 環境 (MAUI) / バージョンは6~8相当 (執筆時)
ケース別対処法
配置でエラー
ネットワークドライブ上のプロジェクトは対応していません(UWP以降すべて)。そのためローカルドライブに入れるかiSCSIの利用を検討してください。また、githubもネットワークドライブでは使えません。
.NET6 など、以前のバージョンのプロジェクトでエラー
過去に作ったPJでビルドやデバッグが通らない場合、まずは Visual Studio Installer のオプションで .NET6 など以前のフレームワークをインストールしてみます。
さらに理由は不明ですが、たまにプロジェクトやソリューションファイルが破損することがあります。
本来、上記の表示が正しいのですが、まれにiOS等のターゲット項目が出ず、フレームワーク指定がセミコロン形式のみになり壊れることがあります。この場合は完全新規のソリューションとプロジェクトを一旦作成し、そのプロジェクトファイル(.csproj)だけをアプリ名などの固有値以外、そっくりそのままコピーペーストするのが手軽で最善です。
(.NETのバージョンも一緒に上がるかと思いますが、その場合付随するライブラリのバージョンも上げましょう)
参考: プロジェクトの .NET バージョンをアップグレードする拡張機能
https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.upgradeassistant
使い方:
プロジェクトを右クリックして Upgrade → in-place でのアップグレード → .NET バージョンを選択して変換。今まで .Net Framework 時代に開くと自動でバージョンアップグレードを促されていましたが、その機能です。なお、たまに失敗します。
wasm-tools エラー:
以下の対処方法を試してみてください。
C:\Program Files\dotnet\shared 以下の各フォルダにある .NET7 系列をすべて削除するかリネーム等する
※.NET6 の場合。現在プロジェクトで使っているバージョンよりも新しいものが干渉するようです。
※ 削除後のフォルダ階層イメージ:
……
📁 dotnet
📁 shared
📁 Microsoft.AspNetCore.All
📁 (ここは作業不要?)
📁 Microsoft.AspNetCore.App
📁 6.x.x
📁 Microsoft.NETCore.App
📁 6.x.x
📁 Microsoft.WindowsDesktop.App
📁 6.x.x
……
バインディングが使えない (XAMLだけでスライダーの値を別コントロールに連動させるなど)
BindingContext に {x:Reference コントロール名} を指定し、
連動させたいプロパティに {Binding Path=相手のプロパティ名} を指定します。
※事前にカスタムコントロール等のcsファイルで DependencyProperty ( propdp → tab 2回で補完可能) を作成しておくこと
例:
<Label Text="ROTATION"
BindingContext="{x:Reference slider}"
Rotation="{Binding Path=Value}"
... />
<Slider x:Name="slider"
... />
正しく Binding の設定ができると、下記のように Intellisense のコード補完で候補表示がされるようになります。
プロパティバインディングの参考:
https://learn.microsoft.com/ja-jp/dotnet/maui/xaml/fundamentals/data-binding-basics?view=net-maui-8.0
参考:旧バージョンの Visual Studio について:
MAUIを使わない場合、バージョンが2019のほうが安定していることがあります。Visual Studio 2019 インストーラーは下記から入手できます。Community版はこちらからしか入手できません。
https://learn.microsoft.com/ja-jp/visualstudio/releases/2019/release-notes
その他
感想
.NET7 というか、最近のMS系ソフトウェアでまともなのって Office くらいでしょうか ( Teams 除く )。
Windows 10 無料化の時から品質低下のイメージが未だに拭えていないのですが、サブスクリプションでもなんでもちゃんとお金を取って品質を確保したほうがいいと思います。
それとも最近のソフトウェア開発手法に問題があって、Buggy になりがちなんでしょうか??
さすがに開発ツールがバグだらけだと開発どころじゃないですし、VSや.NETのどうしようもないバグのおかげで我々が作ったソフトウェアにも影響するというカオティックな状況になってしまっています。
最近は作業量や負担的には、純粋なデバッグやパフォーマンス改善が4割で、残り6割がVSのバグやひどい仕様への対応です (UWP以降のフレームワークはネットワークドライブ上だと走らないが、デバッグ時のエラーにそこは書かれていないのでしばらく気付けない等) 。
あと正直 MAUI も Xamarin に毛が生えた程度で、下手にプラットフォーム固有コードの余地を残すよりかは、清々しいくらい共通コード一本で完結するとか、MainProgramいじってハンドラ登録しなくてもいいとか、それくらいしてほしいところ。
(おそらく各社、移行が簡単になるとシェア奪われるとか思ってるのかもしれませんが、正直それって競争の停滞化と品質の低下を招くだけなのでやめてほしい (そして彗星の如く現れた強力な奴にかっさらわれて時すでに遅し、となるという))。