ユーザ用ツール

サイト用ツール


サイドバー

プログレス合同会社

広告

windows:vs:cs:library:nuget

03.NuGetプロジェクトの作成

CoreプロジェクトをラップしてNuGetパッケージを作成するプロジェクトを作成します。

windows:vs:newproject.png

Visual Studio

ソリューションエクスプローラーの『ソリューション』で右クリック➡『追加(D)』➡『新しいプロジェクト(N)…』でプロジェクトをソリューションに追加します。

windows:vs:cs:library:nuget0101.png

新しいプロジェクトを追加

C#.NETまたは.NET Standardを対象とするクラスライブラリを選択します。

windows:vs:cs:library:nuget0102.png

新しいプロジェクトを構成します

プロジェクト名を『NuGet』にしています。

次へ(N)』で次に進みます。

windows:vs:cs:library:nuget0103.png

追加情報

作成(C)』でDocsプロジェクトが作成されます。

windows:vs:cs:library:nuget0104.png

Class1.csの削除

自動的に作成された『Class1.cs』を削除します。

NuGetプロジェクトの定義を作成

下記のいずれかの方法でNuGetプロジェクトのプロジェクトファイルを開いて編集します。

  • ソリューションエクスプローラーでプロジェクト名をダブルクリック
  • ソリューションエクスプローラーでプロジェクト名を右クリック➡プロジェクトファイルの編集

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFrameworks>netstandard2.0;net10.0</TargetFrameworks>
  </PropertyGroup>
  <PropertyGroup>
    <PackageId>$(RootPackageId)</PackageId>
    <AssemblyName>$(NuGetAssemblyName)</AssemblyName>
    <RootNamespace>$(PackageId)</RootNamespace>
  </PropertyGroup>
  <ItemGroup>
    <ProjectReference Include="..\Core\Core.csproj" PrivateAssets="all" />
  </ItemGroup>
  <PropertyGroup Condition="'$(Configuration)' == 'Release'">
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <TargetsForTfmSpecificBuildOutput>
      $(TargetsForTfmSpecificBuildOutput);IncludeProjectReferences
    </TargetsForTfmSpecificBuildOutput>
    <PackageIcon>NuGet.png</PackageIcon>
    <PackageReadmeFile>README.md</PackageReadmeFile>
  </PropertyGroup>
  <Target Name="IncludeProjectReferences" DependsOnTargets="ResolveReferences"
          Condition="'$(Configuration)' == 'Release'">
    <ItemGroup>
      <BuildOutputInPackage Include="@(ReferenceCopyLocalPaths)"
                            Condition="'%(ReferenceCopyLocalPaths.ReferenceSourceTarget)' == 'ProjectReference'" />
    </ItemGroup>
  </Target>
  <ItemGroup Condition="'$(Configuration)' == 'Release'">
    <None Include="../README.md" Pack="true" PackagePath="\" />
    <None Include="NuGet.png" Pack="true" PackagePath="\" />
  </ItemGroup>
  <Target Name="PostBuild" AfterTargets="Build" Condition="'$(Configuration)' == 'Release'">
    <ItemGroup>
      <DeleteFiles Include="bin\Release\$(PackageId).*.nupkg" />
    </ItemGroup>
    <Delete Files="@(DeleteFiles)" />
  </Target>
  <Target Name="PostPack" AfterTargets="Pack" Condition="'$(Configuration)' == 'Release'">
    <ItemGroup>
      <DeleteFiles Include="$(NuGetLibDir)\$(PackageId).*.nupkg" />
    </ItemGroup>
    <ItemGroup>
      <CopyFiles Include="bin\Release\$(PackageId).*.nupkg" />
    </ItemGroup>
    <Delete Files="@(DeleteFiles)" />
    <Message Text="Copy @(CopyFiles-&gt;Count()) Files to $(NuGetLibDir)" Importance="High" />
    <Copy SourceFiles="@(CopyFiles)" DestinationFolder="$(NuGetLibDir)" />
  </Target>
</Project>

3行目
Com用のソリューションで使用するときはnetstandard2.0フレームワークのNuGetパッケージが必要になります。
6行目~8行目
アセンブリ情報を定義しています。
11行目
Coreプロジェクトを参照しますが、ファイルは公開されていないと定義してます。
13行目~20行目
パッケージに含めるファイルを定義しています。
Releaseビルドの時だけ有効にしています。
14行目
ビルド時にパッケージを生成します。
15行目~17行目
TFM(Target Framework Moniker)ごとに参照プロジェクトのファイルもパッケージに含めます。
21行目~26行目
パッケージに含める参照プロジェクトのファイルはReferenceCopyLocalPathsに存在しています。
28行目~31行目
参照プロジェクト以外のファイルが存在している場所を定義しています。
32行目~37行目
Releaseビルド後に実行する処理を定義しています。
古いNuGetパッケージを削除しています。
38行目~48行目
Releaseでパッケージ作成後に実行する処理を定義しています。
環境変数NuGetLibDirに存在する古いNuGetパッケージを削除しています。
作成されたパッケージを環境変数NuGetLibDirのディレクトリにコピーしています。

windows/vs/cs/library/nuget.txt · 最終更新: by プログレス合同会社