【发布时间】:2014-04-25 12:40:00
【问题描述】:
我有 C# .NET4 库项目,我想在 Windows Store App 中使用。由于不支持 .NET 版本,我无法直接引用此 DLL,因此我正在考虑编写 Windows Store App Library,它将包装对 C# (.NET4) 库的调用。关于如何实现这一点的任何提示?
求救
非常感谢!
【问题讨论】:
标签: c# dll windows-runtime windows-store-apps
我有 C# .NET4 库项目,我想在 Windows Store App 中使用。由于不支持 .NET 版本,我无法直接引用此 DLL,因此我正在考虑编写 Windows Store App Library,它将包装对 C# (.NET4) 库的调用。关于如何实现这一点的任何提示?
求救
非常感谢!
【问题讨论】:
标签: c# dll windows-runtime windows-store-apps
这不仅仅是包装和引用一个库,它是关于在运行时/框架的 Windows Store App 版本中缺少一些基本类型、方法、扩展等,这将禁止你仅仅包装/链接完整的 .NET 4 库程序集。您将无法为不兼容的平台构建/链接它,即使您可以构建它,它也不会在该平台的 CLR 上执行。由于您必须创建一个特定的 Windows 应用程序项目,Visual Studio 将对特定 .NET 框架的引用添加到您的项目中,并且在编译时,您甚至无法构建该项目,因为 .NET 4 程序集将引用不在项目中的依赖项,也不与运行时目标兼容。
您的建议(包装)就像我说“我有这个 Windows 库,我想在 Linux 上使用,我可以将调用包装在一个层中,然后在 Linux 上部署吗?”答案是“没有(1)仿真或(2)重新实现”。当然,CLR / .NET 字节码比 Linux 与 Windows 更兼容,但概念仍然相同。 CLR/框架的一个版本!=另一个版本。目标运行时环境中完全缺少一些类型/库调用。
您可能需要创建相关库的替代实现。
我能建议的最好方法是使用 Reflector 或 dotPeek 之类的工具来反编译 .NET4 程序集,看看可以将其中的多少粘贴到便携式或 Windows Store App 项目中。请记住,如果这是第 3 方商业图书馆,您可能会违反许可协议,这取决于您。
使用本指南将缺少的部分替换为该平台的等效部分:http://msdn.microsoft.com/library/windows/apps/br230302.aspx#general
正如指南中所述,您还可以创建一个可移植类库项目来开发一个可从 Windows 应用商店应用程序使用的 .NET Framework 库,但您仍受限于可移植的 API 子集。如果您使用 Reflector 采用上述方法,您实际上可能会发现 .NET 4 程序集没有使用任何重要的非可移植框架类型/引用,并且可以轻松地重新编译。另一方面,也可能是相反的情况。
【讨论】: