web-dev-qa-db-ja.com

複数のプロジェクトを含むソリューションのnugetパッケージを作成する

現在、いくつかのプロジェクトでソリューションを構築しています。

私たちはこのようなものを持っています:

- Common
  - Logging
     - Logging.NLog
- Threading

したがって、Logging.NLogは、Logging、Logging on Common ...などに依存しています。

Logging.NLogをパックするとき、nugetにLogginとCommonの依存関係を検出してもらいたいと思います。

現時点では、Commonを使用してパッケージを作成し、LoggingにCommonを使用してパッケージをインストールしました。

install-package Common

しかし、Commonに変更を加えるたびに、パッケージを更新する必要があり、それらは継続的インテグレーションシステム(Hudson)によって作成されるため、開発中はかなり面倒です。

単純にプロジェクト参照([参照の追加]-> [プロジェクト...])が必要で、nugetはとにかく依存関係を検出します。

それを達成する方法はありますか?

16
Charles Ouellet

この正確なシナリオを対象とした計画された 機能 があります。

これは明らかにどのように見えるかです:

> nuget.exe pack proj.csproj -IncludeReferencedProjects

どうやら 実装 単なる前ですが、 バグまだ存在アイロンがけアウト

この機能は、現在のところ、次のことを可能にします。

  • 複数のプロジェクトのアーティファクトを単一のnugetパッケージにパッケージ化する(project参照を再帰的に歩くことによって)、

OR

  • 参照されるプロジェクトに.nuspecファイルが付随している場合は、それらのプロジェクトに関連付けられたパッケージへのnugetパッケージ参照を作成します。

機能リクエストは1.5までさかのぼりますが、スリップし続けました。ただし、最近では、 Nuget 2. でのリリースをスケジュールするのに十分な量(要求)が収集されました。

リリースプランは「2013年4月末」のバージョン2.3をペグしているので、しばらくお待ちください。
(現在、最新のNugetバージョンは2.2.1です)。

17

現在、あなたが求めることを正確に行う方法はありませんが、以下は更新を合理化するのに役立ちます。

ソリューションにnuspecファイルを追加する必要があるようです。次の3つのファイルのようなもの。次の2つの依存関係に注意してください。これらは、[$ version $]で一般的なものと同じdllバージョンを参照します。つまり、次のコマンドを実行すると、依存関係の角かっこには特定のバージョンの依存関係パッケージが必要になるため、3つすべてが更新されます。

PM>更新-パッケージ共通

Hudsonでは、nuget packコマンド( Nugetコマンドリファレンスを参照 )を使用してこれらのnuspecファイルを実行し、結果のパッケージをアーティファクトに含めて、ローカルのnugetサーバーに展開する必要があります。それはあなたにお任せします。

他に行う必要があるのは、すべてのアセンブリが同じビルドで同じバージョンを取得するようにすることです。繰り返しになりますが、Hudsonがこれを処理するか、一般的なAssemblyInfoファイルを使用できます。

Common.nuspec

<?xml version="1.0"?>
<package xmlns="http://schemas.Microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
    <version>$version$</version>
    <authors>Charles Ouellet</authors>
    <owners />
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl>
    <id>Common</id>
    <title>Common</title>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>full description here</description>
</metadata>
<files>
    <file src="..\Common\bin\Release\Common.dll" target="lib\net40" />
    <file src="..\Common\bin\Release\Common.pdb" target="lib\net40" />
</files>
</package>

Logging.nuspec

<?xml version="1.0"?>
<package xmlns="http://schemas.Microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
    <version>$version$</version>
    <authors>Charles Ouellet</authors>
    <owners />
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl>
    <id>Logging</id>
    <title>Logging</title>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>full description here</description>
    <dependencies>
        <dependency id="Common" version="[$version$]" />
    </dependencies>        
</metadata>
<files>
    <file src="..\Logging\bin\Release\Logging.dll" target="lib\net40" />
    <file src="..\Logging\bin\Release\Logging.pdb" target="lib\net40" />
</files>
</package>

Logging.NLog

<?xml version="1.0"?>
<package xmlns="http://schemas.Microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
    <version>$version$</version>
    <authors>Charles Ouellet</authors>
    <owners />
    <iconUrl>http://domain/Content/images/LOGO_32x32.png</iconUrl>
    <id>Logging.NLog</id>
    <title>Logging.NLog</title>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>full description here</description>
    <dependencies>
        <dependency id="Logging" version="[$version$]" />
    </dependencies>        
</metadata>
<files>
    <file src="..\Logging.NLog\bin\Release\Logging.NLog.dll" target="lib\net40" />
    <file src="..\Logging.NLog\bin\Release\Logging.NLog.pdb" target="lib\net40" />
</files>
</package>
3
Daniel Dyson

Charlesは、参照されたプロジェクトがNuGetパッケージの構築にも使用されている場合、NuGetがプロジェクト参照をパッケージの依存関係に自動的に解決することを望んでいると思います。

例:

  1. NuGetパッケージを生成するようにログが設定されている
  2. Logging.Nlogは、NuGetパッケージを生成するように設定されています
  3. Logging.Nlogには、Loggingへのプロジェクト参照があります。
  4. 生成されたLogging.Nlogパッケージは、生成されたLoggingパッケージへの依存関係を取得する必要があります。

これも私が探していたものですが、残念ながら現在サポートされていないことがわかりました。 NuGet 1.7で予定されている 作業項目 がありますが、これを処理する方法についてはまだ設計されていません。

2
R. Otten

このスレッドには良い提案があります: NuGetと複数のソリューション

基本的に、共通のコンポーネントを独自のソリューションに分割し、独自のリリースライフサイクルを使用します。

1
Matthew Skelton