Feeds:
文章
迴響

Archive for 2016 年 06 月

.NET Core 1.0 初體驗

看到 .NET Core 1.0 (Runtime) 正式發布消息, 於是趕來嘗鮮一下, 結果 sdk 還是 preview 2…

https://www.microsoft.com/net/download#core

算了… 還是試玩一下, 下載 “.NET Core SDK binaries only" 解壓縮即可使用

我的開發環境如下
* Windows 10 x64
* Docker Toolbox 1.11.1
* .NET Core SDK 1.0 Preview 2 x32

.NET Core SDK 目錄結構

建立一個 hello 目錄

依據執行 dotnet new, dotnet restore, dotnet run 就可以看到 Hello World 如下圖

執行到這裡已經產生可跨平台執行的 .dll, 待會用 docker 驗證

目前hello目錄下已經產生如下的目錄結構

其中 hello.dll 就是編譯輸出後的檔案, 可用 dotnet.exe hello.dll 執行

Program.cs 是主程式檔, 如果有多個 .cs 會自動編譯

project.json 是專案描述檔, 編譯就靠這個檔, 如果有調整就需要執行一次 dotnet restore 產生新的 project.lock.json 才能依據新的設定編譯

接下來就啟動 Docker Terminal

先 docker pull microsoft/dotnet:latest

再建立 container, docker run -it -v /c/Users/cwchiu/:/cwchiu microsoft/dotnet:latest

執行剛剛 Windows 上產生的 .dll 如下圖

還有個問題就是每次執行程式都需要 dotnet.exe 才能執行產生 .dll, .NET Core 有提供 self-contained application 可以產生"當下"編譯環境的可執行檔

將 project.json

修改為

依據執行 dotnet restore 和 dotnet build 產生 hello.exe, 可不需要 dotnet.exe

雖然我的 OS 是 Win10 x64, 但因為我使用的是 x86 .NET Core SDK 所以編譯最後選擇產生的是 win10-x86

docker 上的 dotnet 要編譯可執行檔需要使用 runtime 為 debian.8-x64, 其他 runtime 識別碼可參考

https://docs.microsoft.com/en-us/dotnet/articles/core/rid-catalog

2016.7.6補充輸出非開發平台的原生程式

dotnet publish -r “debian.8-x64″

可以直接輸出目標平台的原生程式, 無需依賴 .NET Core

從 Docker 中執行如下

實際佈署到 CentOS 7.2 可能出現

Failed to load /root/dotnet/bin/libcoreclr.so, error: libunwind.so.8: cannot open shared object file: No such file or directory"

依據網路解法, 安裝 yum install -y icu libunwind

終於看到執行結果

廣告

Read Full Post »

編譯 node 6.2.0 的 edge addon

工作可能需要 Node 呼叫 .NET DLL, edge 專案可讓你實現這個功能, 但是目前官方預編譯只到 5.1.0, 嘗試自己編編看

開發環境

  • node 6.2.0
  • node-gyp 3.3.1
  • python 2.7
  • visual studio 2013
  • dnvm v1.0.0-beta5-10384
  • dnx 1.0.0 rc1
  • edge – git clone

目錄結構

  • /project
    • /node_modules
      • /node-gyp
        • /bin
          • node-gyp.js
    • /edge
      • /build
        • /Release
          • edge_coreclr.node
          • CoreCLREmbedding.dll
          • edge_nativeclr.node
      • /lib
        • edge.js
      • /samples

編譯

cd edge

node.exe ..\node_modules\node_gyp\bin\node_gyp.js configure

node.exe ..\node_modules\node_gyp\bin\node_gyp.js build

測試

參考資料

[1] https://github.com/tjanczuk/edge/issues/438

 

 

 

 

 

Read Full Post »

最近嘗試了 Google Drive API 上傳檔案, 發現支援 io.Base (http.MediaIoBaseUpload) 方式上傳, 因此有機會直接將 URL File 的 Stream 直接儲存到 Google Drive, 可是 requests 的 Response 雖然支援 Stream 但卻不支援 seek 操作, 網路上找到 pyhttpio 不過他是針對 urllib.request, 於是我也針對 requests 改了一版

requests_io.py

所以就可以在 Drive API v3 使用

r =SeekableHTTPFile('http://....', debug=True)

media_body = MediaIoBaseUpload(r,mimetype=mime_type)

file = service.files().create(media_body=media_body).execute()

Read Full Post »