21

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

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

- Common
  - Logging
     - Logging.NLog
- Threading

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

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

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

install-package Common

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

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

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

4

5 に答える 5

20

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

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

> nuget.exe pack proj.csproj -IncludeReferencedProjects

ほんの数前に実装されたようですが、まだ解決されていないバグがあります

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

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

また

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

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

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

于 2013-03-15T11:42:58.070 に答える
3

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

ソリューションに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>
于 2012-06-26T16:04:08.850 に答える
2

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

例:

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

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

于 2011-10-11T13:48:33.350 に答える
1

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

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

于 2012-05-15T22:22:18.580 に答える
0

私はこれを次のように達成することができました:

<ProjectReference Include="MyProject2.csproj" PrivateAssets="All" />

PrivateAssets="All"プロジェクトごとにMyProject.csprojを追加します。

于 2021-02-25T14:28:56.510 に答える