2015-01-15 84 views
2

与ASP.net vNext/Core CLR的非托管代码互操作的故事将会如何(如果有的话)?与ASP.net中的非托管代码进行互操作vNext

关键位(DllImport和好友)似乎存在以允许非托管代码互操作,但包装和部署等工作在这种情况下会如何工作? vNext/CoreFX中的基本构建工件不再显示为程序集,而是NuGet程序包。那么在那种情况下,我们将如何使新的project.json系统工作,以便我们P/Invoking到的非托管dll也包含在生成的NuGet包中?

或者我在谈论尚未考虑的情景(或者更令人失望,不会发生)?

回答

5

这个故事还没有完全充实,但已经有如何做到这一点的例子。最终,我们(微软团队正在研究这些)正在研究一些场景,以使NuGet包更好地支持包中的本地内容。

要查看其中的一个示例,Kestrel web server拥有一些自己的托管代码,并且在其NuGet包中包含libuv以实现跨平台的高效异步IO实现。

因为NuGet中还没有内置的通用解决方案,所以Kestrel的构建脚本使用一些custom actions将原生内容包含在NuGet包中。然后加载libuv就有some code,根据它运行的环境动态地找出要加载哪个本地libuv。

所以,是的,这有点麻烦,但它确实有效,而且这对团队的优先级列表来说是非常重要的。

+0

这很好听。 如果我们采用您的假设libuv软件包,我们是否可以创建一个单独的xplat nuget软件包(包括本机windows/unix/osx二进制文件),还是我们必须使用每个平台的软件包? – jumpinjackie 2015-01-16 10:10:43

+0

@JackieNg一个包裹来统治他们所有的,都是这个想法,就像Kestrel包,这不是假设 - 这是一个真正的包。它具有在Win7 +,Win2K8 R2 +,OS X和* nix上运行所需的功能。 – Eilon 2015-01-16 16:19:15