System.Reflection.Assembly中没有定义'GetExecutingAssembly'。

3
我正在尝试使用Xamarin.Forms(可移植类库)创建移动应用程序,在以下代码中,我无法使用`GetExecutingAssembly`:

我正在尝试使用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',并且没有找到接受类型为 'System.Reflection.Assembly' 的第一个参数的扩展方法 'GetExecutingAssembly'(是否缺少 using 指令或程序集引用?)C:...

我该怎么办?


1
可能是重复的问题:如何在可移植类库中读取资源文件? - Gusman
@Gusman,我该怎么办:(,从xamarin.forms读文件累死了:( - Mohamad Mahmoud Darwish
你看了这篇文章吗? - Gusman
@Gusman 我在阅读,谢谢 :) - Mohamad Mahmoud Darwish
@Cusman,你的链接帮了我很多..如果我把我的txt文件放在项目资源下,我应该在resourceName中放什么? - Mohamad Mahmoud Darwish
显示剩余2条评论
3个回答

2

请确保你没有自己创建过程序集类。
如果有的话,编译器将在其中查找GetExecutingAssembly()方法。

我之前意外地这样做了,所以才来这里求助。

你可以通过重命名程序集类或添加通常由using语句省略的具体位置来解决这个问题。

System.Reflection.Assembly.GetExecutingAssembly()
或者 System.Reflection.Assembly.GetAssembly(type)


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

12
“System.Reflection.Assembly”不包含“GetAssembly”的定义。 - Mohamad Mahmoud Darwish
我遇到了同样的问题。 - DarioN1

1
重要的是要理解,可移植类库/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 
}

这种方法只能获取沙箱环境中可访问的程序集。但它为您提供了一个起点,以便访问那些您不应该访问的“东西”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接