2011-06-22 18 views
1

C#で書かれたアプリケーションがいくつかのプロジェクトに分割されています。これらのプロジェクトは他のプロジェクトを参照しています。誰かがバージョン管理からソースを取得し、解決策は、独自のマシン上でこれらのプロジェクトが含まれて開くとVisual Studio 2008:プロジェクトへの参照を見つけることができません

、Visual Studioは、参照プロジェクトが正常にビルドされていても、プロジェクト間の参照を見つけることができません。その人はこれを解決するために参照を再追加する必要があります。

Visual Studioはいくつかのデータを `suo 'ファイルに保存しているので、次回は再参照の参照先を知っているので、次回にこの問題が解決されることはありません。

SUO」ファイルは参照への絶対パスを保持 `以来、私たちは、ソースコントロールでそれをコミットすることはできません。

問題は、この大きなアプリケーションを自動的に(私たちの夜間ビルドリリースとして)ビルドすることです。ビルド自動化ツールがソリューションを開き、Visual Studioのコンパイラを呼び出してビルドすると、参照が見つかりません。 (自動化ツールはすべてをきれいにし、再び元の最新バージョンを取得、それは `SUO」ファイルを持っていない用量。)

任意のソリューションを?

追加情報

のVisual Studioバージョン:2008 - 9.0.21022.8

の.NET Framework:3.5 SP1

OS:Windows XP Professionalの(SP2 & SP3 - 我々は彼らの両方を持っています)

更新

Visual Studioが<ProjectReference>タグを `.csproj 'ファイルの<Reference>に変更することがあるようです。開発者がファイルをコミットすると、この問題が発生します。

それは、Visual Studioのバグだ場合、私は見つけることができませんでした。唯一の解決策は、オートメーションツールに渡す前に、 `.csproj 'ファイルでこれを修正するツールを書くことです。

+1

.slnファイルがありませんか? – V4Vendetta

+0

はい。 'solution 'は' sln'ファイルを意味します。 – Aidin

+0

.csprojファイルのProjectReferencesに問題があります。 VSによってどのような変更が行われますか? – DiVan

答えて

0

これはVisualStudio 2008以前のバグです。

他のプロジェクトへの参照を持つプロジェクトが含まれていても参照されているプロジェクトがソリューションに含まれていないソリューションを開くと、VSは参照されているプロジェクトを見つけますが、参照を出力を参照する方法で変更しますDLLではなく、プロジェクト自体です。

このバグはVS2010、MSBuild 4で修正されました。

1

オープンプロジェクトファイル(* .csproj)と、彼らが参照しているものに見えます。ほとんどの場合、パスはソリューションパスに関連しており、ビルドスクリプトは他のパスを使用することがあります。これを解決する

一つの方法:

  1. 彼らはこのパスへの参照を相対持っているので、あなたのソースのルートフォルダ
  2. 編集へのパスを保持している環境変数SOURCE_PATHプロジェクトファイルを定義します($(SOURCE_PATH)を使用)でそれを参照するcsprojファイル
  3. 各dev/buildマシンで手順1〜2を繰り返し、必要に応じて追加のenv変数を追加します。

PS:* .suoはバージョン管理システムであってはなりません。

0

自動ビジュアルスタジオコンパイラではなく、msbuildを使用しないのはなぜですか?

+0

違いはありません。 MSBuildは同じ方法でコンパイルを行います。 – Aidin

2

参照は、プロジェクトごとに.csprojファイルで定義されています。それらは、私の経験では2つの方法のいずれかで定義されます。

<Reference Include="CommonServiceLocator.NinjectAdapter, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL"> 
    <HintPath>..\..\Dependencies\CommonServiceLocator.NinjectAdapter.dll</HintPath> 
</Reference> 

または1なし:参照アセンブリ見つけるためのヒントパスと

どちらか、あなたは参照が最初の形態であることを確認する必要があり

<Reference Include="CommonServiceLocator.NinjectAdapter, Version=2.2.0.0, Culture=neutral, processorArchitecture=MSIL"/> 

をそのヒントパスが存在し、それが相対パスであるため、ソリューションをどこにチェックアウトしても機能するようになります。

.csprojファイルを外部エディタで編集するか、プロジェクトを右クリックしてコンテキストメニューから[プロジェクトをアンロード]を選択し、再度アンロードしたプロジェクトを右クリックして[Edit projectname.csproj]を選択します。編集が終わったら、もう一度右クリックしてプロジェクトをリロードしてください。

+0

私の問題はサードパーティのDLLを参照することではない、私は別のプロジェクトへの参照を意味します。 __ProjectReference__タグ。 – Aidin

関連する問題