.net – WinRT不支持Assembly.GetCallingAssembly,但适用于可移
我需要获得一些关于调用我的组件的程序集的元数据.因此,使用Assembly.GetCallingAssembly()似乎很自然.但是,我发现除了
Windows应用商店外,它无处不在.它支持的地方:
> Phone 7.0+ 但是,不支持的位置直接位于Windows应用商店应用程序中.我可以创建一个可移植的类库,然后从Windows应用程序内部调用它,但我不能直接将它放在Windows应用商店应用程序/类库中. 是否有解决方法来获取由Assembly提供的元数据类型或其他方式?
Assembly.GetCallingAssembly没有在WinRT中公开 – 据说是因为它的语义在内联等方面是不可靠的(
source),但它也不适合Windows Store应用程序中允许的受限反射.你可以得到像Assembly.GetCurrentAssembly()这样的东西,例如:
typeof(MainPage).GetTypeInfo().Assembly 但那根本不一样.使用受限制的反射模型,也无法在.NET中获得运行时的堆栈跟踪. 至于可移植类库,我当然会说可以在可移植类库中支持Assembly.GetCurrentAssembly(),但不是在WinRT中 – 如果它不在那个平台中就有意义.但实际上,它似乎存在于包括WinRT在内的所有配置文件中,除了WinRT .NET4.5之外 – 似乎必须在某种程度上忽略这种不一致性.因此该方法存在于WinRT中(而且还没有进行重定向),但在编译时可用的元数据中不可见. 因此,您可以使用反射调用该方法: var assembly = (Assembly) typeof(Assembly).GetTypeInfo() .GetDeclaredMethod("GetCallingAssembly") .Invoke(null,new object[0]); 我认为在Windows应用商店应用中这种方法的不可见性是“我们希望这会消失”. (这个答案只涉及“我可以”而不是“我应该”). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 对于ARM Windows GCC工具链,Eclipse无法识别stdint.h中的类
- windows-server-2008 – 如何使AD高度可用于将其用作LDAP服
- Windows使用Cmder
- windows – 你应该在捕获图像之前进行碎片整理吗?
- windows-server-2008-r2 – mscorsvw.exe(.NET运行时优化服
- .net – 如何使用AutoIt或Windows UI Automation单击应用程
- windows-phone-7 – 如何从代码中获取Windows Phone系统语言
- windows – 加载Powershell历史记录
- 在Windows上托管node.js应用程序的最佳方法是什么?
- 为Windows创建Ruby应用程序