Skip to content

MS_DotNetCoreDevelopment

nishi_74322014 edited this page Aug 21, 2026 · 1 revision

.NET Coreの開発

概要

補足: .NET Core でアプリを作るときの
「開発 → ビルド → デバッグ → 配置」の流れを、
Windows で始めて Linux へ持っていくという順序でまとめたページ。

1st Step

Windows 上で開発する。

開発環境を構築し

ビルド

補足: CI で使うなら dotnet build / dotnet publish が標準で、
dotnet msbuildMSBuild の細かい指定が要るときに使う。
詳細は dotnetコマンドMSBuild を参照。

デバッグ

  • Windows 上で以下のようにデバッグ実行される(F5 実行)。
C:\Users\xxxx>"C:\Program Files\dotnet\dotnet.exe" "...\Visual Studio 2017\Projects\ConsoleApp1\ConsoleApp1\bin\Debug\netcoreapp2.0\ConsoleApp1.dll"
Hello World!

補足(この 1 行が示していること): 実行されているのが
ConsoleApp1.exe ではなく dotnet.exe.dll を渡す形である点が重要。

【.NET Framework】 App.exe            … OS にインストールされた CLR が動かす
【.NET Core】     dotnet App.dll     … 共有ランタイムが動かす(フレームワーク依存)
                  App.exe(発行後)   … 自己完結にすればランタイム同梱の exe になる

アプリ本体は .dll.exe は起動用のホストという構造で、
これがクロスプラットフォーム(同じ .dll を Linux でも動かせる)を
成立させている。詳細は .NET Coreのデプロイ を参照。

2nd Step

Linux 上で動作させるには、Linux にデプロイ。

WSL で開発してみる。(WSL上での.NET Core開発

Linux へデプロイする前に WSL で実行してみる事も可能。

ビルド

実行

WSL 上で実行できる(WSL上での.NET Core開発)。

補足(なぜ WSL を挟むのか): Windows で書いたコードが
Linux でそのまま動くとは限らない。よく踏むのは、

差異 具体例
パス区切り "a\b" と書くと Linux で壊れる → Path.Combine を使う
大文字小文字 Windows は区別しないが Linux は区別する(ファイル名)
改行コード CRLF / LF
文字コード 既定エンコーディングの違い
Windows 固有 API レジストリ、System.Drawing、WMI

WSL なら実機を用意せずにこれらを検出できる、というのが
この Step の意義である。

長いファイル名/パス名

補足: Windows の **MAX_PATH(260 文字)**制限の話。
ビルド成果物のパスが深くなると踏むことがある
obj\Debug\net8.0\... が積み上がるため)。
Windows 10 1607 以降はレジストリまたはグループ ポリシーで
長いパスを有効化でき、.NET 側も対応している。
Linux にはこの制限が無いため、Windows 側だけの問題である。

3rd Step

Visual Studio Code による開発(CSharp for Visual Studio Code

補足(最新化): VS Code での C# 開発は、
従来の OmniSharp ベースの拡張から
C# Dev Kit(および新しい C# 拡張)に移行している。
ソリューション エクスプローラー、テスト エクスプローラーが加わり、
Visual Studio に近い体験が得られる。

参考

Build Insider

C# による .NET Core 入門

http://www.buildinsider.net/language/dotnetcore

※ 前提となる開発環境は、CentOS 7.3, .NET Core SDK, Visual Studio Code であるもよう。


Tags: 移行, .NET開発, .NET Core

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki

(未着手)

開発基盤部会 Wiki

移行管理: DONETODO

Clone this wiki locally