C#、UWPで謎のエラー

プログラミング

Windows 10をMay 2019 Update(Version 1903)にしたら、Visual Studioで作成中のプロジェクトが謎のエラーを吐く。ひどく参った。
それまでは問題なくビルドもでき、Windows アプリ認定キットでも合格していた。それが、アップデート以降、アプリ認証キットが通らない。
まず気になったのは、これ。

修正されない場合は影響あり: JavaScript の実行時間を高速化するパフォーマンスの最適化として、アプリの展開時にファイル名が “.js” 拡張子で終わる JavaScript ファイルはバイトコードを生成します。この最適化は JavaScript の起動時および継続的な実行時間を大幅に改善します。

いやいや。C#だって。JavaScriptじゃないよ。
というわけで、いろいろエラーメッセージで検索すると、
「そのままストアにアップロードしたらエラー出なかったので無視してOK」
「Visual Studio 2017を2019にアップグレードしたらエラー消えた」
といったのが出てくる。確かに前者はOK。しかし、不安は残る。後者も試したが状態変わらず。


エラーはこんなやつだ。一部個人情報っぽい部分は消してある。

展開と起動のテスト
不合格
バイトコードの生成
エラーが見つかりました: バイトコード生成テストで、以下のエラーが検出されました:
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 Microsoft.Windows.SoftwareLogo.Tests.Utility.IsPackageWWA(AppXPackage package) 場所 Microsoft.Windows.SoftwareLogo.Tests.BytecodeGenerationCheck.BytecodeGenerationCheck.ExecuteSharedValidation(String manifestFilePath, String packageFullName) 場所 Microsoft.Windows.SoftwareLogo.TestBase.TestBase.ExecuteTest()
修正されない場合は影響あり: JavaScript の実行時間を高速化するパフォーマンスの最適化として、アプリの展開時にファイル名が “.js” 拡張子で終わる JavaScript ファイルはバイトコードを生成します。この最適化は JavaScript の起動時および継続的な実行時間を大幅に改善します。
修正方法: 問題を解決するために、これらのうち 1 つ以上の手順を必要に応じて考慮してください:
– Visual Studio で F5 キーを押してアプリを展開するのではなく、アプリ パッケージを作成してください。
– イベント ログが有効になっていることを確認します
– すべての JavaScript ファイルが構文的に有効です。有効でないそれぞれのファイルはパッケージから除外します
– アプリを配信する前に、以前のすべてのバージョンをアンインストールする必要があることに注意してください
それ以外の場合は、パッケージからそれぞれのファイルを除外します。
不合格
バックグラウンド タスクの取り消しハンドラー
エラーが見つかりました: バックグラウンド タスクの取り消しハンドラーの検証で、以下のエラーが検出されました:
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 Microsoft.Windows.SoftwareLogo.Tests.CancelationHandlerValidation.CancelationHandlerValidation.ExecuteSharedValidation(String manifestFilePath, String packageFullName) 場所 Microsoft.Windows.SoftwareLogo.TestBase.TestBase.ExecuteTest()
修正されない場合は影響あり: バックグラウンド タスクに対する取り消し要求を処理できないアプリは、強制終了されることになります。
修正方法: バックグラウンド タスクには、取り消しイベント ハンドラーを実装する必要があります。
不合格
プラットフォーム バージョンの起動
エラーが見つかりました: 上位 OS バージョン検証で、以下のエラーが検出されました:
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 Microsoft.Windows.SoftwareLogo.Tests.Utility.LaunchAppTest(String packageFullName, String manifestFilePath, String testName) 場所 Microsoft.Windows.SoftwareLogo.Tests.HighOSVersionLaunchCheck.HighOSVersionLaunchCheck.Test(UapApp uapApp) 場所 Microsoft.Windows.SoftwareLogo.TestBase.TestBase.ExecuteTest()
修正されない場合は影響あり: アプリでは、OS に依存する機能を提供する目的でバージョン情報を使用することはできません。
修正方法: 推奨されている方法を使用して、OS で使用できる機能を確認してください。詳細については、下のリンクを参照してください。
オペレーティング システムのバージョン
不合格
アプリの起動
エラーが見つかりました: アプリの起動テストで、以下のエラーが検出されました:
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 Microsoft.Windows.SoftwareLogo.Tests.Utility.LaunchAppTest(String packageFullName, String manifestFilePath, String testName) 場所 Microsoft.Windows.SoftwareLogo.Tests.LaunchAppCheck.LaunchAppCheck.Test(UapApp uapApp) 場所 Microsoft.Windows.SoftwareLogo.TestBase.TestBase.ExecuteTest()
修正されない場合は影響あり: 起動に失敗するアプリはユーザー エクスペリエンスの質の低下をもたらすため、Microsoft Store で受け付けられません。
修正方法: アプリを調査してデバッグし、問題を特定したうえで修正します。
アプリの起動のトラブルシューティング
不合格
クラッシュとハング
エラーが見つかりました: クラッシュとハングのテストで、以下のエラーが検出されました:
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 Microsoft.Windows.SoftwareLogo.Tests.WindowsErrorReporting.WindowsErrorReporting.ExecutePostTest(TaskData taskData) 場所 Microsoft.Windows.SoftwareLogo.Tests.WindowsErrorReporting.WindowsErrorReporting.ExecuteTest()
修正されない場合は影響あり: 応答を停止したりクラッシュしたりするアプリは、データ損失を引き起こす可能性があり、ユーザー エクスペリエンスの質を低下させます。
修正方法: アプリを調査してデバッグし、問題を特定したうえで修正します。
Microsoft Store アプリをデバッグしています
パッケージの準拠のテスト
不合格
アプリケーション数
エラーが見つかりました: アプリのカウント テストで、以下のエラーが検出されました:
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 Microsoft.Windows.SoftwareLogo.Tests.ApplicationCount.ApplicationCount.ExecuteSharedTests(EnumApplicationType appType, String manifestFilePath) 場所 Microsoft.Windows.SoftwareLogo.TestBase.TestBase.ExecuteTest()
修正されない場合は影響あり: Microsoft Store では、マニフェストに定義された複数のアプリを含むパッケージは許可されません。
修正方法: アプリ マニフェストでは、パッケージごとに 1 つのアプリしか定義できません。詳細は以下のリンクを参照してください:
認定要件
不合格
アプリ マニフェスト
エラーが見つかりました: アプリのマニフェスト テストで、以下のエラーが検出されました:
パッケージ ———_1.0.0.0_x64__y0h78jc5jp8at が見つかりませんでした
修正されない場合は影響あり: Microsoft Store の認定要件に違反しているアプリは、Microsoft Store に提出できません。
修正方法: アプリ マニフェストには、必要なフィールドすべてに対する有効なエントリが含まれている必要があります。上記のマニフェスト エントリを修正してください。詳細は以下のリンクを参照してください:
認定要件
合格
パッケージ サイズ
合格
リソース パッケージ
不合格
制限された名前空間
エラーが見つかりました: 制限された名前空間のテストで、次のエラーが検出されました:
修正されない場合は影響あり: Microsoft Store では、制限された名前空間をアプリ マニフェストで参照することは許可されません。
修正方法: アプリ マニフェストから、制限された名前空間を削除します。
Windows セキュリティ機能のテスト
不合格
Binary Analyzer
エラーが見つかりました: Binary Analyzer テストで、以下のエラーが検出されました:
修正されない場合は影響あり: 利用可能な Windows 保護をアプリが使用しない場合、ユーザーはマルウェアの攻撃を受けやすくなります。
修正方法: アプリをリンクするときに、必要なリンカーのオプション (SAFESEH、DYNAMICBASE、NXCOMPAT、および APPCONTAINER) を適用します。詳細は以下のリンクを参照してください:
Binary Analyzer のエラーの修正
合格
禁止されたファイルのアナライザー
合格
プライベート コード署名
サポートされている API のテスト
不合格
サポートされている API
エラーが見つかりました: サポート済み API のテストで、以下のエラーが検出されました:
OSMinVersion 属性で指定されたバージョンは有効ではありません。
テスト SupportedApis でエラーが発生しました。
修正されない場合は影響あり: Microsoft Store アプリ用の Windows SDK の一部ではない API を使用することは、Microsoft Store の認定要件に違反しています。
修正方法: エラー メッセージを調べて、Microsoft Store アプリ用 Windows SDK に含まれていない API を特定します。アプリがデバッグ構成に組み込まれている場合や .NET Native (該当するとき) に対応していない場合、このような環境ではサポートされていない API の使用が考えられるため、このテストに不合格になる可能性があることに注意してください。リリース構成でアプリをリセットし、.NET Native 対応 (該当するとき) にしてください。 詳細は以下のリンクを参照してください:
Microsoft Store アプリにおける Windows API の代替候補。
アプリ マニフェスト リソースのテスト
不合格
アプリ リソース
エラーが見つかりました: アプリのリソース検証テストで、以下のエラーが検出されました:
テストの実行がブロックされました。検証の再実行を試みてください。テストの実行がブロックされたままの場合は、サポートにお問い合わせください。
修正されない場合は影響あり: アプリのマニフェストで宣言されている文字列またはイメージが正しくないと、アプリのインストールは失敗する可能性があります。アプリのインストール時に以下のエラーが発生した場合は、アプリのロゴまたはアプリで使用されるその他のイメージが正しく表示されない可能性があります。
修正方法: エラー メッセージで示された問題を修正します。詳細は以下のリンクを参照してください:
アプリ パッケージのリソースの検証
不合格
ブランド化
エラーが見つかりました: ブランド検証テストで次のエラーが発生しました:
System.IO.DirectoryNotFoundException: パス ‘C:\Program Files\windowsapps\—-_1.0.0.0_x64__—–\AppXManifest.xml’ の一部が見つかりませんでした。 場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 場所 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize) 場所 System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy) 場所 System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn) 場所 System.Xml.XmlTextReaderImpl.FinishInitUriString() 場所 System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext) 場所 System.Xml.Linq.XDocument.Load(String uri, LoadOptions options) 場所 Microsoft.Windows.SoftwareLogo.Shared.AppxProgramInventoryHelper.GetAllImagesFromManifestFile(String appxManifestFile, String packageFullName) 場所 Microsoft.Windows.SoftwareLogo.Tests.BrandingValidation.BrandingValidation.ExecuteSharedTests(String packageFullName, String manifestFilePath) 場所 Microsoft.Windows.SoftwareLogo.TestBase.TestBase.ExecuteTest()
修正されない場合は影響あり: Microsoft Store アプリは、すべての機能が揃い、完全に機能することが期待されています。テンプレートまたは SDK サンプルなどから既定のイメージを使用するアプリは、ユーザー エクスペリエンスの質が低く、Store カタログで簡単に識別できません。
修正方法: 既定のイメージを、アプリをより端的に表したものに交換してください。
デバッグ構成のテスト
合格
デバッグの構成
ファイルのエンコードのテスト
不合格
UTF-8 ファイル エンコード
エラーが見つかりました: UTF-8 ファイル エンコード テストで、以下のエラーが検出されました:
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 Microsoft.Windows.SoftwareLogo.Tests.Utility.IsPackageWWA(AppXPackage package) 場所 Microsoft.Windows.SoftwareLogo.Tests.FileEncodingCheck.FileEncodingCheck.ExecuteSharedTests(String packageFullName, String manifestFilePath) 場所 Microsoft.Windows.SoftwareLogo.TestBase.TestBase.ExecuteTest()
修正されない場合は影響あり: HTML、CSS、および JavaScript ファイルは、対応する BOM (バイト オーダー マーク) を付けて UTF-8 形式でエンコードする必要があります。これは、バイトコード キャッシュを利用するため、およびその他のランタイム エラーの状態を回避するためです。
修正方法: 影響を受けたファイルを開き、Visual Studio の [ファイル] メニューから [別名で保存…] オプションを選択します。[保存] ボタンの横にあるドロップダウン コントロールを選択して、[エンコード付きで保存…] を選択します。[保存オプションの詳細設定] ダイアログで、[Unicode (UTF-8 シグネチャ付き)] オプションを選択して、[OK] ボタンをクリックします。
アプリ機能テスト
合格
特殊用途の機能
Windows ランタイム メタデータの検証
不合格
ExclusiveTo 属性
エラーが見つかりました: ExclusiveTo 属性テストで、次のエラーが検出されました:
修正されない場合は影響あり: Windows ランタイム メタデータ検証に合格しないアプリケーションは、Microsoft Store で許可されません。
修正方法: Windows ランタイム クラスが別のクラスに対して ExclusiveTo としてマークされているインターフェイスを実装していないことを確認してください。
不合格
型のロケーション
エラーが見つかりました: 型のロケーション テストで、次のエラーが検出されました:
修正されない場合は影響あり: Windows ランタイム メタデータ検証に合格しないアプリケーションは、Microsoft Store で許可されません。
修正方法: すべての Windows ランタイム型のメタデータが、アプリ パッケージ内の、名前空間が一致する最長の名前を持つ winmd ファイル内にあることを確認してください。
不合格
型名の大文字小文字の区別
エラーが見つかりました: 型名の大文字小文字の区別テストで、次のエラーが検出されました:
修正されない場合は影響あり: Windows ランタイム メタデータ検証に合格しないアプリケーションは、Microsoft Store で許可されません。
修正方法: アプリ パッケージ内のすべての Windows ランタイム型に、大文字小文字を区別しない一意の名前が付いていることを確認してください。
Windows ランタイム型名が、アプリ パッケージ内の名前空間名として使用されていないことを確認してください。
不合格
型名の正確性
エラーが見つかりました: 型名の正確性テストで、次のエラーが検出されました:
修正されない場合は影響あり: Windows ランタイム メタデータ検証に合格しないアプリケーションは、Microsoft Store で許可されません。
修正方法: グローバル名前空間内または Windows トップレベル名前空間内に Windows ランタイム型が存在しないことを確認してください。
不合格
一般的なメタデータ正確性
エラーが見つかりました: 一般的なメタデータの正確性テストで、次のエラーが検出されました:
修正されない場合は影響あり: Windows ランタイム メタデータ検証に合格しないアプリケーションは、Microsoft Store で許可されません。
修正方法: Windows Runtime 型の生成に使用しているコンパイラが、最新の Windows ランタイム仕様書と一致していることを確認してください。
不合格
プロパティ
エラーが見つかりました: プロパティ テストで、次のエラーが検出されました:
修正されない場合は影響あり: Windows ランタイム メタデータ検証に合格しないアプリケーションは、Microsoft Store で許可されません。
修正方法: Windows ランタイム クラス上のすべてのプロパティに、get メソッドが指定されていることを確認してください (set メソッドは省略可能です)。
Windows ランタイム型のすべてのプロパティについて、get メソッドの戻り値の型と set メソッド入力パラメーターの型が一致していることを確認してください。
パッケージのサニティ テスト
不合格
プラットフォームに適したファイル
エラーが見つかりました: プラットフォームに適したファイルのテストで、以下のエラーが検出されました:
System.IO.DirectoryNotFoundException: パス ‘C:\Program Files\windowsapps\—–_1.0.0.0_x64__—–\AppXManifest.xml’ の一部が見つかりませんでした。 場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 場所 System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) 場所 System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize) 場所 System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy) 場所 System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn) 場所 System.Xml.XmlTextReaderImpl.FinishInitUriString() 場所 System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext) 場所 System.Xml.Linq.XDocument.Load(String uri, LoadOptions options) 場所 Microsoft.Windows.SoftwareLogo.Tests.PlatformAppropriateFiles.PlatformAppropriateFiles.ExecuteSharedTests(String manifestFilePath) 場所 Microsoft.Windows.SoftwareLogo.TestBase.TestBase.ExecuteTest()
修正されない場合は影響あり: ターゲット プロセッサ アーキテクチャと互換性のないファイルをアプリ パッケージに含めると、実行時にアプリが失敗する可能性があります。
修正方法: バイナリ ファイルのアーキテクチャが、アプリ パッケージ マニフェスト内で指定されている ProcessorArchitecture 属性と互換性があることを確認してください。
プラットフォームに適したファイル
不合格
サポートされているディレクトリ構造のチェック
エラーが見つかりました: サポートされているディレクトリ構造のテストで次のエラーが発生しました:
System.IO.DirectoryNotFoundException: パス ‘C:\Program Files\windowsapps\—–_1.0.0.0_x64__—–‘ の一部が見つかりませんでした。 場所 System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) 場所 System.IO.FileSystemEnumerableIterator`1.CommonInit() 場所 System.IO.FileSystemEnumerableIterator`1..ctor(String path, String originalUserPath, String searchPattern, SearchOption searchOption, SearchResultHandler`1 resultHandler, Boolean checkHost) 場所 System.IO.Directory.GetFiles(String path, String searchPattern, SearchOption searchOption) 場所 Microsoft.Windows.SoftwareLogo.Tests.SupportedDirectoryStructure.SupportedDirectoryStructure.AnalyzeAllFiles(String filePath) 場所 Microsoft.Windows.SoftwareLogo.Tests.SupportedDirectoryStructure.SupportedDirectoryStructure.ExecuteSharedTests(String manifestFilePath) 場所 Microsoft.Windows.SoftwareLogo.TestBase.TestBase.ExecuteTest()
修正されない場合は影響あり: サポートされている MAX_PATH を超えると、実行時にアプリが失敗します。
修正方法: ディレクトリ構造またはファイル名を短くしてください。
リソース使用量のテスト
不合格
WinJS バックグラウンド タスク
エラーが見つかりました: WinJS バックグラウンド タスクのテストで次のエラーが発生しました:
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。 場所 Microsoft.Windows.SoftwareLogo.Tests.Utility.IsPackageWWA(AppXPackage package) 場所 Microsoft.Windows.SoftwareLogo.Tests.CloseBackgroundTasksCheck.CloseBackgroundTasksCheck.ExecuteSharedTests(String packageFullName, String manifestFilePath) 場所 Microsoft.Windows.SoftwareLogo.TestBase.TestBase.ExecuteTest()
修正されない場合は影響あり: close() を呼び出さないバックグラウンド タスクを含むアプリは、バッテリを消耗する可能性があります。
修正方法: バックグラウンド タスクを更新して close() を呼び出してください。
WinJS バックグラウンド タスク

ここ数日いろいろ試していたが、ふと気づいた。ターゲットはどうなってるんだっけ?
Creators Updateだった。もうサポート終わってるじゃん!
ということで、2018以降のSDKをインストールして、ターゲットを変えたら、エラーも出ずに認証が通った。おお。そういうことか。
次回、忘れないようにしよう。

コメント

タイトルとURLをコピーしました