だるろぐ

明日できることは、今日しない。

Amaguri をストアに申請しました(Desktop Bridge で2点躓きました……

blog.daruyanagi.jp

WPF アプリをストアに申請したのは2作目ですが、また新しく躓きました!

ターゲット フレームワーク '.NETCore,Version=v5.0' の mscorlib を解決できませんでした

Windows Application Package プロジェクトに Amaguri.WPF の参照を追加するとコケました。

最初、このエラーをみてもサッパリ意味が分からなかったのですが、そのままパッケージのビルドを進めてみると――

f:id:daruyanagi:20180924190106p:plain

なんだ、そういうことか! Desktop Bridge を利用するには .NET Framework 4.6.1 が必要なのだそうです。Amaguri はなぜか .NET Framework 4.5 で開発されていたので、フレームワークをアップデートして解決しました。

"プロセス起動" に関連した System.Diagnostics.Process.Start への参照があります

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 を呼んでみてエラーが出るかどうかで判別してるようですね。なるほでぃうす。

github.com

さてはて、S Mode でテストしてないので「クリップボードの画像をデスクトップに保存する」機能あたりでクラッシュしそうな気もするのですが、そのままストアに通ってくれるとありがたいなぁ。