为什么Visual Studio在发布版本中在/ bin/debug /中查找未解析的项目引用?

Sam*_*ley 5 c# visual-studio visual-studio-2013

我正在处理一个奇怪的,非理想的项目/解决方案架构,我正在试图弄清楚是否有办法完成所需的工作.我的情况如下:

我正在研究分为两个解决方案的软件,我将其称为SolutionOne.sln(在VS 2010下构建)和SolutionTwo.sln(在VS 2013下构建).在SolutionOne中,我们有以下项目:

SolutionOne.sln

  • A.csproj
  • B.csproj
  • C.csproj(包括对B.csproj的引用)

在SolutionTwo中,我们有几个独特的SolutionTwo项目,但我们还包括来自SolutionOne的"C"项目 - 但不包括项目B(因为在这个最小的例子之外,实际上有几个链接的引用,并且到时候我们将它们全部包括在内,它基本上是SolutionOne的大部分内容.我知道这意味着当我们打开SolutionTwo时,"C"项目显示了对"B"项目的未解析引用,因为它不包含在我们的第二个解决方案中.

但是:只要我在SolutionTwo之前构建SolutionOne,在Debug配置中,构建成功并且我们的应用程序正常运行.看起来在构建时,Visual Studio足够聪明,可以从SolutionOne构建中的位置获取缺少的"B"项目引用的构建DLL,因为这两个解决方案共享一个根目录.但是,当我尝试在其Release配置中构建两个解决方案时,我收到以下错误:

C:\ Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets(316,9):错误MSB3104:引用的程序集"[项目的路径]\bin\debug [ProjectReferenceName] .dll"不是找到.如果此程序集由另一个项目生成,请确保在构建此项目之前构建该项目.

请注意,在该错误消息中,它似乎在正确的bin文件夹中进行探测,但它正在查看/ debug子目录而不是/ release,即使两个解决方案都在构建其发布配置.

我理解这不是理想的项目/解决方案关系,但我不太可能重新组织这个阶段的设计方式.有没有什么方法可以让我的发布版本正确地在/ bin/release /目录中查找未解析的Project Reference DLL,正如我所期望的那样?

Zac*_*ese 0

检查您的 C.csproj 文件。

您可能通过硬编码路径引用 B.dll,该路径显式引用 \bin\debug\

编辑: @sphanley:在这种情况下,请检查 B.csproj。验证版本 OutputPath 设置是否正确。就像是:

  <PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
    <PlatformTarget>AnyCPU</PlatformTarget>
    <OutputPath>bin\Release\</OutputPath>
    <DefineConstants>RELEASE</DefineConstants>
    <Optimize>true</Optimize>
  </PropertyGroup>
Run Code Online (Sandbox Code Playgroud)