4

現在、このソリューションのすべてのプロジェクトに対して多数のナゲット パッケージを公開しようとしています。プロジェクトは単純なツリーでセットアップされ、Myre が基本プロジェクトであり、すべてがそれに依存しています。

Myre <- Myre.Debugging <- Myre.Debugging.UI <- Myre.UI
Myre <- Myre.UI
Myre <- Myre.Entities <- Myre.Graphics

必要に応じて、他の Myre サブプロジェクト パッケージに適切な依存関係を持つ nuget パッケージとして、個別の各プロジェクトをパッケージ化しようとしています。

私の最初のステップは、Myre のパッケージ(プロセスのnuspecとバッチファイル) を作成することでした。これはうまく機能しているようです。ギャラリーは Myre にninject (別の nuget パッケージ) 依存関係があることを示しており、すべて問題ありません。

次のパッケージを作ろうとしたときに問題が発生しました。Myre.Debuggingは Myre (通常のプロジェクト参照) に依存し、他には何も依存しません。この nuspecを nuget pack (verbose) で使用すると、次のようになります。

Attempting to build package from '(x86) Myre.Debugging.csproj'.
Packing files from 'C:\Long_Path\Myre\Myre.Debugging\bin\x86\Release'.
Add file 'C:\Long_Path\Myre\Myre.Debugging\bin\x86\Release\Myre.Debugging.dll' to package as 'lib\net40-Client\Myre.Debugging.dll'
Add file 'C:\Long_Path\Myre\Myre\bin\x86\Release\Myre.dll' to package as 'lib\net40-Client\Myre.dll'
Add file 'C:\Long_Path\Myre\Myre\bin\x86\Release\Myre.XML' to package as 'lib\net40-Client\Myre.XML'
Found packages.config. Using packages listed as dependencies

Id: Myre.Debugging
Version: 1.0.0.2
Authors: Microsoft
Description: Description
Dependencies: Ninject (= 3.0.1.10)

Added file 'lib\net40-Client\Myre.Debugging.dll'.
Added file 'lib\net40-Client\Myre.dll'.
Added file 'lib\net40-Client\Myre.XML'.

Successfully created package 'C:\Long_Path\Myre\Myre.Debugging\Myre.Debugging.1.0.0.2.nupkg'.

ご覧のとおり、packages.config ファイル (ここにはファイルがないため、おそらく Myre から) を取得し、そこから Ninject の依存関係を決定します。Myre.Debugging と Myre を単一のパッケージにしたい場合は問題ありません。ただし、これは私が望んでいるものではありません。Myre.Debugging が Myre パッケージへの依存関係を取得することを望んでいます。

Myre アセンブリを単に Myre.Debugging パッケージにコピーするのではなく、Myre をパッケージ参照として使用するように nuget をセットアップするにはどうすればよいですか?

編集:: -IncludeReferencedProjectsを使用せず、次を指定してみました:

<dependencies>
  <dependency id="Myre" version="1.0.0.1" />
</dependencies>

しかし、何らかの理由で、これはまったく依存関係のないパッケージを作成するだけです! このように依存関係を手動で指定することができたとしても、理想的とは言えません。

4

1 に答える 1

2

Pack コマンドの NuGet コマンド ライン リファレンスによると、IncludeReferencedProjectsスイッチは次のように機能します。

参照プロジェクトを依存関係として、またはパッケージの一部として含めます。参照されるプロジェクトに、プロジェクトと同じ名前の対応する nuspec ファイルがある場合、その参照されるプロジェクトは依存関係として追加されます。それ以外の場合、参照プロジェクトはパッケージの一部として追加されます。

あなたの場合、Myre.Debugging.nuspecはプロジェクト ファイル名と一致しません: (x86) Myre.Debugging.csprojなど。そのコマンド ライン オプションを機能させるには、これらのファイル名を一致させる必要があると思います。

または、これを<dependencies>nuspec ファイル内の要素で機能させたい場合は、名前の不一致の問題に関する別のバリ​​アントに直面している可能性があります。Myre.nuspecファイルは、その ID を次のように定義します

<id>$id$</id>

NuSpec リファレンスには、$id$トークンが「アセンブリ名」に置き換えられていることが記載されています。DLL の名前について話している場合 (拡張子は無視)、生成される ID は(x86) Myreなどになると思います。問題が解決するかどうかを確認するために、ID を一時的にハードコーディングしてみてください。

これらの提案された変更を試みたことはありません。それらが機能することを保証することはできませんが、これがあなたを正しい方向に導いてくれることを願っています. 幸運を!

于 2013-11-20T02:42:49.887 に答える