Amaguri をストアに申請しました(Desktop Bridge で2点躓きました……
執筆日時:
WPF アプリをストアに申請したのは2作目ですが、また新しく躓きました!
ターゲット フレームワーク '.NETCore,Version=v5.0' の mscorlib を解決できませんでした
Windows Application Package プロジェクトに Amaguri.WPF の参照を追加するとコケました。
プロジェクト システムでエラーが発生しました。
— だるやなぎ准将 (@daruyanagi) September 24, 2018
ターゲット フレームワーク '.NETCore,Version=v5.0' の mscorlib を解決できませんでした。これは、ターゲット フレームワークがインストールされていない場合、またはフレームワーク モニカーの形式が正しくない場合に発生する可能性があります。 pic.twitter.com/gvVyEI3GxP
最初、このエラーをみてもサッパリ意味が分からなかったのですが、そのままパッケージのビルドを進めてみると――
なんだ、そういうことか! Desktop Bridge を利用するには .NET Framework 4.6.1 が必要なのだそうです。Amaguri はなぜか .NET Framework 4.5 で開発されていたので、フレームワークをアップデートして解決しました。
"プロセス起動" に関連した System.Diagnostics.Process.Start への参照があります
んー? 無視していいのかなぁ…… System.Diagnostics.Process.Start() が S mode でダメかもって怒られら pic.twitter.com/RUBZha1fH5
— だるやなぎ准将 (@daruyanagi) September 24, 2018
Desktop Bridge アプリは System.Diagnostics.Process.Start() で外部アプリを起動することができないらしい。ハイパーリンクをクリックしたらウチのサイトにジャンプするというだけの処理なのだけど……うーん。
private void Hyperlink_Click(object sender, RoutedEventArgs e) { System.Diagnostics.Process.Start("https://blog.daruyanagi.jp/"); }
最初はこの処理を削るしかないのかなと思っていたのですが、DesktopBridge.Helpers という NuGet を導入して「UWP で実行されている時だけ System.Diagnostics.Process.Start() を実行しない」という処理を加えてみると、認定キットに合格することができました。
private void Hyperlink_Click(object sender, RoutedEventArgs e) { if (!IsRunningAsUwp()) { System.Diagnostics.Process.Start("https://blog.daruyanagi.jp/"); } }public bool IsRunningAsUwp() { DesktopBridge.Helpers helpers = new DesktopBridge.Helpers(); return helpers.IsRunningAsUwp(); }
IsRunningAsUwp() は公式サイトにあるサンプルコードそのままです。ソースコードをのぞいてみたのですが、GetCurrentPackageFullName() という API を呼んでみてエラーが出るかどうかで判別してるようですね。なるほでぃうす。
さてはて、S Mode でテストしてないので「クリップボードの画像をデスクトップに保存する」機能あたりでクラッシュしそうな気もするのですが、そのままストアに通ってくれるとありがたいなぁ。