是否在C#项目中包含外部DLL

时间:2012-05-02 18:06:04

标签: c# dll project external

我们的项目有很多外部DLL,大多数但并非所有外部DLL都是第三方DLL。

目前我们的项目中没有这些DLL。它们包含在SVN中,并给出了构建输出目录的路径。所以,在构建我们的项目之后,必要的文件就在那里,因为SVN,但项目本身并不了解它们。

我的感觉是我们应该在项目的根目录下有一个名为Dependancies或ThirdParty的文件夹,其中包含所有DLL,并将其构建事件设置为复制到输出目录。它们也存在于SVN中,但与项目结构相同,而不是在构建输出目录中。

项目本身只引用其中一个名为CommunicationProc.DLL的DLL。然后,CommunicationProc.DLL引用所有其他DLL。我们有许多DLL来支持不同类型的无线电。因此,并非所有DLL都将被使用,但根据无线电类型,可以使用其中任何一个。

关于DLL是否应该包含在项目中我们内部有不同的意见,一些团队认为他们应该只在SVN而不是项目本身。

值得注意的是,这不是.NET DLL,大多数都是旧的C DLL。

接受的做法是什么?有人可以通过某种方式向我提出一个引人注目的争论,即是将它们包含在项目中还是只包含在SVN中?

2 个答案:

答案 0 :(得分:4)

最好将它们放在源代码管理的文件夹中,然后将它们复制到构建事件上的调试文件夹中。这样您就可以管理他们的版本。如果某个dll的更新版本出现,那么您可以替换旧的版本并在签入时添加一些注释。此外,如果您在团队中工作,那么您可以让每个团队,而不是将文件从调试文件夹复制到每个团队成员成员使用来自源代码管理的同一组dll。如果您正在开发一些控件并希望您的客户使用该控件,那么您可以更轻松地将一组依赖dll放在哪里,以便您可以将这些控件与.Net dll一起提供给客户。
我对一些未经管理的dll有同样的问题,最后将它们放在一个文件夹中,以便所有团队成员都拥有相同版本的dll。希望这可以帮助。

答案 1 :(得分:1)

我包含一个没有代码但包含一个文件夹的项目,其中所有外部程序集及其依赖项都是kepts。对于每个文件,将“构建操作”设置为“无”并将“复制到输出”设置为“不复制”。然后,该项目引用此位置的二进制文件。在您的其他项目中,参考此特殊项目。在构建时,因为引用了特殊项目并且它引用了所有需要的依赖项,所以会根据需要复制二进制文件。

如果您不想要特殊项目,仍然在主项目中创建文件夹,添加组件,设置其属性,然后根据需要引用组件。

这使您可以完全控制版本和输出,更重要的是,它很简单。