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

时间:2016-01-20 19:42:35

标签: 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项目,但我们还包括" C"来自SolutionOne的项目 - 但是不是项目B(因为在这个最小的例子之外,实际上有几个链式引用,当我们将它们全部包括在内时,它基本上是大多数SolutionOne)。我明白这意味着当我们打开SolutionTwo时," C"项目显示未解决的" B"项目,因为它没有包含在我们的第二个解决方案中。

但是:只要我在SolutionTwo之前构建SolutionOne,在Debug配置中,构建成功并且我们的应用程序正常运行。看起来在构建时,Visual Studio足够聪明,可以为缺失的" B"解决方案来自SolutionOne构建中的位置,因为这两个解决方案共享一个根目录。但是,当我尝试在其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,正如我所期望的那样?

2 个答案:

答案 0 :(得分:0)

检查您的C.csproj文件。

您可能通过显式引用\ bin \ debug \

的硬编码路径引用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>

答案 1 :(得分:0)

确保Build-Configuration Manager的Active解决方案配置设置为Release,Build列对解决方案中的每个项目都有复选标记。