通用 Windows .NET Native 和 winmd 组件库
Universal Windows .NET Native and winmd component libraries
.NET Native 工具链如何详细处理托管 .winmd 组件库?
我知道 .NET Native 将 DLL 中的所有托管代码合并到一个可执行文件中,并在将其编译为本机时删除未使用的代码。
但是 .winmd 托管库使用什么算法?例如,WinRT 中的后台任务(如音频后台任务)托管在 winmd 库中,然后这些任务托管在系统提供的本机进程中,该进程动态调用提供的 winmd 类。它如何与 .NET Native 概念兼容?
我担心 .NET Native 可能不会将托管 .winmd 代码转换为本机代码,并且环境将回退到 .NET 运行时以在托管 winmd 中执行代码,因此放弃了本机编译可执行文件的优势。或者它是如何工作的?
请提供关于这个不太清楚的事情的信息。在 MSDN 文档中,没有关于托管 winmd 组件库和 .NET Native 工具链的详细信息。
我在 .NET 本机团队工作,我很乐意帮助澄清。
.NET native 确实会将托管的 WinMD 程序集转换为本机代码,并将其与应用程序 DLL 合并(截至今天)。为了让后台任务进程找到那些托管 WinRT 类 的本机代码,我们还修复了应用程序清单以指向现在具有它们的本机代码的应用程序 DLL。任务后台进程会愉快地加载应用程序 DLL,并使用 WinRT 激活 protocol/ABI 激活在应用程序 DLL 中托管的本机代码中实现的托管 WinRT 类型。不需要 JITting。
如您所料,查找哪些 WinRT 类 是从本机代码激活的,存在一些有趣的挑战。今天,我们保守地将托管 WinMD 中的所有 public WinRT 类 视为 .NET 本机编译器中的编译根,以及可从中访问的所有内容。大小有一些影响,但这是与没有可用的 JIT 的权衡。
谢谢,
张一
.NET Native 工具链如何详细处理托管 .winmd 组件库?
我知道 .NET Native 将 DLL 中的所有托管代码合并到一个可执行文件中,并在将其编译为本机时删除未使用的代码。
但是 .winmd 托管库使用什么算法?例如,WinRT 中的后台任务(如音频后台任务)托管在 winmd 库中,然后这些任务托管在系统提供的本机进程中,该进程动态调用提供的 winmd 类。它如何与 .NET Native 概念兼容?
我担心 .NET Native 可能不会将托管 .winmd 代码转换为本机代码,并且环境将回退到 .NET 运行时以在托管 winmd 中执行代码,因此放弃了本机编译可执行文件的优势。或者它是如何工作的?
请提供关于这个不太清楚的事情的信息。在 MSDN 文档中,没有关于托管 winmd 组件库和 .NET Native 工具链的详细信息。
我在 .NET 本机团队工作,我很乐意帮助澄清。
.NET native 确实会将托管的 WinMD 程序集转换为本机代码,并将其与应用程序 DLL 合并(截至今天)。为了让后台任务进程找到那些托管 WinRT 类 的本机代码,我们还修复了应用程序清单以指向现在具有它们的本机代码的应用程序 DLL。任务后台进程会愉快地加载应用程序 DLL,并使用 WinRT 激活 protocol/ABI 激活在应用程序 DLL 中托管的本机代码中实现的托管 WinRT 类型。不需要 JITting。
如您所料,查找哪些 WinRT 类 是从本机代码激活的,存在一些有趣的挑战。今天,我们保守地将托管 WinMD 中的所有 public WinRT 类 视为 .NET 本机编译器中的编译根,以及可从中访问的所有内容。大小有一些影响,但这是与没有可用的 JIT 的权衡。
谢谢, 张一