7

NuGet (最新) と VS2012 で奇妙な問題が発生しています。NuGet パッケージ管理が有効になっているマルチプロジェクト ソリューションがあり、Debug|AnyCPU 構成を使用している限り、すべてがコンパイルされ、アプリケーションが正しく実行されます。Release|AnyCPU に切り替えるとすぐに、すべての NuGet アセンブリ参照がなくなったように見え、アプリは明らかにコンパイルされません。奇妙なことに、NuGet マネージャー UI ですべての適切なプロジェクトのすべての参照を確認できます。

同様の問題を経験したことがありますか?それを修正する方法を知っていますか?

再構築は役に立ちませんでした。デバッグ構成が設定されている間に、NuGet 参照が設定されました。

4

3 に答える 3

7

もう一度、私は自分自身の質問に答えています...

ポイントは、ソリューションの構造を変更し、いくつかのプロジェクトを移動したことです。つまり、プロジェクトごとに .csproj ファイルで無効な相対パスが取得されます。私が行った構造の深さを変更しない限り、これは問題ありません。

不明な理由で、デバッグ ビルドは無効なパスで問題なく実行されました (おそらく、bin および obj フォルダーを手動で削除し、ソリューションをクリアしたため、アセンブリが別の方法で収集された可能性があります...) 。しかし、リリース ビルドでは、(誤って参照された) packages/ ディレクトリからアセンブリを取得しようとしました。

NuGet プロセスのどの部分もこの問題を発見/報告しておらず、すべての UI コンソール、さらには NuGet PowerShell コンソール自体でも、すべて問題ないように見えました。

解決策は明らかです。影響を受けるプロジェクトの .csproj ファイルを編集し (実際には、警告をフィルター処理して見つけることで、問題を特定することができました。一部のアセンブリのみが影響を受け、それらはメイン ソリューション ディレクトリの外部からのものでした)、アセンブリ参照のパスを正しい NuGet パッケージに変更します。フォルダ。

余談ですが、これは NuGet (およびおそらく VS) の参照処理の問題です。${SOLUTION_ROOT}、${NUGET_ROOT}、または ${PACKAGES_FOLDER} などの変数を追加する代わりに、相対パスを使用しようとしています。変数の置換によって行われた場合、NuGet パッケージの構成を壊すことなく、複数のソリューションで同じプロジェクトを使用できます。少なくとも、複数のソリューションで同じプロジェクト フォルダーを共有する方法が見つかりませんでした。

于 2013-02-12T22:45:16.313 に答える
2

プロジェクトで使用していた Nuget パッケージをアンインストールしてからインストールすることで、この問題を解決できました。

于 2017-01-18T16:40:57.283 に答える