System.Reflection.Assembly 不包含“GetExecutingAssembly”的定义

Posted

技术标签:

【中文标题】System.Reflection.Assembly 不包含“GetExecutingAssembly”的定义【英文标题】:System.Reflection.Assembly does not contain a definition for 'GetExecutingAssembly' 【发布时间】:2016-06-09 21:43:30 【问题描述】:

我正在尝试使用 Xamarin.Forms(可移植类库)创建移动应用程序,在以下代码中,我无法使用 `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' 不包含对 'GetExecutingAssembly' 并且没有扩展方法 'GetExecutingAssembly' 接受“System.Reflection.Assembly”类型的第一个参数可以 被发现(您是否缺少 using 指令或程序集 参考?)C:...

我该怎么办?

【问题讨论】:

How to read a resource file within a Portable Class Library?的可能重复 @2kay 同样的错误,即使我在静态模式下调用它.. @Gusman ..我应该做什么:(我厌倦了从 xamarin.forms 读取文件:( 你看帖子了吗??? @Gusman 我正在阅读谢谢 :) 【参考方案1】:
var assembly = Assembly.GetAssembly(typeof(BookPage));

【讨论】:

“System.Reflection.Assembly”不包含“GetAssembly”的定义 我也遇到了同样的问题【参考方案2】:

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

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

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

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

【讨论】:

【参考方案3】:

了解作为平台配置文件的可移植类库/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 

这种方法只会在沙盒程序集环境中为您生成可访问的程序集。但它为您提供了如何访问您不应该访问的“东西”的起点。

【讨论】:

以上是关于System.Reflection.Assembly 不包含“GetExecutingAssembly”的定义的主要内容,如果未能解决你的问题,请参考以下文章