dotnetcore多平台开发体验
随着net core rc2的发布,园子里面关于net core的入门文章也也多了起来,但是大多数都是在一个平台上面来写几个简单的例子,或者是在解释代码本身,并没有体现说在一个平台上面创建一个项目,然后通过源码管理签出到另一个平台上继续开发。还有就是一次编译到处运行是如何体现的?这样类型的文章好像还没有在哪里看到过,于是我就想自己来一遍,并把这个过程分享出来给大家。
首先来个官方的介绍:
一、mac os x 上的开发
本来环境***是不想写的,因为有太多的文章,但是不写的话又感觉少了些什么。然后我只有一个mac和一个***win10的pc,所以就只针对这两个平台来,linux等我有钱买新电脑再来折腾。废话不多说,下面开始介绍。
mac os x环境下 dotnet core 的***
参考链接:
首先要先***一个
这个是以后 dotnet core 要下载一些依赖库什么的会用到的。可以使用
打开命令终端输入***命令
/usr/bin/ruby -e &$(curl -fsSL /Homebrew/install/master/install)&
***好 之后继续输入***命令
brew install openssl
brew link --force openssl
这两个东西***后,我们就可以来***我们我们的core了,下载这么一个***包
这是一个pkg***包。我现在的时候是 dotnet-dev-osx-x64.1.0.0-preview1-002702.pkg 只要双击一下***包,然后一直点击继续就可以了
***完之后可以输入命令查看dotnet core 有没有***成功
命令行下的项目建立与运行
***完环境后,我们就可以来开始我第一个项目。我们新建一个文件夹叫做LearnDotnetCore然后打开命令窗口 cd 到这个文件夹下面。然后用命令 dotnet new来建立初始化一个项目。初始化完后我们看看到文件夹下面多了两个文件 Program.cs project.json
Program.cs 是c#源码文件,可以用来实现我们的具体逻辑
project.json 是配置依赖框架,依赖包,版本号,还有其他一些编译会用到相关的东西。这个作用和nodejs的模式是相类似的。
项目创建完之后需要 dotnet restore 来下载我们配置好的依赖包。下载完后呢文件夹里面多出了一个 project.lock.json 文件,打开来看,可以看到我们下载了那些依赖库,还有一些编译的引用等。
下载完依赖库后,我们可以通过运行命令 dotnet run 来编译运行我们的程序。
编译完成后,文件夹内会多出两个文件夹 bin 和 obj 。
bin 是我们编译的完成的文件
obj 里面是一些编译输出和动态库连接等的一些信息。
然后运行我们可以看到输出 Hello World! 到这来,我们的命令行建立、编译和运行程序就到这来结束了。
使用vscode调试运行
参考链接:
单纯使用命令行来开发的话,那么肯定是没有那么方便了,但是在但是目前好像也没有什么特别好的选,所以我们就使用
然后再***一个插件
还有一个叫做,貌似还没有支持到 dotnet core的样子
当然还有一个叫做 的东西,之前 net core 用 DNX 命令的时候下载来玩过一下,支持什么的还可以,不过很久没有玩了,最近一次编译更新是在 5月17号,也不知道现在支持如何。有兴趣的同学自己下载来玩下,内容不在本文章中介绍了。
打开vscode然后把项目的文件夹拖拉到vscode的窗口上面去,会在左边的工作空间栏目中显示项目的树形结构。然后我们选择project.json,编辑器会提示你是否要加入调试信息,然后我们点击yes,目录结构就会多出一个.vscode文件夹里面有两文件
然后我们去修改 launch.json 里面的内容,把program里面的内容改成我们编译完成后的dll路径,当然有的有时候会给你自动生成好的,不需要自己修改。
&program&: &${workspaceRoot}/bin/Debug/netcoreapp1.0/LearnDotnetCore.dll&,
还有就是args也修改一下,这个是main函数的传入值。
&args&: [&我试试看传入了什么&],
修改完后在Program.cs里面加个断点,接着直接按f5,或者点开debug面板,然后点击那个调试按钮开始调试
我们可以看到,一个变量的监视数据,还有就是控制台打印出了 Hello World!
我选择了用github来,并且在window上通过git下载到里面进行继续开发
首先我们打开git面板来初始化git储存库
初始化完后,我们可以看到我们有15个文件要提交,但是我们并不需要把这么多个文件都给提交了,我们只要提交Program.cs project.json 这两个文件,然后在其他地方下载后来生成其他文件就可以了。
于是,我们就添加了一个.gitignore文件,文件内容添加要排除的东西,然后我们就剩下三个文件提交了
最后,输入提交的信息然后点击那个勾符号,就提交到本地的库里面了。
完成了上面的步骤后,我们还需要把库同步到上面去。首先,我们去注册一个账户,然后新建一个repository,建立过程自己摸索,就不写的那么详细。建完后如下图然后到我们的目录下输入下面的两条命令
git remote add origin
git push -u origin master
如果有用户名密码,就输入用户名密码,然后存储库就同步到了上面去了。记住地址什么的要改成自己的。
二、window 上的开发
切到win10上面来继续完成这个博文。
开发环境的***
参考资料:
首先要先下载下面的工具:
这两个软件的***就不需要截图了,先***Visual Studio Community 2015再***DotNetCore.1.0.0.RC2-VS2015Tools.Preview1。***完之后我们打开vs 2015,然后把我们之前在mac上面创建的项目给下载下来。
打vs后我们选择 open from source control 然后出现左边的面板,如果没有登录你的github账号,那么就先登录你的账号,然后再点击Clone出现一个窗口选择我们前面上传的那个项目。
下载完后双击我们的git项目,然后在弹出的窗口里面选择project.json,就会生成左边的那样项目工程了。
然后我们编译成功并运行起来。
到这里我们已经成功的把在mac上面创建的项目拉到win下不改任何代码,然后成功编译运行了。
参考资料:
上面的开发过程中都是直接在id里面运行的,或者用 dotnet run 来直接运行的,那么我们编译好之后如何脱离IDE来运行呢?
我们也可以到编译成功的目录 netcoreapp1.0 下面输入命令 dotnet LearnDotnetCore.dll 来运行我们的程序。
可以在project.json加个 runtimes 属性,然后编译出一个exe文件,然后直接运行exe。
要编译成Release的话,可以用命令 dotnet build --configuration Release --no-dependencies --no-incremental
当然build的命令以后可以有单独的文章来讲解
第一种编译的配置
&version&: &1.0.0-*&,
&buildOptions&: {
&emitEntryPoint&: true
&dependencies&: {
&Microsoft.NETCore.App&: {
&type&: &platform&,
&version&: &1.0.0-rc2-3002702&
&frameworks&: {
&netcoreapp1.0&: {
&imports&: &dnxcore50&
第二种编译的配置
&version&: &1.0.0-*&,
&buildOptions&: {
&emitEntryPoint&: true
&dependencies&: {
&Microsoft.NETCore.App&: {
//&type&: &platform&,
&version&: &1.0.0-rc2-3002702&
&frameworks&: {
&netcoreapp1.0&: {
&imports&: &dnxcore50&
&runtimes&: {
&win10-x64&: {},
&osx.10.11-x64&: {}
第二种配置使用dotnet publish会把core的支持运行一起打包处理,然后相关的平台就不用***net core,但是不同平台需要不同编译。具体的效果和目录结构我就不进行截图了,有兴趣的自己编译看看。
三、改造成web项目
前面介绍了如何编译和运行控制台的程序,但是在这个互联网的时代,我感觉要做成一个web项目可能会更有趣,我们看看如何直接把前面控制台的项目变成web项目。
参考资料:
vs修改运行
首先修改配置 project.json,在属性dependencies添加Kestrel依赖。
第二添加一个类Startup
using Microsoft.AspNetCore.B
using Microsoft.AspNetCore.H
using Microsoft.AspNetCore.H
namespace LearnDotnetCore
public class Startup
public void Configure(IApplicationBuilder app)
app.Run(context =&
return context.Response.WriteAsync(&Hello from ASP.NET Core!&);
然后修改Program.cs
using Microsoft.AspNetCore.H
namespace LearnDotnetCore
public class Program
public static void Main(string[] args)
var host = new WebHostBuilder()
.UseKestrel()
.UseStartup&Startup&()
host.Run();
然后点击运行按钮,程序成功的运行起来
打开浏览器访问
我们可以看到浏览器打印出 Hello from ASP.NET Core!证明我们的程序已经编译并运行成功。
发布并部署iis
虽然说直接运行可以访问成功,但是有的人就是喜欢部署到IIS上面去,所以这里也尝试一下部署到IIS上面是什么样的。
参考资料:
***完IIS后需要*** 来支持 net core 在iis上面运行
然后修改project.json的内容,添加下面三个东西,来支持iis运行
然后修改Program.cs,添加iis支持
using System.IO;
using Microsoft.AspNetCore.H
namespace LearnDotnetCore
public class Program
public static void Main(string[] args)
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup&Startup&()
host.Run();
添加文件 web.config
&?xml version=&1.0& encoding=&utf-8&?&
&configuration&
Configure your application settings in appsettings.json. Learn more at /fwlink/?LinkId=786380
&system.webServer&
&handlers&
&add name=&aspNetCore& path=&*& verb=&*& modules=&AspNetCoreModule& resourceType=&Unspecified&/&
&/handlers&
&aspNetCore processPath=&%LAUNCHER_PATH%& arguments=&%LAUNCHER_ARGS%& stdoutLogEnabled=&false& stdoutLogFile=&.\logs\stdout& forwardWindowsAuthToken=&false&/&
&/system.webServer&
&/configuration&
上面三个修改完之后,就可以来发布,选择项目邮件,然后选择发布会出现一个窗口
输入名称,然后next或者直接publish,操作完成后会生成一堆文件。然后到iis里面创建 Web 站点,然后绑定发布目录就行,应用程序池的模式需要改为“无代码托管”。
启动网站运行后,浏览器输入http://localhost/ 可以看到浏览器打印出 Hello from ASP.NET Core!和上面没有在iis里面运行的效果是一样的。
四、申请vps并上传项目运行
在文章开头说了,没有Linux的系统,但是后来想了一下,还是也体验一下看看,于是就去
买了一个vps,一个是可以体验一下发布一个net core 做的网站,另一个就是以后还可以放一些运行示例什么的。
我买的vps***的是centos-7系统,可以使用ssh远程登录上去管理。先给***一个 net core 的运行环境。
参考资料:
输入***命令:
| bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet
结果返回了错误。
dotnet_install: Error: Unable to locate libunwind. Install libunwind to continue
dotnet_install: Error: Unable to locate libicu. Install libicu to continue
dotnet_install: Error: Unable to locate gettext. Install gettext to continue
看起来是缺少了几个玩意,那好吧先来下载***,使用yum命令来***
yum install libunwind
yum install libicu
yum install gettext
重新输入***命令:
| bash /dev/stdin --version 1.0.0-preview1-002702 --install-dir ~/dotnet
这次返回的信息是
dotnet-install: Downloading
dotnet-install: Extracting zip
dotnet-install: Adding to current process PATH: /root/dotnet. Note: This change will be visible only when sourcing script.
dotnet-install: Installation finished successfuly.
然后再输入命令
sudo ln -s ~/dotnet/dotnet /usr/local/bin
说明:ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接.当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
然后我们再来输入 dotnet 命令看看是否真的***成功了。***成功之后我们就要把之前编译发布好的文件给上传到vps上面去。(记住是要上传 dotnet publish发布出来的那些文件)
可以使用scp命令来上传,命令参考:/peida/archive//2960802.html
文件上传成功后我们执行 dotnet LearnDotnetCore.dll 命令来运行我们的网站程序。返回一下信息
Hosting environment: Production
Content root path: /root/www/publish
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
说明我们的程序已经成功运行起来,然后我们打开浏览器访问我们的vps地址,发现并没打印出信息。那是因为程序默认绑定的是http://localhost:5000, 所以我们访问ip的是访问不到,那有两种办法可以实现我们使用ip访问,第一种修改程序添加绑定例如下面:
public static void Main(string[] args)
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseUrls(&http://192.168.0.102:5000&)
.UseStartup&Startup&()
host.Run();
第二种可以使用代理,我这里选择Nginx。***参考资料:
由于没有玩过Linux所以经过几番波折啊,首先80端口被Apache http占用启动不了,然后防火墙阻止了80端口。最后终于成功的看到了这个页面
然后配置代理,找到Nginx里面的配置把location /改成如下
location / {
# 传递真实IP到后端
proxy_set_header Host $http_
proxy_set_header X-Real-IP $remote_
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_
proxy_pass
localhost:5000;
保存后,重启一下Nginx,然后再运行我们前面上传上去的net core网站,再打开浏览访问我们vps的地址,浏览器打印出了 Hello from ASP.NET Core!
到这我们已经体验完成了net core 在 macosx、windows、linux三个平台下的开发和部署运行的过程。本文结束,谢谢观看。
由于本人水平有限,知识有限,文章难免会有错误,欢迎大家指正。如果有什么问题也欢迎大家回复交流。要是你觉得本文还可以,那么点击一下推荐。
更多相关文章
Zend在其PHP的Web应用程序服务器的最新版本中将支持Mac OS X平台开发.之前开发人员使用PHP和携带Mac进入发展环境而现在他们可以利用在使用Zend服务器时,进行PHP Web应用程序开发.在这其中,PHP运行时,能够对系统起到监控.诊断和对性能进行优化. Zend的首席执行官Andi ...
关键字 微信公众平台 微信开放平台 UnionID作者:方倍工作室原文:/txw1958/p/weixin98-get-user-UnionID.html 微信公众平台更新,为开发者提供UnionID机制 经开发者反馈,由于同一公司下多个公众号之间需要用户 ...
笔者在CSDN博客频道推出微信公众平台开发教程之后,接触了许多公众平台开发爱好者,也帮助他们解决了许多实际的问题,当然这其中有很多问题都是重复的,因此,笔者将这些问题及解答整理出来,以帮助更多初学者少走弯路. 1.订阅号与服务号的主要区别是什么?订阅号每天能群发一条消息,没有自定义菜 ...
9月2日消息,对台湾电子时报报道,惠普2010年以12亿美元购并Palm,取得webOS作业系统,却在2011年8月突然宣布放弃webOS装置业务,近期PC业者透露,OS战局已大势底定,非主流OS难在手机.平板电脑及PC系统有所斩获,包括投入可观研发资源的英特尔(Intel)也传出拟暂停MeeGo研 ...
奇趣科技近日发布了其旗舰产品Qt4.4.该新版本使开发人员首次能够将Web功能集成到本地桌面和移动设备应用中去.此外,该版本Qt 4.4还更具开扩意义的实现了,Windows.Macintosh和Linux操作系统以及移动设备之间跨平台的实现.它为创建跨越各种桌面系统和设备的应用及服务提供了一个通用 ...
1.OAuth2.0 OAuth(开放授权)是一个开放标准,允许用户让第三方应用访问该用户在某一网站上存储的私密的资源(如照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用. 允许用户提供一个令牌,而不是用户名和密码来访问他们存放在特定服务提供者的数据.每一个令牌授权一个特定的网站(例如 ...
CSDN2013年度博客之星评选活动开始,本人有幸入围参加评选,如果博客中的文章对你有所帮助,请为柳峰投上宝贵一票,非常感谢! 投票地址:http://vote.blog.csdn.net/blogstaritem/blogstar2013/lyq8479
在笔者的公众账号小q机器人 ...
该扩展基于官方的微信公众平台SDK,这里只做了简单地封装,实现了一些基本的功能(如天气查询,翻译,自动聊天机器人,自定义菜单接口)仅供学习之用源码: 代码如下 define(&TOKEN&, &xingans&);$wechatObj = new wechat ...
今天在mysql删除条目报错Cannot delete or update a parent row: a foreign key constraint fails 错误,下面我们一看解决办法在SQLyog中删除条目 ...
今天才接触yii框架了,下面我来分享一篇我的Yii表单生成器不依赖Model笔记吧,希望此教程对各位同学会有所帮助呀.我也不知道标题该怎么写才能描述我要说明的问题,意思就是可以放Yii的表单生成器功能更加灵活.默认的 ...
PhpStorm 9.0.1 EAP 141.2017 发布下载,该版本提供了以下改进:A ...
自从推出 G27 之后,就在方向盘这块沉寂多年的罗技,今天终于更新了顶级的游戏方向盘产品线 ...
1.Hadoop集群可以运行的3个模式?单机(本地)模式伪分布式模式全分布式模式2.
Telegram是和whatsapp类似的及时通讯应用.它有一个庞大的用户群,并且很多独特 ...
Oracle 联机重做日志文件(ONLINE LOG FILE)--=========== ...
ownCloud 是一个来自 KDE 社区开发的免费软件,提供私人的 Web 服务.当前主 ...
索尼爱立信不仅向来与各种传闻为伍,而且各种形式的谍照曝光更是成为了该品牌的一大特色.除了最 ...
OS环境:Fedora 64-bitEclipse中无法启动***D,错误是Failed t ...