Assembly.GetCallingAssembly
沒有暴露在WinRT中 - 據說是因爲其語義的內聯等(source)的臉是不可靠的,但它也並不適合過多在Windows Store應用程序允許受限制的反映。你可以得到類似Assembly.GetCurrentAssembly()
,例如像這樣:
typeof(MainPage).GetTypeInfo().Assembly
但是,這是不一樣的。使用受限反射模型,在.NET中儘可能在運行時獲取堆棧跟蹤也是不可能的。
至於便攜式類庫,我想說Assembly.GetCurrentAssembly()
通常在可移植類庫中得到支持,但只是在WinRT中不支持 - 如果它不在該平臺中,這將有意義。但實際上,它似乎在除WinRT + .NET4.5以外的所有配置文件(包括WinRT)中都存在 - 看起來在這種不一致的情況下必定會有某種疏忽。因此,WinRT中存在的方法是(此外,還沒有類型的重定向正在進行),但在編譯時可用的元數據中不可見。
因此,您可以調用該方法與反思:
var assembly = (Assembly) typeof(Assembly).GetTypeInfo()
.GetDeclaredMethod("GetCallingAssembly")
.Invoke(null, new object[0]);
我相信在Windows應用商店中的應用程序這種方法的不可見性是「我們希望這將消失」。
(這個答案只關心「我可以」而不是「我應該」)。