2015-12-22 5 views
16

私はx86デバッグモードで正常に構築されるxamarin PCLを持っています。リリースモード(x86またはx64)またはx64デバッグモードに切り替えると、実行時の例外が発生します。それはおそらくユニバーサルアプリケーションのリリースをビルドするときに、自分のXamarin PCLがランタイム例外をスローするのはなぜですか?

https://forums.xamarin.com/discussion/57810/issue-with-xamarin-forms-in-windows-uwp-app-compiled-in-the-release-mode

に関係なく、私は私が使用している他のどのようなアセンブリを知りません。どうすればわかりますか?

私のコンピュータはx64です。デバッグまたはリリースでx64を実行すると、

MyApp.Interop.dllの例外 "System.NotImplementedException"が発生します。追加情報Arg_NotImplementedException。

コンストラクタApp()を入力する前に。コンストラクタの呼び出しは次のとおりです。

LoadApplication(new MyApp.App()); 

私がx86をビルドすると、もう少し手に入ります。 MyAppConstructorに入り、xamlコンストラクターが呼び出され、例外が発生します。

System.Private.Reflection.Core.dllのSystem.Reflection.MissingMetadataException AdditionalInfo:Arg_InvokeMethodMissingMetadata、System.EventHandler。詳細については、http://go.microsoft.com/fwlink/?LinkId=623485

を参照してください。Xamlアセンブリのように見えません。どのアセンブリを追加する必要があるのか​​を知るにはどうすればいいですか?

私はデバッグの上に戻したが、私は、例外の詳細を得ることができるように「ネイティブコンパイラを使う」ためにそれを回し:

のx86: 追加情報:型「システム上でデリゲートを作成することはできませんが。 EventHandler 'はInvokeメソッドのメタデータが欠落しています。タイプの例外「System.NotImplementedException」はXamarin.Forms.Platform.UAP.dllで発生したが、ユーザーコードで処理されなかった

追加情報:メソッドの詳細については、http://go.microsoft.com/fwlink/?LinkID=616867

のx64をご覧ください。または操作が実装されていません。

更新:モバイル製品にx64プロセッサが搭載されていないため、x64はXamarinではサポートされていないと思いますか? x86リリースではまだ問題が残っています。 私は私のユニバーサルApp.xaml.cs

MyAppMainPageが、私は私のPCLにロードしようとし、残りはページがで構成されていることをUI要素ですXAMLページです
List<Assembly> assembliesToInclude = new List<Assembly>(); 
    assembliesToInclude.Add(typeof(MyApp.MyAppMainPage).GetTypeInfo().Assembly); 
    assembliesToInclude.Add(typeof(Xamarin.Forms.ImageSource).GetTypeInfo().Assembly); 
    assembliesToInclude.Add(typeof(Xamarin.Forms.StackLayout).GetTypeInfo().Assembly); 
    assembliesToInclude.Add(typeof(Xamarin.Forms.Label).GetTypeInfo().Assembly); 
    assembliesToInclude.Add(typeof(Xamarin.Forms.Button).GetTypeInfo().Assembly); 
    assembliesToInclude.Add(typeof(Xamarin.Forms.FormattedString).GetTypeInfo().Assembly); 
    assembliesToInclude.Add(typeof(Xamarin.Forms.Span).GetTypeInfo().Assembly); 
    assembliesToInclude.Add(typeof(Xamarin.Forms.Image).GetTypeInfo().Assembly); 
    assembliesToInclude.Add(typeof(Xamarin.Forms.ScrollView).GetTypeInfo().Assembly); 
    assembliesToInclude.Add(typeof(Xamarin.Forms.WebView).GetTypeInfo().Assembly); 
    // add this line 
    Xamarin.Forms.Forms.Init(e,assembliesToInclude); // requires the `e` parameter 

で次のアセンブリを追加しようとしています。

私は今、この例外がスローされたx86用参照:

スローSystem.Private.Interop.dll 例外の 'System.PlatformNotSupportedException':スローSystem.Private.Threading.dll 例外の 'System.AggregateException' :System.Private.Reflection.Core.dllの 'System.Reflection.MissingMetadataException'

プラットフォームがサポートされないのはなぜですか? XamarinはUniversalの権利をサポートしていますか?

+1

すべての正しいことをしようとしているようですが、明らかにbinフォルダ内のすべてのファイルを削除して削除しましたか?ビルドログの詳細を表示し、デバッグとリリースを比較することによって手掛かりがありますか –

+0

@JeremyThompsonビルドログの詳細を表示するにはどうすればよいですか? –

+1

Visual Studioで、[ツール] - > [オプション]に移動し、[プロジェクトとソリューション] - > [ビルドと実行]ノードを見つけます。 –

答えて

9

ディレクティブファイルを追加しました。 .rd.xmlの末尾にファイルを追加します。私はMyApp.rd.xmlでした。次に、例外に欠けている型が含まれています。私はSystem.EventHandlerでした。ここに私のコードがあります(おそらく他の2つは必要ありません)。

<?xml version="1.0" encoding="utf-8"?> 
<Directives xmlns="http://schemas.microsoft.com/netfx/2013/01/metadata"> 
<Application> 
    <Type Name="MyApp.MyAppMainPage" Dynamic="Required All" /> 
    <Type Name="System.EventHandler" Dynamic="Required All" /> 
    <Namespace Name="System.Private.Reflection.Core" Serialize="Required All" /> 
</Application> 
</Directives> 

Universal Apps for Xamarinでは、組み込みリソースを読み込むときにアセンブリを含める必要があります。私はあなたがまだ壊れ

foreach (var res in assembly.GetManifestResourceNames()) 
    System.Diagnostics.Debug.WriteLine("found resource: " + res); 

のx64によってあなたが持っているものなリソースを確認することができます

var assembly = typeof(MyAppMainPage).GetTypeInfo().Assembly; 
ImageSource.FromResource("MyApp.Images.Sign.jpg",assembly); 

ImageSource.FromResource("MyApp.Images.Sign.jpg"); 

を変更しなければなりませんでした。

+0

私はUWPの.NETで動作します。これは非常に面白いですし、私は休日の後にそれをより深く見てみたいと思います。あなたが望むなら、私にメールを送ることができます[email protected] –

+0

ありがとう@MattWhilden私はあなたにメールを送りました。ハッピーホリデー! –

+0

@セスキチェン、ありがとう! あなたの方法は私のために働いた。 しかし、私のアプリは現在、Xamarin.Forms.OnPlatform のメタデータの読み込みでクラッシュします。どのように解決するのですか?このタイプをランタイム・ディレクティブに追加しようとしましたが、それは役に立ちません。 – pfedotovsky

関連する問題