2011-09-15 13 views
38

は、我々は2つのソリューションを持っている:foo.slnとbar.slnNuGetと複数のソリューション

私はfooとbarの両方で使用される一般的なライブラリを持っています。 Common.csprojは両方で使用されます。

私がfooを開き、nuget参照を更新した場合、Common.csprojポイント内のすべての参照は、/パッケージ/をfooに。後でbarとupdate nugetの参照を開くと、すべての参照がbar/packages /の参照に設定されます。当然、これはfooチームを怒らせます。これは、Common.csprojとFoo固有のもの(Foo /パッケージを指しています)の間の非互換性を引き起こす可能性があるためです。

以外のいくつかの明白な解決策が存在しなければならない:「すべてのプロジェクトが含まれている巨大なソリューションを作成し、あなたがnuget触れる必要があれば、それだけで溶液からそれを行います」

issue on codeplex(偶然に投票された問題)のようですが、明らかにこの問題がどのように解決されているか理解するには厚すぎます。誰かがこれを修正する方法を説明することはできますか?あなたが参照して溶液のそれらのではなく、独自の依存関係を持っている別のアセンブリとしてcommon.csprojていないのはなぜ

+0

私が数ヶ月間問題を起こさずにこれをやっているので突然問題になったのだろうか、昨日のアップデートがあって突然私たちは両方とも24時間以内にそれに遭遇するのだろうか。それとも偶然です。 – GraemeF

+5

http://stackoverflow.com/questions/6277925/nu-get-issue-with-project-level-dependences-for-projects-referenced-by-multipl/7908976#7908976も参照してください。ここでは、ソリューションがファイルを保存する場所を指定するために構成を変更する方法について説明します。すべてのソリューションが同じディレクトリにある場合は、使用するソリューションに関係なく、ヒントパスは正しいはずです。 –

+1

@ReedRectorの場合、コメントだけでなく、リンクを回答として入力する必要があります。 –

答えて

1

あなたが参照されたパッケージを更新FOOやバーのいずれかから共通保護することにすればそれを壊す。

32

この問題はNuGetに先行します。 2つのソリューションで参照されているプロジェクトを1つのソリューションで開いているときにプロジェクト内のアセンブリ参照を変更すると、他のソリューションで開いているプロジェクトの参照パスが変更されます。これは、参照がどのように変更されたかにかかわらず(NuGetまたはそれ以外の場合)常にそうであった。

しかし、本当の問題は、アップデートを行う際に、更新されたパッケージがfoo/packagesディレクトリの右側に表示されないということですか?

簡単な解決策は、独自の参照を、独自のの溶液に、パッケージフォルダをCommon.csprojを動かす構築し、プロセスを解放することです。次に、関連する依存関係が組み込まれた独自のNuGetパッケージを作成します。その後、CommonパッケージをFooとBarの両方にインストールすることができます。そして、FooチームはCommonバージョンの最新バージョンに、そして準備ができたら自由に更新することができます。 Visual Studioに

私はこれに対して聞いたことが主な引数は、デバッグしながら、共通のコードをステップ実行したい場合がありますということではありませんが、これはもはや問題では、2010年

あなたが依頼する必要がある基本的な問題は、誰がCommon.csprojを所有していますか?フーチームかバーチームですか?

+1

これは私がこれを説明するのに見ている最高の答えです。もし私がこれを10回投票することができたら、私は – ferventcoder

+0

+1ちょうどこの正確な状況に遭遇し、おそらくこの解決策に移行するだろう(しばらく延期している)。 – Sumo

+8

また、NuGet 2.1がこの問題を解決できることがわかりました。 http://docs.nuget.org/docs/release-notes/nuget-2.1#Specify_%e2%80%98packages%e2%80%99_Folder_Location – Sumo

1

私たちのケースでは、tfsを持つ多くの開発者とソリューション、および異なるブランチにある複数のバージョン... と各開発者は、ソースがどこにあるべきかを理解しています。動作していないこの場合

相対パスは、一致ディスクの場合には絶対パスを相対により置換されても動作しませんでした。

解決策は、相対パスを取り除くことです。 NuGetPackagesを別のディスクに置くことができます。 そうのように:

net use /persistent:yes p: \\localhost\C$\NuGetPackagesDiskFolder 

あなたはその後
を習慣任意のフォルダ名、あなたはすべてのSUOファイルを削除

PS後NuGet.Config

<config> 
<add key="repositorypath" value="p:\NuGetPackages" /> 
</config> 
<packageRestore> 
<add key="enabled" value="True" /> 
</packageRestore> 

に本当に絶対パスを指定することができます。彼らがsourcecontrol に住んでいる場合、exsistingソリューションの変更で少し問題が最も簡単な方法は各.csprojのp:\ NuGetPackagesへのパスを修正することです そうでなければ、私が$(SolutionDir)変数が含まれているために、プロジェクトFILにヒントパスを変更することで問題を解決し、すべての引用文献を再インストールする必要があり、手動でsourcecontrol

3

に削除済みとして全てpackages.configがマーク取り消し:

Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> 
     <HintPath>$(SolutionDir)packages\EntityFramework.6.1.3\lib\net40\EntityFramework.dll</HintPath> 
関連する問題