2016-02-26 112 views
3

我想创建移动应用使用Xamarin.Forms(便携式类库),在下面的代码,我不能用'GetExecutingAssembly:System.Reflection.Assembly不包含定义“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:...

我该怎么办?

+1

[如何读取可移植类库中的资源文件?](http://stackoverflow.com/questions/10963781/how-to-read-a-resource-file-within-a-portable -class-library) – Gusman

+0

@ 2kay即使我在静态模式下调用它也会出现同样的错误.. –

+0

@Gusman ..我该怎么办:(我厌倦了从xamarin.forms中读取文件:( –

回答

3
var assembly = Assembly.GetAssembly(typeof(BookPage)); 
+7

'System.Reflection.Assembly'不包含'GetAssembly'的定义 –

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 
} 

这种做法只会产生你的沙盒装配环境中的访问组件。但是它给了你一个如何访问你不应该访问的“东西”的起点。