.NET Core對於傳統.NET開發人員而言是既熟悉又陌生的新平台,所以有時遇上出乎意料的事情也純屬正常情況。這時只需點耐心,多查查資料,努力找到原因,也未嘗不是件有意義的體驗。
比如當建完一個最簡單的控制台應用程序:
dotnet new console -o helloRID
並完成編譯后:
dotnet build
你在bin目錄下會發現生成的程序集是dll文件,而非之前經驗里的exe文件。
再查下工程文件,輸出類型確實是Exe。
是不是感到很意外?
固然,我們也可以使用dotnet run
的方式獲得程序運行的結果,但這樣的文件格式絕不是用戶所希望的,他們沒有辦法直接運行該文件。
問題的緣由很容易借由搜索引擎找到——在編譯的時候需要額外指定Runtime IDentifier(運行時標識)。
Runtime IDentifier的作用是指定應用程序運行時的目標平台。這樣就很容易理解了,因為.NET Core支持跨平台,所以在編譯時編譯器默認並不知道你所想生成的可執行文件是需要在哪個平台上運行的,只有你主動告訴它,才能得到你想要的結果。
於是運行dotnet build -r osx-x64
(假設你像我一樣在macOS系統上運行程序),可執行文件如預期般出現在bin目錄的osx-64文件夾下。
如果是Windows 10系統,則運行dotnet build -r win10-x64
。熟悉的exe文件再次出現。
更多的Runtime IDentifier可以在微軟官網上找到,這里需要誇一下微軟,改進后的官方文檔現在越來越好用了。