我正在尝试使用 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'的第一个参数。可以 找到(你错过了使用指令或程序集 参考?)C:......
我该怎么办?
答案 0 :(得分:3)
var assembly = Assembly.GetAssembly(typeof(BookPage));
答案 1 :(得分:1)
至关重要的是要理解 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
}
此方法只会让您获得沙盒装配环境中的可访问程序集。但它为您提供了如何访问"东西的起点。你不应该这样做。
答案 2 :(得分:1)
确保没有在某个地方创建您自己的Assembly类。
如果存在,则编译器将在其中寻找GetExecutingAssembly()
方法。
我不小心这样做了,这就是为什么我在这里。
您可以通过重命名Assembly类或添加特定的位置来修复它,该位置通常由于using语句而遗漏了。
System.Reflection.Assembly.GetExecutingAssembly()
要么
System.Reflection.Assembly.GetAssembly(type)