「NuGetパッケージを追加するだけでビルドタスクが自動実行されるやつの作り方」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
17行目: 17行目:
 
プロジェクトファイル(csprojファイル)をテキストエディタで編集する。
 
プロジェクトファイル(csprojファイル)をテキストエディタで編集する。
 
NuGetのパッケージ情報やNuGetに含めるファイルを記述する。
 
NuGetのパッケージ情報やNuGetに含めるファイルを記述する。
: 例 NugetBuildTask1.csproj
+
: 例:NugetBuildTask1.csproj
 
<source lang="xml">
 
<source lang="xml">
 
<Project Sdk="Microsoft.NET.Sdk">
 
<Project Sdk="Microsoft.NET.Sdk">

2024年4月17日 (水) 02:04時点における版

ライブラリプロジェクトを作る

NuGetパッケージになるライブラリプロジェクトを作る。

例:NugetBuildTask1

プロジェクト名と同じtargetsファイルを作る

プロジェクト名というかNuGetのパッケージIDと同一のtargetsファイルを作る。

例: NugetBuildTask1.targets
<Project>
    <Target Name="HelloWorld" AfterTargets="build">
        <Message Text="Hello, World!" Importance="high" />
    </Target>
</Project>

プロジェクトファイルをテキストエディタで編集する

プロジェクトファイル(csprojファイル)をテキストエディタで編集する。 NuGetのパッケージ情報やNuGetに含めるファイルを記述する。

例:NugetBuildTask1.csproj
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>

    <!-- nugetのパッケージ情報 -->
    <PackageId>NugetBuildTask1</PackageId>
    <Version>1.0.0</Version>
    <Authors>Your Name</Authors>
    <Description>Your Description</Description>
  </PropertyGroup>

  <!-- nugetに含めるファイルを列挙 -->
  <ItemGroup>
    <!-- targetsファイルはbuildディレクトリに格納すること -->
    <!-- targetsファイルの名前はPackageIdと同一にすること -->
    <None Include="NugetBuildTask1.targets" Pack="true" PackagePath="build" />
  </ItemGroup>

</Project>

なお、ItemGroupタグの中身はContentタグを使った記法も存在するらしいが、targetsファイルについてはNoneタグが推奨らしい。なんでかは知らんがgithub上のこの手法を使っているプロジェクトを見て回った限りでは両方の記法が乱立しているので知識として覚えておいた方がいい。

  <ItemGroup>
    <Content Include="NugetBuildTask1.targets">
      <Pack>true</Pack>
      <PackagePath>build</PackagePath>
    </Content>
  </ItemGroup>

NuGetパッケージを作る

Visual Studioであればメニューの「ビルド」の「パック」を実行する。

コマンドラインの場合は以下のようになる。

$ dotnet pack

NuGetサーバーにぶち込む

デバッグ用に壮大なNuGetサーバーを立てるのは面倒なのでdockerあたりでシンプルなのを探してくるとよい。

デバッグ

コンソールプロジェクトなどを作って上記のNuGetを追加してみる。