运行项目不会构建其他(未引用的)项目

时间:2016-08-26 18:21:16

标签: c# build visual-studio-2015 reference

我的解决方案有一个控制台应用程序(.exe)项目,该项目使用多个类库项目(.dll)。类库项目具有对控制台应用程序的引用。控制台应用程序在运行时加载类库项目。 (.exe扫描同一目录中的dll并加载它们。)

 _________________
|                 | <-- library1.dll
| application.exe | <-- library2.dll
|_________________| <-- library3.dll

当我清理解决方案,然后点击 start debug 时,Visual Studio只构建该控制台项目(.exe),因为它是启动项目。但它不构建库项目(.dll),因为控制台应用程序不引用库。

如果我直接在库项目上或在整个解决方案上点击 build ,我会得到.dll文件。但这是我可能会忘记的一个动作,因此我最终可能会使用没有.dll文件的应用程序或者使用旧版本的.dll文件。

我想让VS2015在运行或构建控制台应用程序时构建所有项目。我已经尝试过了:

=&gt; 从控制台应用程序到DLL的引用,但是失败了,因为这会给出循环引用。

=&gt; 在控制台应用程序项目中添加构建依赖项,以构建库项目。但这是不可能的,因为Visual Studio声称这也会给出循环引用。

=&gt; 使解决方案中的所有项目成为启动项目。这实际上工作,因为VS2015构建所有项目并创建.exe作为.dll文件。 但是然后每次运行应用程序时都会出现恼人的弹出窗口,告诉我控制台应用程序不能是启动应用程序。

=&gt; 通过创建另一个库项目(connect.dll)来拆分控制台应用程序,该项目包含其他库需要引用的内容。然后所有项目引用common.dll,控制台应用程序最终可以引用控制台库。这也工作为您留下了额外的项目:

 _____________                        _________________   
|             | <------------------- |                 |  
|             | <-- library1.dll <-- |                 |  
| connect.dll | <-- library2.dll <-- | application.exe |
|             | <-- library3.dll <-- |                 |
|_____________|                      |_________________|  

在构建控制台应用程序项目时,是否有更好方式使VS2015构建非引用项目,而不添加整个新项目?

1 个答案:

答案 0 :(得分:0)

为什么类库需要对可执行文件的引用?通常,可执行文件引用类库(它听起来像它需要,从运行时加载类库的事实来判断),而不是反过来。

您需要保持类库不依赖于可执行文件。如果必须依赖它,则意味着您可能在库中的可执行文件中有内容。将这些内容移动到库中或将所有内容移动到同一个项目中。

编辑:根据您的评论

  

但要回答你的问题:应用程序包含库中实现的类的接口,并跟踪所有已加载的库。

您问题中描述的最后一个场景似乎是对我的正确设置。将接口移动到它们自己的项目,每个类库(以及可执行文件)引用接口项目。

从概念上讲,这不是一个额外的项目 - 类库实际上只依赖于现有可执行文件的 part (只有接口部分)这一事实可执行文件有两个部分开头。这就是你的循环依赖来源。