首页 > 学院 > 开发设计 > 正文

ASP.NET5Core与iBoxDB包管理在Linux上快速入门示例

2019-11-14 14:24:19
字体:
来源:转载
供稿:网友

asp.net 5的一项重要更新是它支持运行在 .NET Execution Environment上 ,简称DNX. 而 DNX Core 当前能支持三个操作系统Windows Ubuntu OSX, 虽然Mono在linux上对.NET支持非常好,但DNX引入了方便的包管理还是非常值得一试。java的jar包不内置版本号,可以随便放在一起,.NET的dll包带版本号,放到一起时很容易就出现版本号冲突的提示,一般不影响使用。

在Ubuntu Linux上配置 DNX 也非常方便,不需要到网站下载再执行的传统.NET安装方式,当然也没有现代APP商店哪么方便。具体可以看官网,这里把命令行复制过来,在Ubuntu上一行行执行就可以了。

sudo sh -c 'echo "deb [arch=amd64] http://apt-mo.trafficmanager.net/repos/dotnet/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list'

sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893

sudo apt-get update

sudo apt-get install dotnet

执行完这几条命令就有了一个dotnet环境,这里必须再提一下mono-complete,当你在DNX Core平台上被哪些新库搞晕时,别忘记还有一个Mono。这里是 DNXCore的API帮助,遇上不兼容必查,查得最多的会是Assembly名称,DNX Core引入先进的包管理,但需要自己加载,对版本号。

前面的install dotnet,它只安装了一些基本运行环境,所以非常快。下面开始测试。建一个空目录 dnxcore ,进入,然后执行

dotnet init

这个目录里面会有一个Hello World模板。传统.NET程序只有PRogram.cs一个文件, DNX下多了一个project.json文件,这个文件用来根据需要加载包,一般需要修改的是dependencies这段,在里面加入对iBoxDB.DNX 2.6.2.16包的引用,还有FileSystem,Thread。在DNX中,像文件操作,线程类这些基本功能都在单独的包中。

"dependencies": {  "Microsoft.NETCore.Runtime": "1.0.1-beta-*",  "System.IO": "4.0.11-beta-*",  "System.Console": "4.0.0-beta-*",  "System.Runtime": "4.0.21-beta-*",  "iBoxDB.DNX": "2.6.2.16",  "System.IO.FileSystem" : "4.0.1-*",  "System.Threading.Thread" : "4.0.0-*",  "System.Threading.Tasks.Parallel" : "4.0.0-*"}

 这时确保网络连接正常,然后执行

dotnet restore

等待它自动在线加载,最后你可能会有提示,有些基础库没有找到。这是因为 Microsoft.NETCore.Runtime 这个基础运行包版本一变化,它引用的包 Microsoft.NETCore.Runtime.CoreCLR  版本就变化,而Microsoft.NETCore.Runtime.CoreCLR包引用的包的版本也会变化,现在大量包是beta版本,经常升级,在一个正式包与Beta混合的环境下不容易设置对版本,干脆就不设置了,这几个System.*的包默认都会加载。与传统.NET Framework一二年发布一个新版本不同,DNXCore的包可是几星期更新一次,活跃的几天就更新了,对于喜欢总是引用最新版本的开发人员可能会兴奋不断。你也可以移走Microsoft.NETCore.Runtime, 自己管理基本包的版本,就不会有提示了。如下

"dependencies": {  "System.Collections" : "4.0.10",  "System.Reflection" : "4.0.10",  "System.Reflection.Extensions" : "4.0.0",  "System.Runtime.Extensions" : "4.0.10",  "System.Text.Encoding" : "4.0.10",  "System.Globalization" : "4.0.10",  "System.Threading" : "4.0.10",  "System.IO": "4.0.11-beta-*",  "System.Console": "4.0.0-beta-*",  "System.Runtime": "4.0.21-beta-*",  "iBoxDB.DNX": "2.6.2.16",  "System.IO.FileSystem" : "4.0.1-*",  "System.Threading.Thread" : "4.0.0-*",  "System.Threading.Tasks.Parallel" : "4.0.0-*",}

 dotnet restore 并不会把一堆下载文件放到刚才新建的项目文件目录内,而是位于用户Home的 .dnx/packages 目录下。iBoxDB.DNX 包目录下有一个测试文件,执行如下命令复制到当前目录

@ubuntu:~/dnxcore$ cp ../.dnx/packages/iBoxDB.DNX/2.6.2.16/content/iBoxDB26.cs .

打开 Program.cs 复制上两行测试调用代码

public class Program{   public static void Main(string[] args)  {     iBoxDB.LocalServer.DB.Root("/tmp/");     Console.WriteLine(iBoxDB.TestHelper.RunALL());  }}

最后执行

dotnet run

就可以看到效果了,不需要执行编译。不想一行行代码键入,可以在这里下载测试代码。 dnxcore5 操作与使用在Windows 与 Ubuntu是一样的,也就是在Windows下也是敲命令行,性能哪个好,你猜?好代码当然都放在Windows版本下,这里再次提一下Mono。DNX能根据实际用户情况选择部署平台,自动加载关联包,这些都是不错的特性,但如果更关心性能,当前Mono运行.NET的性能更好。

 

下面是使用Mono操作的对比。

编译文件

mcs  /r:/usr/lib/mono/4.5/Facades/System.Runtime.dll /r:/usr/lib/mono/4.5/Facades/System.IO.dll  /r:../.dnx/packages/iBoxDB.DNX/2.6.2.16/lib/iBoxDB.DNX.dll  Program.cs iBoxDB26.cs

设置包路径,如果DLL不在当前目录下

export MONO_PATH=../.dnx/packages/iBoxDB.DNX/2.6.2.16/lib

执行

mono Program.exe

 

下面是在Linux DNX中使用Mono Framework执行, 不需要mcs编译, 自动下载包。需要先设置一个参数

export DOTNET_REFERENCE_ASSEMBLIES_PATH="/usr/lib/mono/xbuild-frameworks" , 

然后运行平台由 dnx***{} 改为 net45{}

"dependencies": {      "iBoxDB": "2.7.0.3"}, "frameworks": {        "net45": {      "frameworkAssemblies":{        "System.Runtime": "4.0.0",        "System.IO": "4.0.0" }    

dotnet restore

dotnet run

不同系统下的路径

export DOTNET_REFERENCE_ASSEMBLIES_PATH="/Library/Frameworks/Mono.framework/Versions/Current/lib/mono/xbuild-frameworks"

export DOTNET_REFERENCE_ASSEMBLIES_PATH="/usr/local/lib/mono/xbuild-frameworks"

export DOTNET_REFERENCE_ASSEMBLIES_PATH="/usr/lib/mono/xbuild-frameworks"


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表