Dot-Net
PCL 中不存在 Assembly.GetExecutingAssembly
我在 VB、VS2012 中設置了一個 PCL,並將其設置為 Profile 78(WinRT、WinPhone8、.NET 4.5)。我沒有
GetExecutingAssembly可用的Assembly。據此,它應該可供 PCL 使用。唯一可用的方法是Assembly.Load().有人我應該怎麼做嗎?例如,這是真的嗎,我的環境是否搞砸了,是否有其他訪問
GetExecutingAssembly方式Imports System.Reflection?還有其他想法嗎?
一般來說,您應該使用類似的東西
typeof(MyType).GetTypeInfo().Assembly而不是Assembly.GetExecutingAssembly(). GetExecutingAssembly 基本上必須檢查呼叫堆棧以找出呼叫它的方法,然後查找相應的程序集。如果方法曾經跨程序集邊界內聯,這可能會中斷,這就是為什麼 GetExecutingAssembly 方法不在 Profile 78(以及用於 Windows Store 應用程序的 .NET)使用的“新”反射表面區域中的原因。
在 PCL 中,這種分離確實很深而且相當細緻。
在此了解作為平台配置文件的可移植類庫不存在是至關重要的。在編譯您的 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 }這種方法只會在沙盒程序集環境中為您提供可訪問的程序集。但它為您提供瞭如何訪問您不應該訪問的“東西”的起點。