2016-07-12 8 views
4

this answerを使用してXamarinにプラットフォーム固有のコードを実装しようとしていますが、プラットフォーム固有のクラスを依存関係に設定する際に問題が発生しました。私は、次のコンパイラエラーを取得し、タグのassembly単語を強調した:[assembly:Dependency()]をクラスの上に置くことができないのはなぜですか?

アセンブリ、モジュールの属性が句とのexternエイリアス宣言を使用したことを除いて、ファイルに定義されている他のすべての要素を先行しなければなりません。

私は、次のコードは、している:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Reflection; 
using System.Security.Permissions; 

using Android.App; 
using Android.Content; 
using Android.OS; 
using Android.Runtime; 
using Android.Views; 
using Android.Widget; 
using ZXing.Net.Mobile.Forms; 
using Xamarin.Forms; 

namespace MyApp_Xamarin.Droid { 
[assembly: Dependency(typeof(View.ActualPage.BarcodeScannerTest))] 
public class BarcodeScannerTestClass : View.ActualPage.BarcodeScannerTest 
{ 
    public async void Start(INavigation nav, Page page) 
    { 
     var scanPage = new ZXingScannerPage(); 

     scanPage.OnScanResult += (result) => 
     { 
      // Stop scanning 
      scanPage.IsScanning = false; 

      // Pop the page and show the result 
      Device.BeginInvokeOnMainThread(() => 
      { 
       nav.PopAsync(); 
       page.DisplayAlert("Scanned Barcode", result.Text, "OK"); 
      }); 
     }; 

     // Navigate to our scanner page 
     await nav.PushAsync(scanPage); 
    } 
} 
} 

私は何をしないのですか?

+2

あなたが私たちに示したコードの上に何かが現れていますか?少なくとも私は、宣言を使用していることを期待しています。 –

+3

このスニペットは名前空間宣言の中にありますか?アセンブリ属性は、その外側に適用する必要があります。 –

+0

私は 'namespace'と' using'宣言をコードから追加しました。 – Exec

答えて

3

エラーとして、アセンブリ属性は、ファイル内の他のほとんどのプログラム要素の前に宣言する必要があります。名前空間宣言(namespace MyApp_Xamarin.Droid)は、これらの要素の1つです。

[assembly: Dependency(typeof(View.ActualPage.BarcodeScannerTest))] 

namespace MyApp_Xamarin.Droid 
{ 
    public class BarcodeScannerTestClass : View.ActualPage.BarcodeScannerTest 
-3

は、システムを使用して

を使用してみてください。するSystem.Reflectionを使用して、System.Security.Permissionsを使用して、

+0

なぜ彼はあなたの提案を使ってみるべきですか? –

+0

試してみましたが、動作しませんでしたが、コードではそれを使用していません(グレー表示)。 – Exec

+0

アセンブリとは、dllまたはexeを意味します。既存のdllを使用する場合や、使用しているOSとdllの互換性をチェックする必要がある場合に使用できます。 –

0

問題を項目または任意のコントローラーの依存にプラットフォーム固有のクラスを設定して:あなたは、その前に属性を移動する必要があります。

I get the following compiler error, underlined the assembly word of the tag: 

アセンブリ、モジュールの属性は、句とのexternエイリアス宣言を使用したことを除いて、ファイルに定義されている他のすべての要素を先行しなければなりません。いくつかの間違いの上

using CustomrendersAll.customRenders; 
using Xamarin.Forms.Platform.Android; 
using Xamarin.Forms; 

namespace CustomrendersAll.Droid.customRenders 
{ 
[assembly: ExportRenderer (typeof(MyEntry), typeof(customRenderAndriod))] 
    public class customRenderAndriod : EntryRenderer 
    { 
      protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) 
      { 
       base.OnElementChanged(e); 

       if (Control != null) 
       { 
        Control.SetBackgroundColor(global::Android.Graphics.Color.LightGreen); 

       } 
      } 

    } 
} 

コードを下回っているクラスは、正しい方法第一のコードではありません前に、正しい

using CustomrendersAll.customRenders; 
using Xamarin.Forms.Platform.Android; 
using Xamarin.Forms; 
using CustomrendersAll.Droid.customRenders; 
[assembly: ExportRenderer(typeof(MyEntry), typeof(customRenderAndriod))] 
namespace CustomrendersAll.Droid.customRenders 
{ 
    public class customRenderAndriod : EntryRenderer 
    { 
      protected override void OnElementChanged(ElementChangedEventArgs<Entry> e) 
      { 
       base.OnElementChanged(e); 
       if (Control != null) 
       { 
        Control.SetBackgroundColor(global::Android.Graphics.Color.LightGreen); 

       } 
      } 

    } 
} 

です私は、このコードは

[assembly: ExportRenderer(typeof(Pclclass), typeof(customRenderAndriod))] 

前にあるクラスの道アセンブリを書いています名前空間2番目のコードは、このコードを追加するアセンブリです

[assembly: ExportRenderer(typeof(Pclclass), typeof(customRenderAndriod))] 
関連する問題