Windows 8 在Win8和WP8应用程序中共享静态库 我有一个C++语言编写的静态库,我希望能在.NET中编写Windows 8和Windows Phone 8应用程序。
我希望通过设置我的解决方案(如下所示),尽量减少要维护的独立项目的数量: 尝试#1:只有UI项目是特定于平台的Windows 8 在Win8和WP8应用程序中共享静态库 我有一个C++语言编写的静态库,我希望能在.NET中编写Windows 8和Windows Phone 8应用程序。,windows-8,windows-phone-8,portable-class-library,Windows 8,Windows Phone 8,Portable Class Library,我希望通过设置我的解决方案(如下所示),尽量减少要维护的独立项目的数量: 尝试#1:只有UI项目是特定于平台的 问题:< /强>似乎可移植类库不支持以任何形式包含本机C++代码。 一种在Windows 8和Windows Phone 8应用程序中包含本地C++的方法是通过创建Windows运行时组件。不幸的是,针对Win8和Wp8的WRC项目是不同的项目类型;没有选项创建针对多个平台的Windows运行时组件 因此,为每个目标平台创建Windows运行时组件项目会产生以下结果: 尝试#2-UI
<强>问题:< /强>似乎可移植类库不支持以任何形式包含本机C++代码。
一种在Windows 8和Windows Phone 8应用程序中包含本地C++的方法是通过创建Windows运行时组件。不幸的是,针对Win8和Wp8的WRC项目是不同的项目类型;没有选项创建针对多个平台的Windows运行时组件
因此,为每个目标平台创建Windows运行时组件项目会产生以下结果: 尝试#2-UI项目是特定于平台的,LegacyLib包装器也是如此 问题:当我试图从LegacyWrc_Win8项目中引用LegacyLib时;我看到以下警告: 不建议添加对“LegacyLib”的引用,因为它与Windows应用商店应用程序不兼容 构建环境表示,要使LegacyLib静态库与我的Win8 Windows运行时组件兼容,我必须在LegacyLib项目配置中启用Windows应用商店应用程序支持(忽略警告只会导致以后出错):- 项目属性>配置属性>常规>项目默认值
- 将Windows应用商店应用程序支持设置为“是”
我错过什么了吗?这似乎是一件很平常的事。是否有其他人经历过这一过程并提出了替代/更好的方法 编辑以确保完整性 这就是我最后做的
MySolution.sln
|
+- LegacyApiLib (virtual folder to group projects below)
| |
| +- CommonCppSource Common C++ source code used by LegacyWrc_*.vcxproj projects
| | below
| |
| +- LegacyPcl.csproj Portable class library with C# API interfaces only; no
| | implementation classes.
| |
| +- LegacyWrc_Win8.vcxproj Platform-specific Windows Runtime Component project - includes
| | legacy C++ files, and uses C++/CX to expose static methods and
| | classes to .NET in Win8.
| |
| +- LegacyWrc_Wp8.vcxproj Platform-specific Windows Runtime Component project - includes
| legacy C++ files, and uses C++/CX to expose static methods and
| classes to .NET in WP8.
|
+- SampleApp (virtual folder to group projects below)
|
+- SampleAppBL.csproj Portable class library containing the app's business logic.
| References LegacyPcl.csproj for legacy API interface definitions.
| Business logic is written against those interfaces; never against
| specific classes. The Win8 or WP8 apps will reference the
| appropriate Windows Runtime Component project, create or register
| the concrete classes that implement the legacy API interface, and
| either pass it into the BL or register it with IOC mechanism. In
| this way, SampleAppBL.csproj never has to know about (or
| reference) any of the WRC projects.
|
+- SampleAppUI_Win8.csproj Platform-specific App project - References LegacyWrc_Win8.vcxproj
| and SampleAppBL. Contains minimal platform-specific Win8 UI code.
|
+- SampleAppUI_Wp8.csproj Platform-specific App project - References LegacyWrc_Wp8.vcxproj
and SampleAppBL. Contains minimal platform-specific WP8 UI code.
我意识到,LeaCyyApILB导出的几个辅助类可以用托管C++编写而不是用C语言编写。这意味着我可以将它们与WRC项目捆绑在一起,这简化了一些事情。
正如您所发现的,本机库需要为每个平台分别编译,因此不能直接从可移植类库中引用 我建议使用抽象模式,允许您通过可移植类库共享大部分.NET代码(即模型和视图模型)。在PCL中,为本机库中公开的功能创建接口或抽象类。然后在特定于平台的项目中实现这些功能,将调用转发到本机库。最后,使用依赖注入来连接这些接口的实现,以便您可以从共享PCL调用它们 以下是几篇关于这方面的博客文章:MySolution.sln
|
+- Library (virtual folder to group projects below)
| |
| +- LegacyLib.vcxproj Static Library project - Platform-independant, native C++ code using STL & CRT. Just enough C++/CX to make some types available to .NET and expose a few static methods.
| |
| +- LegacyWrc_Win8.csproj Platform-specific Windows Runtime Component project - References LegacyLib, adds some types, wrappers, interfaces, etc. written in C#.
| |
| +- LegacyWrc_Wp8.csproj Platform-specific Windows Runtime Component project - References LegacyLib, adds some types, wrappers, interfaces, etc. written in C#.
|
+- SampleApp (virtual folder to group projects below)
|
+- CommonAppSrc C# source code (e.g. Model and ViewModel classes).
|
+- SampleApp_Win8.csproj Platform-specific App project - References LegacyWrc_Win8, includes files from CommonAppSrc using "Add as Link".
|
+- SampleApp_Wp8.csproj Platform-specific App project - References LegacyWrc_Wp8, includes files from CommonAppSrc using "Add as Link".
MySolution.sln
|
+- Library (virtual folder to group projects below)
| |
| +- NativeCode (virtual folder to group projects below)
| | |
| | +- CommonLibSrc Native C++ source code using STL & CRT. Just enough C++/CX to make some types available to .NET and expose a few static methods.
| | |
| | +- LegacyLib_Win8.vcxproj Platform-specific Static Library project - Includes files from CommonLibSrc using "Add as Link".
| | |
| | +- LegacyLib_Wp8.vcxproj Platform-specific Static Library project - Includes files from CommonLibSrc using "Add as Link".
| |
| +- DotNetWrapper (virtual folder to group projects below)
| |
| +- CommonWrcSrc Platform-independant C# source code (types, wrappers, interfaces, etc. for LegacyLib support) for the Windows Runtime Component projects.
| |
| +- LegacyWrc_Win8.csproj Platform-specific Windows Runtime Component project - References LegacyLib_Win8, includes files from CommonWrcSrc using "Add as Link".
| |
| +- LegacyWrc_Wp8.csproj Platform-specific Windows Runtime Component project - References LegacyLib_Wp8, includes files from CommonWrcSrc using "Add as Link".
|
+- SampleApp (virtual folder to group projects below)
|
+- CommonAppSrc Platform-independant C# source code (e.g. Model, ViewModel).
|
+- SampleApp_Win8.csproj Platform-specific App project - References LegacyWrc_Win8, includes files from CommonAppSrc using "Add as Link".
|
+- SampleApp_Wp8.csproj Platform-specific App project - References LegacyWrc_Wp8, includes files from CommonAppSrc using "Add as Link".
MySolution.sln
|
+- LegacyApiLib (virtual folder to group projects below)
| |
| +- CommonCppSource Common C++ source code used by LegacyWrc_*.vcxproj projects
| | below
| |
| +- LegacyPcl.csproj Portable class library with C# API interfaces only; no
| | implementation classes.
| |
| +- LegacyWrc_Win8.vcxproj Platform-specific Windows Runtime Component project - includes
| | legacy C++ files, and uses C++/CX to expose static methods and
| | classes to .NET in Win8.
| |
| +- LegacyWrc_Wp8.vcxproj Platform-specific Windows Runtime Component project - includes
| legacy C++ files, and uses C++/CX to expose static methods and
| classes to .NET in WP8.
|
+- SampleApp (virtual folder to group projects below)
|
+- SampleAppBL.csproj Portable class library containing the app's business logic.
| References LegacyPcl.csproj for legacy API interface definitions.
| Business logic is written against those interfaces; never against
| specific classes. The Win8 or WP8 apps will reference the
| appropriate Windows Runtime Component project, create or register
| the concrete classes that implement the legacy API interface, and
| either pass it into the BL or register it with IOC mechanism. In
| this way, SampleAppBL.csproj never has to know about (or
| reference) any of the WRC projects.
|
+- SampleAppUI_Win8.csproj Platform-specific App project - References LegacyWrc_Win8.vcxproj
| and SampleAppBL. Contains minimal platform-specific Win8 UI code.
|
+- SampleAppUI_Wp8.csproj Platform-specific App project - References LegacyWrc_Wp8.vcxproj
and SampleAppBL. Contains minimal platform-specific WP8 UI code.