zoukankan      html  css  js  c++  java
  • .NET Core:编译一次,到处运行

    介绍 关于将。net框架引入Windows以外的平台的讨论从一开始就存在(毕竟,强大的竞争对手无处不在)。大约两年的讨论变成了行动,微软开始塑造我们今天所说的。net Core——一个“跨平台、开源、模块化的。net平台,用于创建现代web应用、微服务、库和控制台应用(。NET Blog——2016年6月27日)”。 我是一个开源和。net的狂热爱好者,所以我从一开始就和Mono打交道,后来又和Xamarin打交道,最终我对。net Core的消息感到很兴奋。 在这里,我想展示使用。net Core进入跨平台世界的第一步。 背景 非常重要的一点是,要明白。net Core并不是。net Framework的翻版,而是一个新的并行框架,它遵循的是与原始框架相同的原则。它重新实现了所有可以从。net框架跨平台完成的事情。这个重新实现遵循。net标准库(标准ECMA-335),因此。net核心与。net框架兼容。 原始框架中没有实现的是UI相关的库(UI高度依赖于平台/设备),因此。net核心中唯一存在的UI形式就是控制台。然而,这恰恰使它成为图书馆和服务的完美的基础UI -桌面或网络-无论设备。 所有这些赞美的。net核心,重要的是要理解,这是一个新的开始,而不是什么完美和顺利已经与更成熟的。net框架一样,但恕我直言它可以是一个巨大的开放对于那些想要打开新目标的. net应用程序… 设置环境 为了看到奇迹的发生,我创建了两个虚拟机—一个是Windows 7,另一个是Fedora 23。 要查看支持哪些Linux版本以及当前状态,可以查看这里的“构建状态”表:. net Core Runtime。 在这一点上,不要试图聪明地使用一个更新的发行版——它可能不会工作。NET Core有严格的依赖性,甚至拒绝与某些库的新版本一起工作)。 窗户 要安装。net Core,请点击以下链接: x86 - DotNetCore.1.0.0-SDK。preview2 -x86 x64 这些都是常见的安装程序,它们将把。net Core和一个支持SDK放到你的机器上…… 要检查安装情况,请打开一个命令窗口,并在其中输入dotnet—version…答案应该是1.0.0-preview2-003121…… Linux 在Linux上安装可能会有点复杂(取决于发行版本),所以微软提供了一系列页面来帮助你,这里是。net Core安装。 选择你的发行版,现在只按照第一部分的说明去做…… 可以肯定的是,你必须对Linux终端/安装/升级的工作原理有一定的了解,但只有一定的… 要检查安装,您必须运行相同的命令- dotnet -version -这里也是(终端)。答案应该也是一样的。 如果你有一个错误在这一点上,你是有点自己解决它,但我可以提供是这个命令(终端),以帮助发现一些可能的问题: 隐藏,复制Code

    find /opt/dotnet -name '*.so' -type f -print | xargs ldd | grep 'not found'

    这将列出所有缺少的库,你可以运行一个适合你的发行版的安装/更新命令(/opt/dotnet路径,是你安装。net核心包的地方——如果不同,相应的改变)。 额外奖励-你可以使用一个编辑器 如果你使用的是Windows,我无法提供比Visual Studio更好的东西(可能是Community 2015)。如果你是一个铁杆的Linux开发人员,你将很难从你最喜欢的编辑器(vim, emacs, gedit等),但对于两者之间的情况,我想向你介绍Visual Studio代码(Visual Studio代码)… VS代码是一个基于浏览器的(嵌入的)代码编辑器,封装在一个能够处理项目和扩展的包装器中,有一个内置调试器平台,支持Git和智能感知。 VS代码实际上是迈向跨平台Visual Studio的第一步(根据路线图,在下一个版本(预计2016年第四季度/ 2017年第一季度)中,它将支持标准的Visual Studio项目,而不是当前基于文件夹的带有json项目文件的工作区)。它是轻量级和简单的,但是在所有支持的平台上调试功能强大… 正如我将展示给你的c#代码…VS代码安装只支持节点。默认设置为js、JavaScript和TypeScript,所以你必须为这个示例安装c#扩展名……使用文档查看如何… 最后一点,只是为了让你运球…与Visual Studio一样,您也可以为VS代码编写扩展! 现在试一试…… 真正的魔法 这部分实际上非常简单——因为我并不是要用。net Core重写一些3D图形引擎。我要给你们看的是: 创建一个简单的控制台(Hello World)应用程序从.NET中添加众所周知的进程类,以打印加载的模块编译、运行——偶尔也进行调试——它在Fedora上将编译后的程序集移动到窗口中并运行它——就像现在这样 创建应用程序 现在,您可以使用命令行轻松地创建一个项目(由Json文件定义)。如前所述,在将来,众所周知的Visual Studio项目格式将得到支持,并且会添加更多的创建选项(也有手动选项,但是…)。 要创建一个简单的“Hello World”应用程序,请遵循以下步骤: 打开内置终端(CTRL+ ',或从视图菜单)运行以下命令: mkdir hwapp cd hwapp dotnet新dotnet恢复dotnet运行 (这些行来自微软,从这里:。net Core -初始化一些代码) 现在打开项目(VS代码与基于文件夹的工作区一起工作,所以你实际上必须打开包含的文件夹),使用File/ open folder…菜单。 升级代码 隐藏,复制Code

    using System;
    using System.Diagnostics;
    
    namespace ConsoleApplication
    {
        public class Program
        {
            public static void Main(string[] args)
            {
                Process oProcess = Process.GetCurrentProcess( );
    
                Console.WriteLine( string.Format( "Process: {0} ({1})", 
                                   oProcess.ProcessName, oProcess.Id ) );
                Console.WriteLine( );
                Console.WriteLine( "MODULES:" );
                Console.WriteLine( "________" );
    
                foreach ( ProcessModule oModule in oProcess.Modules )
                {
                    Console.WriteLine( string.Format( "	{0} ({1})", 
                                       oModule.ModuleName, oModule.FileName ) );
                }
            }
        }
    }

    正如承诺的那样,这是一个非常简单的代码更改。但是,您可以注意到,没有任何东西表明它是。net Core的代码。这段代码也可以在完全标记的。net框架下编译(我有没有提到。net Core与。net Framework兼容?) 您还需要注意的是编辑窗口顶部的通知——读取它们并相应地响应,它们主要是关于缺少的东西,比如调试定义和错误…… 要构建应用程序,您可以再次使用终端(dotnet构建)或预定义的构建任务,该任务可以通过CTRL+SHIFT+B调用。 此时,应用程序已经准备好运行了,您可以使用调试器进行调试—以查看它是如何工作的,内置的终端还是外部终端。要从终端运行它,请导航到包含应用程序的文件夹并键入dotnet运行。你会得到一个由你的应用程序加载的模块列表… 到处跑 所以我们来到了这里。现在我们将把应用程序——编译后的版本——移动到Windows系统中,看看它是如何运行的…… 在Fedora (Linux)机器上,您将在'binDebug etcoreapp1.0'文件夹中找到二进制文件。您必须复制的是DLL(是的!)在。net内核下,即使是控制台应用程序也会编译成DLL而不是EXE!)和runtimeconfig。json文件……将两者放在Windows系统中您选择的相同文件夹中。 打开命令窗口并导航到存储二进制文件的文件夹。 输入神奇的命令'dotnet运行'和享受! (比较来自Fedora (Linux)和Windows系统的列表是一件有趣的事情。) 的兴趣点 对我来说,能够只在我的机器上编译一次代码(调试、测试和编写),但之后能够将其分发到一系列良好的操作系统上,这真的很令人兴奋。 我在这里展示的例子是完全愚蠢的,但转向你的想象力,你会看到的可能性……还要记住。net Core和它周围的工具都是开源的,你可以有所作为! 本文转载于:http://www.diyabc.com/frontweb/news17308.html

  • 相关阅读:
    LeetCode OJ 107. Binary Tree Level Order Traversal II
    LeetCode OJ 116. Populating Next Right Pointers in Each Node
    LeetCode OJ 108. Convert Sorted Array to Binary Search Tree
    LeetCode OJ 105. Construct Binary Tree from Preorder and Inorder Traversal
    LeetCode OJ 98. Validate Binary Search Tree
    老程序员解Bug的通用套路
    转载 四年努力,梦归阿里,和大家聊聊成长感悟
    转载面试感悟----一名3年工作经验的程序员应该具备的技能
    Web Service和Servlet的区别
    关于spring xml文件中的xmlns,xsi:schemaLocation
  • 原文地址:https://www.cnblogs.com/Dincat/p/13494007.html
Copyright © 2011-2022 走看看