2017-05-31 7 views
1

私は複数のソリューションを使ってプロジェクトを進めています。私は最近、私のソリューションの1つであるNugetパッケージのリファレンスを追加しました。これはいくつかのバージョンの競合を引き起こしたので、すべての私のソリューションでxのバージョンを更新しました。これが追加され、これらの線の意義とは何かますなぜ今、競合していたソリューションで、私は以下の行がcsprojにエラー条件を追加しました

<Import Project="..\packages\X.3.3.2.0\build\X.props" Condition="Exists('..\packages\X.3.3.2.0\build\X.props')" /> 

<Error Condition="!Exists('..\packages\X.3.3.2.0\build\X.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\X.3.3.2.0\build\X.props'))" /> 

を追加されている見ることができます誰でも知っていますか?

答えて

1

NuGetパッケージは、.propsおよび/または.targetsのファイルをbuildフォルダ内に持つことによって、プロジェクトを消費するのにビルドロジックを追加することがあります。

"classic"のcsprojファイル(packages.configメソッド)にインストールすると、NuGetはこれらの文をcsprojファイルに追加してこのロジックを組み込みます。これは実際にはパッケージに依存します。ビルドプロセスで使用する値を設定するものもあれば、ビルド出力にコピーされるコンテンツファイルやカスタムビルドステップ(変換など)を追加するものもあります。

要素はロジックファイルを消費し、ファイルが見つからないことを防ぐための条件を指定します。 NuGetパッケージがまだ復元されていないとき(新しくクローン/チェックアウトし、サーバーを構築する)。 Conditionがファイルが存在するかどうかをチェックしていない場合は、プロジェクトファイルがVSに読み込まれないことがあります。

<Error … />このファイルが存在しない場合は、プロジェクトがロードされた後にVSにエラーが表示されるようにするため、要素にエラーメッセージが表示されます。

0

この問題は、VSがNugetパッケージを非常にうまく管理しないために発生します。プロジェクトの場所を移動または再配置する場合は、プロジェクトファイル内のパスを手動で修正する必要があります。また、プロジェクトAパッケージのパスがプロジェクトBパッケージディレクトリを実際に指していないことを確認してください。プロジェクトファイルで無効なパスが原因で発生するナゲットパッケージには、多くの問題があります。

また、あなたの質問に直接回答すると、単一のエラー状態チェックが表示される理由は、それがナゲットパッケージによって追加されたためです。ほとんどのナゲットパッケージを追加しても、このチェックはプロジェクトファイルに追加されず、他のナゲットパッケージに依存するナゲットパッケージのみが追加されます。 (たとえば、Newtonsoft.Jsonのような共通のパッケージに依存するものは、このバージョンのコードを追加して、適切なバージョンが存在することを保証するかもしれません)

これはパッケージによって制御されると思いますVSが自動的に依存関係のチェーンをトレースするのではなく、フラグなどを設定します。

これらのチェックを削除することは無害で、ピンチで別の方法でビルドを完了することはできますが、そうした場合、適切なアセンブリが存在しないと実行時エラーが発生する危険性があります。

関連する問題