dotnet コマンドによるビルド

前回の .NET Core と .NET Standard に引き続き、今回はコマンドラインでアプリやライブラリをビルドする方法を検証しました。
まず、ビルドに関連する dotnet コマンドの一覧を挙げます。
基本的にはプロジェクト フォルダー上で実行しますが、build や pack などは ソリューション フォルダー上でも実行できます。

  • dotnet restore
    • NuGet 参照を解決する
  • dotnet build
    • MSBuild.exe を実行する
    • 内部で restore する (ソースコードしかない状態でも実行できる)
  • dotnet msbuild
    • MSBuild.exe と同じ引数を指定する
    • 内部で restore しない (ソースコードしかない状態では失敗)
  • dotnet publish
    • publish フォルダーに発行する
    • 内部で build する (ソースコードしかない状態でも実行できる)
  • dotnet pack
    • NuGet パッケージを作成する
    • 参照先の DLL は含まれず、依存関係が設定される
    • 内部で build しない (ソースコードしかない状態では失敗)
  • dotnet clean
    • 前回のビルド結果を消去する
    • restore の結果は残る
  • dotnet run
    • ソースコードからアプリを実行する
    • 内部で build する
  • dotnet App1.dll
    • ビルド済みのアプリを実行する

 

以下、詳細について記述していきます。

dotnet msbuild と msbuild

dotnet msbuild と msbuild の動作は同じです。

dotnet msbuild /p:Configuration=Release /t:Rebuild
msbuild /p:Configuration=Release /t:Rebuild

ただし、msbuild は環境変数の PATH に設定されていないため、
cmd や PowerShell で実行するにはそのパスを指定しなければなりませんが、
dotnet は PATH に設定されているため cmd や PowerShell でそのまま実行できて便利です。

アセンブリのビルド・発行

リビルドするには --no-incremental を指定します。

dotnet build -c Release --no-incremental

ただし build では、.NET Core を対象とする場合、NuGet 参照の DLL がコピーされません。
build では開発環境が想定されており、.dev.json ファイルに NuGet 参照が記述されます。
(.NET Framework を対象とする場合は NuGet 参照の DLL もコピーされます。)

配置用にすべての DLL を含めるには publish を使います。
プロジェクトに対象のフレームワークが複数ある場合、-f で一つだけ指定します。

dotnet clean -c Release
dotnet publish -c Release -f netcoreapp2.0

なお、publish 単独ではリビルドができないため、先に clean を実行しています。

NuGet パッケージ作成

出力先のディレクトリを変更するには -o を指定します。

dotnet pack -c Release -o pkg

または、

dotnet msbuild /p:Configuration=Release /t:pack

[構築時に NuGet パッケージを生成する] (.csproj では GeneratePackageOnBuild) を設定して build する方法もあります。

dotnet build -c Release --no-incremental

GeneratePackageOnBuild

 

前回: .NET Core と .NET Standard
次回: ASP.NET Core Web API の Tips

作成したサンプル

バージョン情報

  • .NET Core 2.0

参照

広告
カテゴリー: .NET Core, .NET Framework, ツール. タグ: . 2 Comments »

ビルドして ZIP にする PowerShell スクリプト

以前に .NET ビルド小技集 (4) という記事を書き、
PowerShell でバージョンをインクリメントしてビルドする方法を紹介しました。
今回は、そのツールを改良したうえで NuGet で公開しました。

Visual Studio のプロジェクトに対して、NuGet で KTools.ZipRelease をインストールすると、
次の PowerShell ファイルがプロジェクトに追加されます。

  • KTools.VersionIncrement.ps1
  • KTools.ZipRelease.ps1

image

エクスプローラー上で PowerShell スクリプトを実行できます。

image

KTools.ZipRelease.ps1 により、以下の処理が実行されます。

  • バージョン番号のインクリメント (KTools.VersionIncrement.ps1 の呼び出し)
  • MSBuild.exe を利用して Release ビルド
  • ビルドの結果を ZIP ファイルにする
    • ファイル名は「AssemblyName-x.y.z.zip」の形式
    • 既定ではプロジェクト フォルダーの下の「zip」フォルダーに作成される

image

 

KTools.VersionIncrement.ps1 により、AssemblyInfo.cs 内の
AssemblyVersion 属性および AssemblyFileVersion 属性の値のビルド番号を 1 だけ増加させています。
例えば、1.0.2.0 が 1.0.3.0 に、1.0.2 が 1.0.3 に、1.0.2-alpha が 1.0.3-alpha に変わります。

ちなみに、バージョン番号は .exe および .dll ファイルのプロパティに反映されます。

image

PowerShell スクリプトのため、各自の要件に合わせてカスタマイズできるでしょう。
また、バージョン番号のインクリメントについては、
KTools.VersionIncrement として単独でインストールして使うことができます。

 

技術的には、以下の特徴が挙げられます。
ソースコードは Build Release (GitHub) にあります。

  • PowerShell の中で C# を利用
  • 値を変更する処理で正規表現を利用
  • .csproj ファイルからの値の読み込みに XPath を利用
  • MSBuild.exe のパスを探索 (たいへん)
    • .NET Framework 付属の MSBuild より Visual Studio 付属の MSBuild を優先

 

追記: ビルド用のスクリプトを Visual Studio の「外部ツール」に登録すると便利です。
また、.NET Core プロジェクト形式向けのビルド スクリプトも追加しました。

作成したツール
Build Release (GitHub)

参照
.NET ビルド小技集 (4)
.NET Framework の正規表現
.nuspec リファレンス
NuGet Package Version Reference

NuGet パッケージを作成して公開する

NuGet パッケージ (.nupkg) を作成して公開する方法について記述します。

 

■ 事前準備

  • NuGet Gallery アカウントの作成

NuGet Gallery でアカウントを作成します。
アカウントを作成すると、パッケージの公開に必要な API キーが発行されます。

  • ツール

NuGet パッケージを作成するには、次のいずれかのツールが必要です。
両方とも NuGet – Downloads で入手できます。

・NuGet.exe : コマンドライン ツール
・NuGet Package Explorer : GUI ツール

NuGet Package Explorer があれば、NuSpec ファイルや NuGet パッケージを手軽に作成できます。
ただし、バージョン アップなどで継続的に NuGet パッケージを作成するには、
コマンドライン ツールを利用すると便利です。
以下では、主に NuGet.exe で NuGet パッケージを作成する方法を紹介します。

 

■ Nuspec ファイルを作成する

NuGet パッケージを作成するには、DLL ファイルなどの配布物のほかに、
ID や作者などのメタデータを記述した Nuspec ファイルが必要です。
Nuspec ファイルは拡張子が .nuspec で、XML 形式のファイルです。

Nuspec ファイルのテンプレートは、

nuget spec

を実行すれば得られます。
このファイルに実際のメタデータの値を指定していきます。

Nuspec ファイルの仕様は Nuspec Reference に記述されています。
外部への参照やファイルの追加は、次のように指定します。

  • .NET Framework アセンブリへの参照

<frameworkAssemblies>
  <frameworkAssembly assemblyName="System.Web" />
</frameworkAssemblies>

  • パッケージへの参照

<dependencies>
  <dependency id="jQuery" />
</dependencies>

  • パッケージに含めるファイル

ライブラリとしてプロジェクトの参照に追加するのであれば、

<files>
  <file src="bin\Release\*.*" target="lib\net45" />
</files>

のように指定します。
ファイルとしてプロジェクトに追加するには、lib の代わりに content を指定します。
なお、<files> は <package> の子要素 (<metadata> の兄弟要素) のため注意が必要です。

 

■ NuGet パッケージを作成する

NuGet パッケージ (.nupkg) を作成するには、次のコマンドを実行します。

nuget pack MyLibrary.nuspec

 

■ NuGet パッケージを公開する

NuGet パッケージを公開するには、次の方法があります。

  • コマンドライン

次のコマンドを実行します。

nuget setapikey XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
nuget push MyLibrary.1.0.0.0.nupkg

setapikey を一度実施すれば API キーが保存されるようです。

  • NuGet Package Explorer

NuGet Package Explorer を利用する場合、API キーは毎回指定しなければならないようです。

  • NuGet Gallery

NuGet Gallery でアップロードする場合、API キーを指定する必要はありません。

なお、公開前にローカルの環境でインストールを試すことができます。
そのためには、Visual Studio のオプションでパッケージ ソースにローカル ディレクトリを追加します。

 

■ プロジェクトから NuGet パッケージを作成する方法

一部のメタデータを自動的に補完させる方法もあります。
これは、アセンブリをライブラリとして (target="lib\xxx") パッケージを作成する場合に利用できます。

プロジェクト フォルダー (.csproj などが存在するフォルダー) を作業フォルダーにして

nuget spec

を実行すると、$id$, $version$, $title$, $author$, $description$
というプレースホルダーが含まれた Nuspec ファイルが作成されます。
これらのプレースホルダーには、AssemblyInfo.cs などに記述されたアセンブリ属性の値が利用されます。

あとは、このフォルダー上で

nuget pack

を実行します。
ただし、これだと既定では Debug ビルドされたファイルからパッケージを作成してしまいます。
Release ビルドされたファイルを利用するには、次のコマンドを実行します。

nuget pack -Prop Configuration=Release

 

■ その他のツール

NuGet Packup を使うと、
必要な情報をすべて AssemblyInfo.cs に指定しておくことで NuGet パッケージを作成できます。

NuGet Packup - AssemblyInfo.cs

 

参照
NuGet Gallery
Nuspec Reference
NuGet (CodePlex)
NuGet Package Explorer (CodePlex)

NuGet – NuGet でプロジェクト ライブラリを管理する
NuGet – パッケージを作成して NuGet で公開する
.NET開発の新標準「NuGet」入門(後編)
NuGet Packup (GitHub)

カテゴリー: ツール. タグ: , . 2 Comments »