Visual Studio解决方案项目引用或Dll引用

7
我正在寻求有关项目引用/DLL引用实践的指导。我们有一些通用的DLL文件,被许多项目使用。但是,有些团队成员按项目引用,有些则按DLL引用。
项目引用的缺点有:
- 解决方案中可能会出现过多的项目。 - 引入了快速失败更新,因为DLL无法再进行版本控制。 - 强制所有人在其代码中具有相似的文件夹结构。 lib文件夹引用的缺点有:
- 更新后延迟发现Bug,因为使用它的项目中的DLL可能会更新得更加晚。 - 没有最新的pdb文件就无法进行调试。
另外,如何确保所有项目仍然与DLL更新兼容?需要构建服务器在每次更新工具时触发依赖项构建检查吗?
我们使用SVN作为源代码控制。
3个回答

4
我们做的类似于Peuczyński的事情。在我们源代码树的根目录下有一个文件夹,其中包含所有库程序集的dll、pdb和xml文档文件(因此它像其他所有内容一样受版本控制)。其他项目将这些文件作为引用(不直接引用库项目或其bin dlls)。这样可以在不干扰常规解决方案开发的情况下对库代码进行工作。只有当库代码稳定后,才将其“发布”到官方库文件夹中(其中包含所有dll、pdb和xml)。
另一个小技巧是允许我们同时拥有调试版和发布版,并且在使用库代码的项目中使Visual Studio选择正确的版本,而不需要任何奇怪的预构建操作。我们在Libs文件夹下创建了三个子文件夹,它们的命名如下:$(Configuration)DebugRelease。在添加库dll引用时,您总是从$(Configuration)文件夹选取文件。该文件夹名称欺骗VS实际上使用来自Debug或Release文件夹的dll,具体取决于您正在进行哪种类型的构建。

所以你有一个像root\lib这样的结构,其中包含每个库dll,而在该文件夹内,有3个文件夹,即root\lib$Configuration、root\lib\Debug和root\lib\Release,其中debug和release中有dll和相关文件? - Joshua Barker
使用共享调试文件夹,有没有办法让不同的团队在自己的调试版本上工作? - Joshua Barker
1
@JoshuaBarker - 是的,在lib下有三个文件夹,其中一个名为“$(Configuration)”,包括括号。当库被构建时,dll、pdb和xml文件分别复制到Debug文件夹(用于调试版本)和Release文件夹(用于发布版本)。其中一个文件夹的内容会复制到$(Configuration)文件夹中,仅是为了在VS中指向某些文件(但实际上VS会使用Debug或Release文件夹中的文件,而不是$(Configuration)文件夹中的文件)。我们几乎总是只使用一个共享的Libs文件夹来存储“黄金”代码。可以为临时特殊需求创建单独的Libs文件夹。 - hatchet - done with SOverflow

3

我们建立了一个内部 Nuget 服务器来处理这个问题。这是一种简单的处理分发和版本管理的方式。


使用内部NuGet,您如何处理调试?此外,当检查dll是否出现问题时,您是否只逐个项目进行? - Joshua Barker
我们主要用它来分发服务契约dll。如果您需要能够调试分布式dll,可以查看类似Symbol Source的东西。(http://www.symbolsource.org/Public)。至于相对于其他项目的调试,破坏性更改是可以接受的,因为使用应用程序在准备好升级到新版本之前不必这样做。如果是真正的错误,希望可以纠正并重新部署软件包。 - Jason

1
我使用的方法是在dll项目的post-build事件中将已编译的dll上传到服务器,并在我使用dll的项目的pre-build事件中下载它们。根据我的经验,这是最好的方法。当我使用项目引用时,偶尔会出现一些错误(就我所记得的,可能与dll代码没有正确更新有关)。
在这种方法中,dll项目的编码人员决定何时要“发布”代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接