【问题标题】:Running a project won't build other (non-referenced) projects运行项目不会构建其他(非引用)项目
【发布时间】:2016-08-27 03:59:40
【问题描述】:

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

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

当我 clean 解决方案然后点击 startdebug 时,Visual Studio 只会按原样构建该控制台项目 (.exe)启动项目。但它不构建库项目 (.dll),因为控制台应用程序不引用库。

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

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

=> 从控制台应用程序对 DLL 进行引用,但失败,因为这会给出循环引用。

=> 在控制台应用程序项目上添加构建依赖项,同时构建库项目。但这是不可能的,因为 Visual Studio 声称这也会提供循环引用。

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

=> 通过创建另一个库项目 (connect.dll) 来拆分控制台应用程序,其中包含其他库需要引用的内容。然后所有项目都引用common.dll,控制台应用程序最终可以引用控制台库。这也有效但是给你留下了一个额外的项目:

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

在构建控制台应用程序项目时,是否有一种更好的方法可以让 VS2015 也构建非引用项目,而无需添加整个新项目?

【问题讨论】:

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


    【解决方案1】:

    为什么类库需要对可执行文件的引用?通常,可执行文件会引用类库(根据您在运行时加载类库的事实判断,这听起来像是需要),而不是相反。

    您需要防止类库依赖于可执行文件。如果他们必须依赖它,这意味着您可能在可执行文件中包含属于库的内容。要么将这些东西移到库中,要么将 everything 移到同一个项目中。

    编辑:根据您的评论

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

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

    从概念上讲,这不是一个额外项目——类库实际上只依赖于现有可执行文件的部分(仅接口部分)这一事实立即表明可执行文件有两个部分开始。这就是您的循环依赖的来源。

    【讨论】:

    • 你写的不是答案。但是要回答您的问题:该应用程序包含在库中实现的类的接口,并跟踪所有加载的库。因为库引用了应用程序,所以库现在调用彼此的代码。通过这种方式,我可以很容易地通过添加/删除 dll 文件来取出或插入库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多