1

Raygun.io (5.2.0) を使用している Windows 10 ストア アプリケーションに取り組んでいます。アプリを数回リリースしました (最新は 12 月中旬)。Rayguns の Web インターフェイスで、以前のバージョンからのログが表示されます。次のバージョンを公開する前にアプリをテストしているときに、アプリが .NET ネイティブ ツールチェーンを使用してビルドされている場合に例外を送信すると、Raygun が動作しない (= クラッシュする) ことがわかりました。簡単な UWP テスト アプリでこれを再現できます。

public sealed partial class MainPage : Page
{
    //private readonly RaygunClient _raygunClient;

    public MainPage()
    {
        InitializeComponent();

        RaygunClient.Attach("<app_key>");
        //_raygunClient = new RaygunClient("<app_key>");
    }

    private async void OnClick(object sender, RoutedEventArgs e)
    {
        try
        {
            // this is crashing the app when project is build using .NET native toolchain
            // it is not even throwing exception
            //await _raygunClient.SendAsync(new InvalidOperationException("Raygun Test"));
            await RaygunClient.Current.SendAsync(new InvalidOperationException("Raygun Test")); // (1)
            Status.Text = "Ok";
        }
        catch (Exception exception) // (2)
        {
            Status.Text = $"Failed with {exception.Message}";
        }
    }
}

https://github.com/MindscapeHQ/raygun4netでサポートされているプラ​​ットフォーム/フレームワークを確認すると、明示的に UWP をサポートしていないようです。

更新: アプリケーションは行 (1) の後に強制終了されます。(2) でキャッチされる例外はありません。イベント ビューでは次のことがわかります。

Faulting application name: rayguntest.exe, version: 1.0.0.0, time stamp: 0x56a0edc9
Faulting module name: mrt100_app.dll, version: 1.0.23406.0, time stamp: 0x561408ce
Exception code: 0x80000003
Fault offset: 0x000000000000a0ad
Faulting process id: 0x305c
Faulting application start time: 0x01d1545a0fea5649
Faulting application path: C:\Projects\rayguntest\rayguntest\bin\x64\Release\AppX\rayguntest.exe
Faulting module path: C:\Program Files\WindowsApps\Microsoft.NET.Native.Runtime.1.1_1.1.23406.0_x64__8wekyb3d8bbwe\mrt100_app.dll
Report Id: 52bbeeb5-97c6-4814-b5dc-51ee6c3fa9bd
Faulting package full name: 6ca59c51-ed22-482b-acf6-12d241079f4d_1.0.0.0_x64__1d8r4kqm7qz2y
Faulting package-relative application ID: App
4

2 に答える 2

3

調査を完了しましたが、これは実際には .NET Native 内のバグです。問題は、一部のケースで、無効なキャストが関係するすべてのケースを適切に処理できなかったことです。具体的には、配列を複数のジェネリック パラメーターを持つジェネリック型にキャストします。SimpleJson.SerializeValue: https://github.com/MindscapeHQ/raygun4net/blob/67c4bb9fd660afb91d62e9333d75a36a85ee5d4f/Mindscape.Raygun4Net/SimpleJson.cs#L1016を調べることで、Raygun で問題が発生する場所を確認できます。

回避策の 1 つは、最初からこのコード パスで配列をシリアル化しないようにすることです。もう 1 つの方法は、RayGun にパッチを適用して、最初に配列の大文字と小文字をチェックし、実行しようとしている他のすべての当て推量を回避することです。

例外が表示されない理由は、ランタイムがさまざまなアサートとフォール トラフに対してかなり防御的であるため、これらの場合に OS FailFast を呼び出すためです。

それが役立つことを願っています。

于 2016-01-26T22:30:22.660 に答える
0

マイクロソフトからの抜粋:

必要なメタデータまたは実装コードが実行時に存在しない場合、.NET ネイティブ ランタイムは例外をスローします。これらの例外を防ぎ、.NET ネイティブ ツール チェーンに必要なメタデータと実装コードが確実に含まれるようにするには、ランタイム ディレクティブ ファイルを使用します。これは、実行時にメタデータまたは実装コードを使用できる必要があるプログラム要素を指定する XML ファイルであり、それらへの実行時ポリシー。

Microsoft on .NET Native and Compilationから:

.NET ネイティブ ツール チェーンによって生成された結果のアプリは、プロジェクト ディレクトリの Debug または Release ディレクトリにある ilc.out という名前のディレクトリに書き込まれます。次のファイルで構成されています。

•<em> appName.exe。appName .dll 内の特別なメイン エクスポートに制御を単純に転送するスタブ実行可能ファイル。

•<em>appName.dll、すべてのアプリケーション コードを含む Windows ダイナミック リンク ライブラリ、.NET Framework クラス ライブラリおよび依存関係のあるサードパーティ ライブラリのコード。また、Windows との相互運用やアプリ内のオブジェクトのシリアル化に必要なコードなどのサポート コードも含まれています。

• mrt100_app.dll、ガベージ コレクションなどのランタイム サービスを提供するリファクタリングされたランタイム。

于 2016-01-21T15:44:37.893 に答える