2009-06-16 42 views
10

から正しくなく、プロジェクト参照を持つプロジェクトをビルドします。しかし、MSBuildでB.csprojとC.csprojを別々にビルドすると、エラーは発生しません。また、VS IDEでA.slnをビルドするとエラーが発生しません。私は.NET 2.0フレームワークを使用しています。下記のslnとprojをビルドするためのスクリプトを見てください。のMSBuildは、ソリューション

MSBuild "<path>/A.sln" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\A.sln.log /verbosity:normal 

MSBuild "<path>/B.csproj" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\B.csproj.log /verbosity:normal 

MSBuild "<path>/C.csproj" /p:Configuration=Release /p:StartupObject="" /p:WarningLevel=4 /p:Optimize=true /t:rebuild /l:Filelogger,Microsoft.Build.Engine;logfile=F:\C.csproj.log /verbosity:normal 

編集:スロー

すべてのエラーは、(すべてのプロジェクト参照です)referncesを逃すためのコードからです。私は以下のような3種類のエラーだけを得ます。

エラーCS0012:タイプ 'X'は、参照されていないアセンブリ内で と定義されています。 あなたは、アセンブリ 'Y、バージョン= 2.0.0.0、文化=中立、 なPublicKeyToken = aad4cbe5d7c27078' への参照を追加する必要があります。

エラーCS0234:型または名前空間 名「X」は 名前空間「Y」に存在しません

エラーCS0246(あなたが アセンブリ参照が不足している?):型または名前空間 名 ' X」(あなた がusingディレクティブまたは アセンブリ参照が不足している?)が見つかりませんでし

私はIDEとMSBuildの両方から構築する前に、ビルド・パスからのすべての以前に構築されたDLLをクリア。しかし、IDEはうまく動作し、プロジェクトの "Refrences"セクションに参照漏れインジケータが表示されません。

なし基準パスはIDEに手動で追加しません。

別の更新:

私はちょうど私が溶液から両方のプロジェクトを開くと、参照が正しくIDEを指していることに気づきました。しかし、私はIDEで別々にプロジェクトを開くと、MSBuildで発生したと言われていた不足している参照が這い上がります。非常に悪い。

だから

Buiilding .proj MSBuildの中で、要約する - グッド

Buiilding .proj IDEで - エラー

Buiildingの.sln MSBuildのでは - エラー

Buiildingのの.sln IDEで -

美貌私のために非常に気難しい。大いに感謝します。

+9

質問があり、エラーがあると言ったら、エラーを切り取って貼り付けるのが本当に役に立ちます。これは、例外、コンパイラエラー、ビルドエラーのために行く... –

+0

それは2つのプロジェクトを個別に問題なく構築する場合は、2つのプロジェクトは、プロジェクトの参照が必要かどうかと思う。これはMSBUILDがプロジェクト参照を「スマート」にできるようにする最近の機能のために機能している可能性があります。私はその特徴を理解していないので、私はそれを排除することはできません。すべてのプロジェクトの参照が必要かどうか、Bの再ビルドによってCの再構築が行われるかどうかを確認することをお勧めします。 –

+0

@blntechie:更新いただきありがとうございます。ソリューションエクスプローラを使用することをお勧めします。各参照を順番に選択し、[プロパティ]ウィンドウで詳細を確認します。 objにあるものとbinにあるもののような、奇妙なものを見てください。また、参照パスがない場合、実際には存在しないことを確認するために、.csproj.userファイルを調べるのに気にする必要はありませんか? –

答えて

8

MSBuildとVSはどちらも、プロジェクトの参照とプロジェクトの依存関係を使用してソリューションのビルド順序を選択します。それ以外は、定義されていません。両方が正しいことを確認してください。プロジェクトの依存関係は、ソリューションのプロパティで設定します。 これで問題が解決しない場合は、プロジェクト内のGUIDをソリューションのものと一致するプロジェクトの参照で再確認してください。場合によっては、ソリューションを再作成することで解決できます。

1

ジョンスキートが述べたように、エラーメッセージは、問題が何であるかを知ることに役立つだろう。しかし、IDEはビルドされていても、MSBuildでビルドされていない場合は、プロジェクトを参照しているDLLが、ソリューションをビルドしているパスでは利用できないように思えます。おそらく手動でIDEを見つけることができるどこかにコピーしていたのですが、特定のフォルダを参照するためにIDEに参照パスが設定されているかもしれません。

質問に他の詳細が表示されている間にチェックするだけです。

編集:ここでいくつかの詳細がありますが、それはビルドの問題の順序かもしれません。プロジェクトCにプロジェクトBのプロジェクト参照がありますか?その場合は、プロジェクトBよりも前にプロジェクトCをビルドする順序を変更するだけです。

+0

私の場合、Proj CはProj Bを参照しています.Proj BはProj Cより前にビルドしています。 – blntechie

3

IDEでソリューションを構築することは、.slnファイルでMSBUILDを実行するのと同じではありません。 devenv.exe/rebuild A.slnを代わりに使用してみてください。 IDEは、 "同等の" MSBUILDスタイルのプロジェクトの作成を含む、.slnファイルの構築を可能にするいくつかのゲームをプレイします。

また、IDEは直接MSBUILDコマンドを生成しません。パフォーマンスを向上させるために、2つの間に相互作用があります。たとえば、プロジェクト内のCSCタスクは、おそらくMSBUILDが別のコマンドラインビルドとしてではなく、IDE内で実行されている可能性があります。

また、どのファイルがアクセスされているかを見るために、プロセスモニタをhttp://technet.microsoft.com/sysinternals/から取得することを検討する必要があります。

4

私には、この(または同様の)問題が発生したときに、手作業で行をチェック(および修正)することで問題が解決されます。 .slnファイルと.csprojファイルの間でguidをトレースするのは面倒ですが、うまくいきます。

私は通常、プロジェクト参照を削除して再追加し、問題を修正します(問題の不一致のGUIDを見つけたら)。たぶん私はまずそれを試してみるべきです。簡単です。

+1

同じことが私に役立ちました。私が見つけた最良の方法は、GUIDが誤って整列していたことを知るために、Visual Studioを使用して、エラーを表面に浮かせるMSBuildで純粋に構築しようとしていました。それを行う方法については、この記事を参照してください:http://www.codeproject.com/Tips/177770/Creating-MSBuild-projects-from-sln-files.aspx – rohancragg

1

GACからアセンブリを削除します(C:\ WINDOWS \ assemblyフォルダ - asseblyを選択し、右クリックしてアンインストールします)。

解決策はguidを使用して参照を保持し、そのGUIDがGACにある場合、コンパイルのためにGACバージョンを使用し続けます。

関連する問題