System.Reflection.Assembly 不包含 'GetExecutingAssembly' 的定义

System.Reflection.Assembly does not contain a definition for 'GetExecutingAssembly'

我正在尝试使用 Xamarin.Forms(便携式 Class 库)创建移动应用程序,在以下代码中,我无法使用 `GetExecutingAssembly:

    using System;
    using Xamarin.Forms;
    using Xamarin.Forms.Xaml;
    using System.Reflection;
    using System.IO;
    using PCLStorage;    

    namespace MnakbAlshaba
    {
        public class BookPage : ContentPage 
        {

            //      
            private void SetBookPagesRows()
            {
                var assembly = typeof(BookPage).GetTypeInfo().Assembly.GetExecutingAssembly();//error
                var resourceName = "MyCompany.MyProduct.MyFile.txt";

                using (Stream stream = assembly.GetManifestResourceStream(resourceName))
                using (StreamReader reader = new StreamReader(stream))
                {
                    string result = reader.ReadToEnd();
                }
            }
        }
    }

我收到以下错误:

'System.Reflection.Assembly' does not contain a definition for 'GetExecutingAssembly' and no extension method 'GetExecutingAssembly' accepting a first argument of type 'System.Reflection.Assembly' could be found (are you missing a using directive or an assembly reference?) C:...

我该怎么办?

var assembly = Assembly.GetAssembly(typeof(BookPage));

了解 Portable Class Library / PLC 作为平台配置文件不存在是至关重要的。 运行 应用程序在编译 PLC 项目时不会受到与编译器相同的限制。

这是突破障碍的一种方法:

using System;
...
try {
    var getExecutingAssembly = typeof(Assembly).GetRuntimeMethods()
                                .Where(m => m.Name.Equals("GetExecutingAssembly"))
                                .FirstOrDefault();
    var assemblies = getExecutingAssembly.Invoke(null, null);
} catch(Exception exc){
   ... try something else
} finally{
   ... time for some alternative 
}

此方法只会为您提供沙盒程序集环境中的可访问程序集。但它为您提供了一个关于如何访问您不应该访问的 "stuff" 的起点。

确保您没有在某处创建自己的程序集class。
如果存在,编译器将在其中查找 GetExecutingAssembly() 方法。

我不小心做了这件事,这就是我来这里的原因。

您可以通过重命名程序集 class 或添加通常由于 using 语句而被遗漏的特定位置来修复它。

System.Reflection.Assembly.GetExecutingAssembly()
要么 System.Reflection.Assembly.GetAssembly(type)