標籤:

.net 現在開源了,開源有什麼用,不藉助mono,能在linux下運行么?

看了很多新聞,說到 .net 開源,但是我想用linux 跑http://asp.net ,有可能么?

看到github 上微軟託管的項目,如果不藉助Mono 可以在linux 下允許 http://asp.net 么

dotnet/coreclr · GitHub

dotnet/corefx · GitHub

aspnet/Home · GitHub

.NET Foundation

根本不知道這些東西開源了又怎麼樣?能在linux 下跑么?

網上找了好久也沒相關資料


當然,並且微軟這次 .net 的開源不僅僅就是把代碼放出來了,而是真的沖著讓大家跨平台的在 Linux / OSX 上用了,不只是在上面跑,也可以在上面開發。

要跑起來 .net 主要需要三部分,一個 C# 編譯器,用來把 C# 代碼編譯到 CLR 可運行的位元組碼。一個 CLR,另外還需要一個基礎類庫,因為 .net 上大量的類庫不是在 CLR 中實現的,而是使用 C# 實現。

題主列的這幾個 repo 就大部分包含了這三個部分。編譯器使用 C# 編寫的可以跨平台的 Roslyn 編譯器,CoreCLR 也是一個跨平台的 CLR 實現,CoreFX 就是基礎類庫了。

事實上這次 http://asp.net 5 除了提供這些之外還提供了更多工具供大家脫離 Visual Studio 與 Windows 來進行開發的工具,比如說 kvm(剛剛改名叫 dnvm了),這個類似 Ruby 社區的 RVM 和 node 社區的 NVM,可以在一個 json 文件(project.json)裡面指定你需要的 CLR 版本,然後自動幫你下載安裝對應的 CLR(這裡也可以指定 mono 作為 CLR)。還有 kpm 這個類似 npm 的包管理工具,直接從 project.json 裡面讀取你的庫依賴然後幫你安裝到本地(並且與系統全局隔離),然後以往 .net 程序執行也比較複雜,這次也提供了一個叫 k(剛剛改名叫 dnx)的工具來一鍵執行程序的工具。

還有個基於 libuv 實現的 Web Server,給非 windows 的操作系統(因為沒有 http.sys)調試與運行 http://asp.net 項目用。

另外 http://asp.net 的項目(比如 MVC)普遍創建起來比較複雜,需要書寫大量模板代碼,以往都是Visual Studio 幫我們生成項目,現在已經有了一個 http://asp.net 的 yo generator 可用,除了可以創建項目之外還提供了大量腳手架工具(添加 Controller Model 什麼的)。雖然這個項目不是微軟官方,但是發起人是微軟員工。

還有 Roslyn 編譯器變得更加模塊化,方便大家基於它來實現代碼自動補全和重構功能,之前比較著名的一個跨平台 C# 自動補全項目 OminiSharp 已經著手使用 Roslyn 重構了。

之前寫了篇博客在 OSX 上常識過一下,雖然現在 CoreCLR 在非 windows 下跑起來還是有一點問題,但是這點問題要解決也就是時間的問題了。OSX 上初步嘗試 asp.net 5

或者可以直接參考 http://asp.net 的這個 repo 的 wiki,講的更加詳細了,並且實效性更強:aspnet/Home · GitHub

=============

更新:現在微軟出了個更好用的命令行工具,叫 dotnet (GitHub - dotnet/cli: This repo contains the .NET Core command-line (CLI) tools, used for building .NET Core apps and libraries through your development flow (compiling, NuGet package management, running, testing, ...).) ,代替上面提到的 dnvm 工具,用起來相當方便,可以幫你創建項目,管理依賴,甚至還可以直接幫你管理運行時,類似 clojure 的 leinengin 和 haskell 的 stack。


為什麼這麼多人都不看文檔,我明明不是搞.net的還是忍不住來回答了……

Building and Running CoreCLR on Linux · dotnet/coreclr Wiki · GitHub


題主代表了我最痛恨的那種「開源大法好」的那類人,具體表現在什麼都不懂,什麼都想噴,覺得世界非黑即白「你是微軟你就是邪惡」。——當然,不是所有的開源愛好者都是如此,但是正是題主這種人讓人痛恨

首先,微軟在高性能伺服器的研發上投入絕對位居世界前列。也就是說,世界上最擅長於此的人拿著最高的薪水研究出來的一份份代碼,即使只是研究它的寫法,用其他語言重新實現一遍,也一定會讓人有所收穫。

其次,微軟的API設計也是完全可以拿來參考,一個個嘴上在帶著嘲諷喊著「PHP是世界上最好的語言」,實際上有想過怎麼改進語言,怎麼修改他嗎?光見大把的人罵娘,沒見你改進。開源社區最重要的不是罵戰,而是code。Linus所說的「Show me the code」到底是什麼意思你真的理解到了嗎?

最後,每年都有大把新框架出來,很多不穩定,不好用,怎麼就沒見你黑?難道這些代碼是微軟的人寫的就活該被罵?沒手把手教你的教程就不會用了?

呵呵,醒醒。


首先我要糾正題主的一個誤區。當然了,我這裡不討論這份代碼能不能在Linux上運行,因為我不知道。但是,開源並不是為了讓你能夠無腦在Linux上跑的,而是

1、就算不能,也讓大家可以把代碼改成能在Linux上跑(linuxer如是說

2、因為所有人都懂得如何看漏洞,而且大家都會積極的去看而不是等別人去看,所以漏洞會降為0(linuxer如是說


前兩天試了一下,目前跑helloworld是不用mono的(逃

另外說句題外話,等著喂飯的自然不知道買菜、和面有什麼用


這要多傻。

.net 那麼多的源碼,就不知道借鑒一下?

人家花了那麼大價錢僱傭了那麼多大牛設計出來的東西,光是學習就能讓普通人有巨大的成長吧。

整天盯著能不能跑在linux上有意思么。

眼睛都放哪了?


第一,開源的意義不在於免費,而是讓有能力的參與其中,能夠從開源中學到東西是基本要求,而能夠為開源項目貢獻代碼是能力體現,這個世界上有些事情還是得講點情懷,大家都那麼功利的話真沒有什麼意思,就像你說.NET程序無法運行在Linux平台一樣,那我問你Java開發的Windows程序能看嗎?

第二、.NET有沒有用和它是不是開源並沒有直接關係,它更不是你一個人說沒有用就沒有用的,雖然這個世界上的Java程序都運行在Linux伺服器上,可是同樣這個世界上大部分的普通人都是用Windows系統,或許.NET在伺服器領域和移動領域都毫無建樹,可是只要這個世界人有一個人使用Windows,它就有存在的意義。

第三,Mono作為一個開源的.NET的實現,既然你問能不能讓.NET程序脫離Mono在Linux下運行,那麼我倒要問問你,脫離了JVM的Java程序能不能直接運行在Linux上?大家在原理上是相近的,為什麼你們預裝了虛擬機就可以說跨平台,我們要安裝Mono就讓你們覺得跨平台是個笑話呢?

————————————————————

我覺得有時間的話,在學好本職語言的同時,嘗試接受些新的東西,不要覺得學會用Java的某些框架、學會濫用介面,就可以做到一葉障目,完全不理會這個世界的變化,C#是ECMA的標準,Java是甲骨文的養子,難道忘了最近甲骨文給Java兒子打官司打輸了嗎?


前兩天有個問題是C#開源從社區獲得了什麼好處。裡面C#組員說到了有個開源社區的大牛承包了把CLR移植到OS X平台的任務。既然未來OS X是沒問題了,Linux也就沒問題了。你得給別人時間啊,C#未來跨平台是肯定的。


coreclr/get-dotnetcore-dnx-linux.md at master · dotnet/coreclr · GitHub

coreclr/get-dotnetcore-dnx-osx.md at master · dotnet/coreclr · GitHub


強行答一波,雖然自己甚至不是搞前端的。

我第一次發現dotnet這東西開源是在微信公眾號上看到的,當時立馬體驗了一下。在Ubuntu16.04用先用dotnet build建了個工程然後用vs code開進一步開發,整體感覺還是可以的,蠻不錯。

如果強行與win下的Dreamweaver相比的話,(⊙v⊙)嗯,好像還是Dreamweaver好些,但是至少秉承vs習慣的話vs code會看著更習慣些。

另外,我也是C#黑,但是注視著C#一點點好了起來,內心深處也是對它非常期待。希望微軟生態越來越好吧,畢竟很多時候多個選擇多條路不是嗎?


推薦閱讀:

現在是一個初級asp .net程序員,請問簡歷上一般寫什麼項目?或者說用到哪些技術點能加分?
什麼時候用Model,什麼時候用Entity?
現在繼續搞.net還有前途嗎?
怎麼用asp.net做一個簡單的留言板?
ASP.NET Core 性能提升23倍是怎麼回事?

TAG:NET | ASPNET | Mono |