【问题标题】:Why can't I put [assembly:Dependency()] above a class?为什么我不能将 [assembly:Dependency()] 放在一个类之上?
【发布时间】:2017-03-13 02:43:03
【问题描述】:

我正在尝试使用this answer 在 Xamarin 中实现一些特定于平台的代码,但是在将特定于平台的类设置为依赖项时遇到了问题。我收到以下编译器错误,在标签的assembly 字下划线:

程序集和模块属性必须位于文件中定义的所有其他元素之前,除了 using 子句和外部别名声明。

我有以下代码:

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);
    }
}
}

我错过了什么?

【问题讨论】:

  • 您向我们展示的代码上方是否有任何内容?我希望至少会有一些using 声明。
  • 这个 sn-p 在命名空间声明中吗?组件属性必须应用在它之外。
  • 我已经从代码中添加了namespaceusing 声明。
  • 因此“命名空间 MyApp_Xamarin.Droid”是错误所指的“元素”之一。属性声明必须在此之前移动。
  • @Exec - 新问题进入新问题。 如果它们相关,您可能需要链接回上一个。而且,(我会在这里听起来有点苛刻)通过仔细阅读您已经给出的错误消息,确保您的下一个问题没有得到回答。

标签: c# xamarin.forms


【解决方案1】:

正如错误所说,程序集属性必须在文件中的大多数其他程序元素之前声明。命名空间声明 (namespace MyApp_Xamarin.Droid) 就是这些元素之一。您必须在此之前移动属性:

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

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

【讨论】:

    【解决方案2】:

    将特定于平台的类设置为条目或任何控制器的依赖项的问题。

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

    程序集和模块属性必须位于文件中定义的所有其他元素之前,除了 using 子句和外部别名声明。

    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);
    
                    }
                }
    
        }
    }
    

    在 Class is not correct way 第一个代码是我编写类方式程序集之前,这段代码是

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

    在命名空间第二个代码添加程序集之前,此代码是

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

    【讨论】:

      【解决方案3】:

      尝试使用

      使用系统;使用 System.Reflection;使用 System.Security.Permissions;

      【讨论】:

      • 他为什么要尝试使用你的建议?
      • 试过了,没用,但代码甚至没有使用它(灰色)。
      • Assembly 表示 dll 或 exe。如果您想使用现有的 dll 或必须从您的操作系统兼容地检查 dll,您可以使用 using。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      • 2016-01-21
      • 1970-01-01
      相关资源
      最近更新 更多