一. 问题起源
需求:项目存储部分业务时间存储的格式为“当前时间 - 2018年”的时间间隔天数,导致我看到 int 型日期时,无法直观感受到是哪一天,由此产生以下代码
目标:写一个自动转换日期与时间间隔天数的应用程序
过程:使用vs2017新建了一个目标框架为 ".net core 2.2“ 的控制台应用程序”,书写了如下代码:
using System; namespace DateTimekey { class Program { private const int _firstYear = 2018; private static readonly DateTime _firstDateTime = new DateTime(_firstYear, 1, 1); static void Main(string[] args) { Console.WriteLine("输入:"); string datetimekey = Console.ReadLine();int temp = Convert.ToInt32(datetimekey); GetDateTime(temp); Console.ReadLine(); }public static void GetDateTime(int key) { DateTime now = _firstDateTime.AddDays(key); Console.WriteLine("日期:"+now); } } }
未知问题:我在生成打包后,没有寻找到.exe文件
百度了下,众说纷纭
常见错误操作:可能因为你输出的是DLL类型,右键程序集-属性-输出类型选windows应用程序试试
正解:.net core是跨平台框架,编译成exe了如何在linux/MacOS下运行?如果要编译成exe,请选择.net framework
附:core的运行方式是在对应dll目录下打开windows窗口,然后用dotnet xxx.dll来运行
随后,新建了.net framework类型的控制台项目(没有打包选项了),生成之后的文件如下
深感不了解框架体系和运行机制带来的危害,于是有了这篇博文
二. dll文件
定义:
(1)DLL(Dynamic Link Library)文件为动态链接库文件,又称“应用程序拓展”,是软件文件类型。在Windows中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件,放置于系统中。当我们执行某一个程序时,相应的DLL文件就会被调用。一个应用程序可使用多个DLL文件,一个DLL文件也可能被不同的应用程序使用,这样的DLL文件被称为共享DLL文件。
(2)是一种不可执行的二进制程序文件
(3)DLL文件和EXE文件同样可以由编译语言生成,但是DLL没有程序启动入口,所以DLL文件不可执行
(4)DLL是和语言无关的,因此能创建一个DLL,被C++、VB或所有支持动态链接库的语言调用。这样如果一种语言存在不足,就能通过访问另一种语言创建的DLL来弥补。
三.在linux系统上运行.net core项目