2016-01-20 2 views
5

私は、奇妙で非理想的なプロジェクト/ソリューションアーキテクチャを扱っています。私は、必要なものを達成する方法があるかどうかを判断しようとしています。リリースビルド中にVisual Studioが/ bin/debug /内の未解決のプロジェクト参照を検索するのはなぜですか?

私はSolutionOne.sln(VS 2010でビルド)とSolutionTwo.sln(VS 2013でビルド)という2つのソリューションに分かれています。 SolutionOneでは、我々は以下のプロジェクトがあります。SolutionTwoで

SolutionOne.sln

  • A.csproj
  • B.csproj
  • C.csproj (includes reference to B.csproj)

を、我々はSolutionTwoにユニークないくつかのプロジェクトを持っているが、我々はまた、SolutionOneから「C」のプロジェクトを含めている - しかし、ないプロジェクトB (この最小限の例の外には、実際には複数の連鎖参照があり、それらをすべて含めた時点で、基本的にSolutionOneの大半を占めることになります)。私はこれが、SolutionTwoを開くと、 "C"プロジェクトは、2番目の解決策には含まれていないため、 "B"プロジェクトへの未解決の参照を示していることを理解しています。

ただし、私がSolutionTwoより前にSolutionOneをビルドしている限り、デバッグ設定ではビルドは成功し、アプリケーションは機能しています。ビルド時には、Visual StudioはSolutionOneビルド内の場所から欠落した "B"プロジェクト参照用のビルドされたDLLを取得するのに十分なほどスマートです。これらの2つのソリューションはルートディレクトリを共有します。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets(316,9): error MSB3104: The referenced assembly "[path to project]\bin\debug[ProjectReferenceName].dll" was not found. If this assembly is produced by another one of your projects, please make sure to build that project before building this one.

なお、エラーメッセージに、それが正しいbinフォルダにプロービングしているように見えるが、それはに探していること:私は彼らのリリース構成で両方のソリューションを構築しようとすると、しかし、私は次のエラーを取得します/ releaseよりもむしろ/ releaseよりもむしろ/ releaseではなく、両方のソリューションがリリース構成で構築されています。

これはプロジェクト/ソリューションの関係を理想的に使用するものではないことを理解していますが、この段階でこれが設計されている方法を再構成することはほとんどありません。期待どおり、/ bin/release /ディレクトリにある未解決のプロジェクト参照DLLを適切に探すためにリリースビルドを入手する方法はありますか?

+0

私は前にこの問題にぶつかりました。申し訳ありませんが詳細を覚えていない。 IIRCのmsbuildには、ソリューションにプロジェクトファイルが含まれていない場合、msbuildがプロジェクト参照を把握するための何かを行い、指定されたビルド構成に関係なく常にデバッグアセンブリを検索するというバグ/制限があります。 –

+0

@ChrisO、ええ、それは私が見ていることを正確に記述することです。私はちょうどあなたがバグだと思っているのかどうか疑問に思っています(この時点で私が思っているように)、あるいは動作を設定する方法があれば疑問です。ありがとう! –

答えて

0

C.csprojファイルを確認します。

明示的

編集\ \ビン\デバッグを参照するハードコーディングされたパスによってB.DLLを参照することができる: @sphanley:その場合は、B.csprojを確認してください。リリースOutputPathが正しくセットアップされていることを確認します。ような何か:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'"> 
    <PlatformTarget>AnyCPU</PlatformTarget> 
    <OutputPath>bin\Release\</OutputPath> 
    <DefineConstants>RELEASE</DefineConstants> 
    <Optimize>true</Optimize> 
    </PropertyGroup> 
+0

参照はプロジェクト参照であり、アセンブリ参照ではなく、.csprojで指定されたパスがありません。だから、これは私にとってあまりにも奇妙に思える。私はそれがデバッグまたはリリースでは見つからないか、または両方でそれを見つけられないと思います。 –

0

あなたのビルドを確認してください - 構成マネージャのアクティブソリューション構成を解除するように設定されており、ビルド列の全ては、溶液中で各プロジェクトのためにそれらのチェックマークを持っています。

+0

これらのことの両方が検証されました。これは、適切な構成で適切なプロジェクトを構築していることは間違いありません。単に/ bin/releaseフォルダにビルドしてから、/ bin/debugにあるDLLを探しているだけです。 –

関連する問題