7

背景: 「A」と「B」という 2 つのアセンブリがあります。「「A」は「B」を参照します。「A」は、nupkg にパッケージ化する必要があると思われる追加の dll (Microsoft.Enterprise Library.Data および Microsoft Enterprise Library.Common ) も参照します。

私のnupkgパッケージには、「A」、「B」、および2つの「Microsoft Enterprise」アセンブリからのアセンブリ出力が含まれている必要があるため、誰かが私のパッケージをインストールすると、アセンブリ「A」と他の3つへの直接参照が提供されます。アセンブリが利用可能になります (ただし、直接参照されないため、アプリが実行されます。参照されていない dll をパッケージ化する正しい方法は何ですか?

試行 #1: 必要なすべての dll を \net35 フォルダーにパックする 「参照」要素に関する NuGet ドキュメント によると、「この要素を省略した場合、lib フォルダー内のすべてのアセンブリを参照するという通常の動作が適用されます。」

したがって、この要素を使用することで、参照として指定されたアセンブリのみが含まれると思います。「ファイル」要素も使用する場合、これは当てはまらないようです<file src=*.dll" target="lib\net35" />。すべての dll をパッケージにコピーするこのような要素がある場合、このパッケージを実装するアセンブリは、\net35 ディレクトリ内のすべてのアセンブリを参照します。これは私がやりたいことではありません。「参照」で指定されたアセンブリのみが実際に参照され、他のすべては展開された \packages フォルダーに残り、すべての dll が同じディレクトリにあるため、アプリが機能するという魔法を期待していました。たぶん私は間違っている....

試み #2 コンテンツとしてプロジェクトに追加 するパッケージ化されたときに参照されていないアセンブリを lib\net35 ではなく \content\lib に配置すると、プロジェクトに \lib フォルダーが作成され、\content\lib dll がそのプロジェクトに直接ダンプされます。それらをソース管理にチェックインします。これは機能し、コンパイルして実行しますが、これらをプロジェクトの \lib フォルダーに保存したくありません。

プロジェクトが「A」への参照を取得し、同じ場所にあるが直接参照されていない他の必要なアセンブリを使用して実行できるソリューションを探しています。試行 #1 が正しいパスのようですが、バグがあるのでしょうか?

参考までに、チームにも回答があることを確認するために、これを NuGet の問題として直接入力しました。

4

2 に答える 2

4

これは Nuget 2.1 で導入されたバグであり、2012 年 12 月にリリースされた Nuget バージョン 2.2 で修正されました。

元の投稿で試行 #1 を使用すると、正しく機能するようになりました。

于 2012-12-26T19:46:05.317 に答える
0

あなたの「Attempt1」は実際にはうまくいかないと思います。「A」のみを参照する場合。パッケージをビルドすると、「A」のみが(デフォルトで)出力ディレクトリにコピーされます。その後、アプリケーションを配布すると、「A」のみが存在し、エラーが発生します。

アプリケーションを実行するには、すべてのDLLへの参照が必要です(または、参照されたDLLを出力ディレクトリに自動的にコピーする別のソリューションを考え出す必要がありますが、参照を直接指定しないことに大きな価値があるかどうかはわかりません)。DLLは数個しかないため、参照セクションを省略して、すべてのDLLがlibフォルダーから自動的に参照されるようにすることをお勧めします。

于 2012-11-19T07:17:12.417 に答える