我正在处理一个奇怪的,非理想的项目/解决方案架构,我试图弄清楚是否有办法完成所需的工作。我的情况如下:
我正在处理分为两个解决方案的软件,我称之为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,正如我所期望的那样?
答案 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列对解决方案中的每个项目都有复选标记。