为了清楚起见,我遵循MVVM模式,我想构建我的项目,以便我可以在UWP应用程序和标准WPF应用程序之间共享我的模型代码.我要分享的代码没有UI.我可不乐意寻找新的工具来替代我已经使用多年,照顾像记录某些任务的那些思想,连接到一个面向文档的数据库,等等.
我试图围绕我已经拥有的一些代码开始编写UWP包装器并直接引用模型项目.Visual Studio拒绝让这种情况发生,向我显示一条错误消息"无法添加对项目'ACK.Model'的引用".当我试图将模型放在通用库中并从WPF应用程序引用它时,同样的事情发生了.我不是想分享WPF代码.只是没有引用UI库的模型层.
这是一个可怕的命题,因为这意味着如果我想做任何实质性的事情,我必须选择100%跳到UWP或保持100%WPF.NewtonSoft.JSON可能有一个普遍的分布(ASP.NET MVC),但对于ElasticSearch.NET,以及其他需要的工具,使重要的应用程序吗?
我找到了"可移植类库"项目类型隐藏的位置.PCL允许我在WPF和Universal应用程序之间共享我的代码,因为这是其中一个选项.这解决了我的代码的Model部分的简单情况,但我(仍然)不能使用我想要的一些库.仍然有大量我需要的库没有PCL可用.
Ber*_*sch 14
大约一年后,随着Visual Studio 2017的出现,有一个更完整的解决方案.如果您将库定位到.Net Standard,那么该库与.Net Core应用程序和单片.Net目标应用程序兼容.对标准.Net库和API的支持相当完备,对现代C#语言功能的支持也是如此.
现在的一般建议如下:
注意:如果您的库必须与C库或应用程序交互,则必须格外小心以确保加载正确的版本.
似乎有一个解决方案,但它必须由您想要使用的整个工具链采用.当Microsoft在Windows 8中引入Windows应用商店应用时,他们还引入了可移植类库(PCL).PCL的目的是在应用程序的不同部分之间共享代码.
在Visual Studio 2015中创建PCL时,可以指定要从中访问的API类型:
当然,这限制了您可以使用的API,但是大多数您想要使用的API都是正常的,只要它不与UI相关即可.还有其他限制:
但是,您可以将为单个目标平台设计的任何库链接到PCL.它并不理想,但总比没有好.
ASP.NET MVC堆栈已移植到使用PCL,因此您可以直接使用NewtonSoft.JSON以及该应用程序使用的任何其他库.但是,有几个库尚未移植.
这种安排迫使您思考如何更好地整合..Net Core 5似乎很稳定,但支持还处于起步阶段.从VS 2015更新1开始的当前一代Universal Apps直接使用.Net Core 5.
Nuget有几个功能,即使工作正在进行中,目前还不支持:
我希望我有一个更完整的答案.但是,就我发现PCL及其在当前基础设施方面的演变而言,这是我所得到的.
我正在创建一个游戏创建工具包,它可以立即实现版本控制.我希望能够将游戏部署为Windows 10应用程序或标准WPF应用程序,但由于我用于集成版本控制的库,我需要将编辑器创建为标准WPF应用程序.我必须在构建共享代码和导入正确的库方面有点创意.
首先,我的项目层次结构:
我希望核心PCL能够加载项目并反序列化JSON编码对象.PCL确实可以访问System.IO,但令人惊讶的是它与标准C#库中定义的不同.这是我必须解决的问题:
将包引用添加到NewtonSoft.JSON后,我不得不更改packages.config文件中的目标框架:
<package id="Newtonsoft.Json" version="8.0.2" targetFramework="portable-net452+win81" />
依赖于我的Project.Model类的所有项目都必须从nuget安装`system.io.filesystem'包,以便System.IO.FileInfo等对象是相同的.
虽然这绝对不是灵丹妙药,但它也不是死路一条.我确信还有更多陷阱,但这至少可以解决一些问题.
| 归档时间: | 
 | 
| 查看次数: | 4735 次 | 
| 最近记录: |