存储和引用DLL库的最佳实践?

存储和引用DLL库的最佳实践?,dll,version-control,Dll,Version Control,我的团队中的开发人员通常会创建一个新的Visual Studio项目,并在其本地计算机上的某个位置引用DLL(例如,C:\mydlls\homersimpson\test.DLL)。然后,当我从源代码管理存储库获取项目时,我无法生成该项目,因为我的计算机上没有完全相同的位置引用的dll 存储和引用共享库的最佳实践是什么?我希望您的SC存储库为您包括并强制执行引用对象的相对位置(通常通过共享路径),因此您不会直接处理此问题。原始开发人员应签入此信息。如果程序集不在GAC中,请创建一个名为depen

我的团队中的开发人员通常会创建一个新的Visual Studio项目,并在其本地计算机上的某个位置引用DLL(例如,C:\mydlls\homersimpson\test.DLL)。然后,当我从源代码管理存储库获取项目时,我无法生成该项目,因为我的计算机上没有完全相同的位置引用的dll


存储和引用共享库的最佳实践是什么?

我希望您的SC存储库为您包括并强制执行引用对象的相对位置(通常通过共享路径),因此您不会直接处理此问题。原始开发人员应签入此信息。

如果程序集不在GAC中,请创建一个名为dependencies的目录,并在其中添加所有程序集。文件夹和程序集将添加到源代码管理中。规则是,给定源代码管理中的任何项目,构建所需的只是执行签出并构建该项目(或者运行一些也签入该项目的工具)

如果将文件夹添加到解决方案中,并将程序集添加到解决方案文件夹中,这也会为开发人员提供一个视觉提示,指示存在哪些外部依赖项。。。所有依赖项都在该目录中。相对路径确保VisualStudio可以毫无问题地定位引用


对于大型解决方案,有20多个项目,这使生活更加轻松

我通常在我的项目中创建一个lib文件夹,在其中放置引用的dll。然后我将引用指向lib文件夹中的dll。这样,每个开发人员都可以在从源代码管理检索后构建项目


如果是内部构建的项目,您也可以将该项目添加到您的解决方案中。

如果您将实际DLL签入到源代码管理中,那么您可以通过相对路径引用它们,所有开发人员在下次更新项目时都会自动获得任何依赖项


按完整路径添加DLL引用将是开发人员的错误,正如按完整路径添加源文件将是错误一样。

经验法则:如果项目不是解决方案的一部分,则引用从解决方案源代码管理树下的源代码管理/bin共享或/lib目录中发布的DLL。所有外部依赖项都应具有位于此/bin共享目录中的版本化DLL

我理解你的同事在便利方面所做的事情。然而,开发人员的方法与正确的配置/构建管理截然相反


示例:如果在应用程序中使用MS数据应用程序块作为依赖项,则应引用正确发布的二进制文件,而不是从MS的dev源主干获取最新版本
配置VS:

如何不?你没有在SCC中包含所有可链接的模块吗?对-“直接转到dll地狱。不要传递…你是否将二进制文件签入源代码版本控制?不,不是我自己的二进制文件。我假设最初的问题是关于某个第三方DLL,它不是与项目一起构建的。我们对第三方库也做同样的事情。这也是我的第一个想法。我看到的唯一缺点是,如果您有一个常用的DLL,它将位于引用它的每个项目的多个位置的源代码管理中。@vg1890:DLL的多个副本可能是一个好处,它将允许每个项目在版本控制的同时可能使用不同版本的dllI建议GAC。这样,通过使用预构建的事件,您可以将该DLL从共享存储库安装到GAC中。我认为现在最好在外部保留工件,并在编译时使用诸如Artifactory、NuGet、Maven等工具将其包括在内。您的第一句话是用英语写的吗?:)也许一些逗号或连词可以帮助我理解它?