3

为了减少项目中的依赖关系,我现在拥有所有依赖和实现接口的东西,它们通过 IoC 容器粘合在一起。这意味着项目只需要直接引用此类接口库。

但是,如果您没有将项目指定为对实现的引用(即使您在编译时不需要它),则实现库不包含在可执行文件或安装项目中。

Visual Studio 在某种程度上是否通过在不需要时要求显式引用来促进不良做法?是否可以仅依赖于所需的接口,在这种情况下,获得实现库的最佳方法是什么?

4

3 回答 3

2

Visual Studio 在某种程度上是否通过在不需要时要求显式引用来促进不良做法?

并不真地。您的问题是部署之一,而不是构建。

部署应用程序和构建它是分开的事情——如果你有一个好的部署策略,你就会在它们所属的地方部署实现。

是否可以仅依赖于所需的接口,在这种情况下,获得实现库的最佳方法是什么?

简单的方法确实是引用实现程序集。这肯定会让在本地构建和运行变得像 一样容易F5,但是你真的想要吗?老实说,如果您和您的团队有只对接口进行编码的纪律,那就是您所需要的(并且有诸如 nDepend 之类的静态分析工具可以帮助确保保持这种情况)。

一种前进的方法是创建一个部署脚本,该脚本将部署所有依赖项,无论是本地还是其他地方。

于 2012-06-27T19:07:25.070 回答
1

不。这只是他们需要做的最低限度的工作,以便让开发人员无需做任何额外的事情(除了点击F5)或默认添加所有引用(这可能会是一团糟并且在旧版本上很慢)硬盘。

对于本地开发构建,您只需在相关项目上执行构建后步骤,即可将 DLL 复制到主工作目录。只需确保将项目添加到要构建的活动配置中,否则您将在构建后经历整个烦人的调试会话,然后才意识到没有构建......哈哈

VS 2010。后期构建。将文件复制到多个目录/多个输出路径

在 VS2010 中的 Post Build 事件中将 bin 文件复制到物理文件位置

对于全面的应用程序部署,您可能会至少查看 Visual Studio 设置项目但更理想的是WiX或其他部署工具集。

于 2012-06-27T19:10:28.093 回答
1

Visual Studio 不需要这些引用,但您的 IoC 容器需要。添加对项目的引用时,其二进制文件会自动包含在输出文件夹中,这是 IoC 容器将代码粘合在一起所必需的。除了在 Visual Studio 中引用它们的项目之外,还有其他方法可以将这些二进制文件放入输出文件夹 - 也许是构建后步骤

于 2012-06-27T19:11:51.377 回答