58

最近、いくつかのプロジェクトからnugetパッケージをパックし始めました。まず、PackageExplorerアプリケーションから始めました。これは優れたツールですが、継続的インテグレーションを行う場合はあまり役に立ちません。次に、nuspecテンプレートファイルを指定し、バージョン番号などの変更データをコマンドライン引数として渡すことを検討しました。後で、nugetパッケージの依存関係をどのように定義するのか疑問に思いました。実は、csprojを指定した場合、nuget.exeはpackage.configに基づいてこれを既に実行しています。さらに、アセンブリ情報から作成者、バージョン、著作権などの関連データを抽出します。私が今欠けているのは、コマンドラインでlicenseUrlを指定する機能です。しかし、私は質問をもっと一般的にしたかったのです。そして、私は尋ねています:

nugetパッケージをパックするための好ましい方法は何ですか?

4

4 に答える 4

95

あまり知られていない事実があります:両方を組み合わせることができます!csprojファイルをターゲットにして、csprojファイルと同じ名前のnuspecファイルが同じディレクトリにあることを確認します。NuGetは、パッケージの作成中に2つをマージします。

つまり、target<ProjectName>.csprojは、オプションで、NuGet.exeによってメタデータとして使用される対応するトークン化されたファイルを追加します。 <ProjectName>.nuspec

これにより、出力の場所、依存関係、バージョン、およびプロジェクトから派生する可能性のあるその他のものを管理する必要がなくなります。

于 2013-02-11T08:05:25.483 に答える
17

単純なパッケージの場合は、パッケージを直接作成でき.csprojます.vbproj。ただし、より高度なパッケージの場合、特にカスタムファイルをパッケージに取り込む必要がある場合は、を使用する必要があります.nuspec。私は通常、csprojから始めて、必要に応じてnuspecに移動します。csprojのコマンドを使用して、いつでもnuspecを取得できますnuget spec

https://docs.nuget.org/create/creating-and-publishing-a-package

次のパラメータをlicenseUrl使用するなど、任意のプロパティを指定できます。Propertiesnuget pack

nuget pack -properties licenseUrl=http://blah
于 2013-02-10T14:06:40.720 に答える
17

Visual Studio 2017の.csprojを使用すると、.nuspecファイルは必要ありません。実際にcsprojに直接値を追加すると、値が取得されます。

Visual Studioでプロジェクトを右クリックし、xxxxx.csprojを編集します。メモ帳も問題なく動作します。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <Version>1.0.1</Version>
    <authors>Subtracts</authors>
    <TargetFrameworks>netstandard1.6;net452</TargetFrameworks>
    <AssemblyName>Checkout.net</AssemblyName>
    <PackageId>Checkout.net</PackageId>

...

</Project>

psコメントするのに十分な評判がないので、ザビエルの答えにコメントする代わりに答えを残しています。:)

于 2017-02-03T00:41:21.107 に答える
8

.nuspec2018年2月現在の.NETCoreでは、基本的な仕様ファイルのプロパティ以外のファイルを提供する必要があります。

ただし、ファイルに追加しない限り、dotnet packコマンドはファイルを使用しません。.nuspec<NuspecFile>relative path to nuspec</NuspecFile>.csproj

https://github.com/dotnet/cli/issues/2170を参照してください

現在、ほとんどのパッケージは.nuspecファイルなしで作成できます。注目すべきは依存関係です。SpecFlowなどPrivateAssetsのツールである要素を追加する必要があるかもしれません。msbump

<PackageReference Include="msbump" Version="2.3.2">
  <PrivateAssets>all</PrivateAssets>
</PackageReference>

これにより、このパッケージの依存関係がパッケージの依存関係に「流れる」のを防ぎます。

最も柔軟な方法でバージョンを指定することについても読む価値があります。

https://docs.microsoft.com/en-us/nuget/consume-packages/dependency-resolution#floating-versions

そして範囲構文。

https://docs.microsoft.com/en-us/nuget/reference/package-versioning#references-in-project-files-packagereference

于 2018-02-16T11:44:01.620 に答える