关于Net Core 多平台程序的Framework问题:

(本文只是推测,欢迎大家指正)

最近在研究NetCore的多平台问题,起因是有一个Winform的项目,由于跨平台的要求,想改为NetCore的MVC6项目,但是同时也想保留原来的Winform项目。

所以,一些DLL必须要做到即可以在Winform中使用,也可以在WebForm中使用,也就是所谓的多平台的问题。

当然,大部分情况下,NetCore可以很从容的进行多平台的编译,但是,也有一些库的话,不是NetCore内置的库,需要进行一些配置才行。

首先从结论开始说吧:

{
"version": "1.0.0-*", "dependencies": {
"mongocsharpdriver": "2.3.0-rc1",
"MongoDB.Driver": "2.3.0-rc1"
}, "frameworks": {
"netcoreapp1.0": {
"imports": "netcoreapp1.0",
"dependencies": {
"System.Xml.XmlSerializer": "4.0.11"
}
},
"net462": {
"frameworkAssemblies": {
"System.Xml": "4.0.0.0",
"System.Xml.XmlSerializer": "4.0.10"
}
}
}
}

由于程序中使用到了XmlSerializer的一些功能,如果不进行配置的话,NetCoreApp的版本也是无法编译的。

理由大致如下:

netcoreapp1.0 实现了NetStardard1.6版本

在NetStardard1.6版本中没有XmlSerializer。(System.Xml.ReaderWriter 和 System.Xml.XDocument是有的。)

        <dependency id="System.Xml.ReaderWriter" version="4.0.11" />
<dependency id="System.Xml.XDocument" version="4.0.11" />

完整的列表可以查看你的系统中如下文件:

C:\Users\yourname.nuget\packages\NETStandard.Library\1.6.0\NETStandard.Library.nuspec

这里添加XmlSerializer可以直接添加到root下面的dependencies里面,但是如果这样做的话,你会发现net462的地方会出现问题,

net462,应该是Framework 4.6.2的时候,是无法支持XmlSerializer的4.0.11版本的。理由如下:

4.0.11版本支持4.5,但是不支持4.6.

再看一下4.0.10,这个是支持4.6的

但是,如果你将net462,改为452,则必须改为 "System.Xml.XmlSerializer": "4.0.0.0"

我不知道为什么这里4.0.10不可以。

这个时候还必须注意到netcoreapp1.0使用dependencies,而net462使用的是frameworkAssemblies引入程序的。这里的区别还不是非常清楚。

虽然在github上面有对于project.json的详细介绍,前者是用来指定Package的,后者是指定具体AssebleLevel的引用。

当前这个阶段,关于project.json的一些问题还是比较麻烦的,资料其实也在不停修订中,特别是NetFrame和Core之间,存在着兼容性的问题,所以说多平台程序还是有些注意点的。

当然,如果是简单的跨平台,就是Net Core,不存在兼容性问题了,倒是存在一些功能缺失的问题。

另外,如果发现NetCore 1.0.1安装错误,请先删除1.0.0,然后再安装一次。

本文会随时更新新的发现。

2016/09/18:

如果指定了多平台,现在如果在csproj里面引用xProj,则发生无法找到引用的问题。但是如果在csproj里面直接引用DLL的话,则可以正常使用。

2016/09/21:

在当前的Net Core中,不支持在 csproj 导入 xproj 。

你好,目前是不支持从 csproj 引用 xproj 项目的,这项工作会在 core 1.1 版本中做这个事情,1.1版本已经没有 xproj 项目,升级后的visual studio会自动将 xproj 重命名为 csproj,预计在16年年底或者17年初发布。

目前处理你这种情况有两种方式:

1、将你的程序集打包dll发布到Nuget,或者是通过引用本地程序集的方式引用。

2、转换你的 csproj 为 xproj 。

希望能够帮助你。

关于Net Core 多平台程序的Framework问题的更多相关文章

  1. .NET平台系列23:.NET Core/.NET5/.NET6 和 .NET Framework 的选择建议

    系列目录     [已更新最新开发文章,点击查看详细] 有两种支持的 .NET 实现可用于生成服务器端应用: .NET Framework .NET Core/5+,包括 .NET Core..NET ...

  2. 创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表

    创建ASP.NET Core MVC应用程序(3)-基于Entity Framework Core(Code First)创建MySQL数据库表 创建数据模型类(POCO类) 在Models文件夹下添 ...

  3. .NET Core多平台开发体验[1]: Windows

    微软在千禧年推出 .NET战略,并在两年后推出第一个版本的.NET Framework和IDE(Visual Studio.NET 2002,后来改名为Visual Studio),如果你是一个资深的 ...

  4. .NET: 使用.NET Core CLI开发应用程序

    要开发.NET Core应用程序,除了使用强大的Visual Studio之外,还可以使用.NET Core CLI..NET Core CLI (Command-Line Interface),也就 ...

  5. .Net 初步学习笔记之一——.Net 平台与.Net FrameWork框架的关系

    .Net 包含两部分 .Net平台 和.Net FrameWork 框架 1..Net FrameWork框架包含于.Net平台. .Net FrameWork提供环境和支撑保证.Net平台运行. 2 ...

  6. 创建ASP.NET Core MVC应用程序(6)-添加验证

    创建ASP.NET Core MVC应用程序(6)-添加验证 DRY原则 DRY("Don't Repeat Yourself")是MVC的设计原则之一.ASP.NET MVC鼓励 ...

  7. 创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段

    创建ASP.NET Core MVC应用程序(5)-添加查询功能 & 新字段 添加查询功能 本文将实现通过Name查询用户信息. 首先更新GetAll方法以启用查询: public async ...

  8. 创建ASP.NET Core MVC应用程序(4)-添加CRUD动作方法和视图

    创建ASP.NET Core MVC应用程序(4)-添加CRUD动作方法和视图 创建CRUD动作方法及视图 参照VS自带的基架(Scaffold)系统-MVC Controller with view ...

  9. 创建ASP.NET Core MVC应用程序(2)-利用MySQL Connector NET连接到MySQL

    创建ASP.NET Core MVC应用程序(2)-利用MySQL Connector NET连接到MySQL 用惯.NET的研发人员都习惯性地使用SQLServer作为数据库.然而.NET Core ...

随机推荐

  1. “老坛泡新菜”:SOD MVVM框架,让WinForms焕发新春

    火热的MVVM框架 最近几年最热门的技术之一就是前端技术了,各种前端框架,前端标准和前端设计风格层出不穷,而在众多前端框架中具有MVC,MVVM功能的框架成为耀眼新星,比如GitHub关注度很高的Vu ...

  2. 自定义控件之 圆形 / 圆角 ImageView

    一.问题在哪里? 问题来源于app开发中一个很常见的场景——用户头像要展示成圆的:       二.怎么搞? 机智的我,第一想法就是,切一张中间圆形透明.四周与底色相同.尺寸与头像相同的蒙板图片,盖在 ...

  3. jQuery radio的取值与赋值

    取值: $("input[name='radioName']:checked").val(); 赋值: $("input[name='radioName'][value= ...

  4. 烂泥:jira7.2安装、中文及破解

    . jira的主要配置文件,存放在/opt/atlassian/jira/conf/server.xml文件中,如下: vim /opt/atlassian/jira/conf/server.xml ...

  5. Ubuntu部署python3.5的开发和运行环境

    Ubuntu部署python3.5的开发和运行环境 1 概述 由于最近项目全部由python2.x转向 python3.x(使用目前最新的 python3.5.1) ,之前的云主机的的默认python ...

  6. 在 Linux 中使用 Eclipse 和 Gnu Autotools 管理 C/C++ 项目

    在我该系列的之前的所有随笔中,都是采用 Linux 发行版自带的包管理工具(如 apt-get.yum 等)进行软件的安装和卸载,从来没有向大家展示使用源代码自行编译安装软件的方法.但是长期混迹于 U ...

  7. 使用Nginx+Lua代理Hadoop HA

    一.Hadoop HA的Web页面访问 Hadoop开启HA后,会同时存在两个Master组件提供服务,其中正在使用的组件称为Active,另一个作为备份称为Standby,例如HDFS的NameNo ...

  8. C++模板编程:如何使非通用的模板函数实现声明和定义分离

    我们在编写C++类库时,为了隐藏实现,往往只能忍痛舍弃模版的强大特性.但如果我们只需要有限的几个类型的模版实现,并且不允许用户传入其他类型时,我们就可以将实例化的代码放在cpp文件中实现了.然而,当我 ...

  9. TODO:Go语言goroutine和channel使用

    TODO:Go语言goroutine和channel使用 goroutine是Go语言中的轻量级线程实现,由Go语言运行时(runtime)管理.使用的时候在函数前面加"go"这个 ...

  10. Atitit 图像处理 调用opencv 通过java  api   attilax总结

    Atitit 图像处理 调用opencv 通过java  api   attilax总结 1.1. Opencv java api的支持 opencv2.4.2 就有了对java api的支持1 1. ...