存储和引用DLL库的最佳实践?
我的团队中的开发人员通常会创建一个新的Visual Studio项目,并在其本地计算机上的某个位置引用DLL(例如,C:\mydlls\homersimpson\test.DLL)。然后,当我从源代码管理存储库获取项目时,我无法生成该项目,因为我的计算机上没有完全相同的位置引用的dll存储和引用DLL库的最佳实践?,dll,version-control,Dll,Version Control,我的团队中的开发人员通常会创建一个新的Visual Studio项目,并在其本地计算机上的某个位置引用DLL(例如,C:\mydlls\homersimpson\test.DLL)。然后,当我从源代码管理存储库获取项目时,我无法生成该项目,因为我的计算机上没有完全相同的位置引用的dll 存储和引用共享库的最佳实践是什么?我希望您的SC存储库为您包括并强制执行引用对象的相对位置(通常通过共享路径),因此您不会直接处理此问题。原始开发人员应签入此信息。如果程序集不在GAC中,请创建一个名为depen
存储和引用共享库的最佳实践是什么?我希望您的SC存储库为您包括并强制执行引用对象的相对位置(通常通过共享路径),因此您不会直接处理此问题。原始开发人员应签入此信息。如果程序集不在GAC中,请创建一个名为dependencies的目录,并在其中添加所有程序集。文件夹和程序集将添加到源代码管理中。规则是,给定源代码管理中的任何项目,构建所需的只是执行签出并构建该项目(或者运行一些也签入该项目的工具) 如果将文件夹添加到解决方案中,并将程序集添加到解决方案文件夹中,这也会为开发人员提供一个视觉提示,指示存在哪些外部依赖项。。。所有依赖项都在该目录中。相对路径确保VisualStudio可以毫无问题地定位引用
对于大型解决方案,有20多个项目,这使生活更加轻松 我通常在我的项目中创建一个lib文件夹,在其中放置引用的dll。然后我将引用指向lib文件夹中的dll。这样,每个开发人员都可以在从源代码管理检索后构建项目
如果是内部构建的项目,您也可以将该项目添加到您的解决方案中。如果您将实际DLL签入到源代码管理中,那么您可以通过相对路径引用它们,所有开发人员在下次更新项目时都会自动获得任何依赖项
按完整路径添加DLL引用将是开发人员的错误,正如按完整路径添加源文件将是错误一样。经验法则:如果项目不是解决方案的一部分,则引用从解决方案源代码管理树下的源代码管理/bin共享或/lib目录中发布的DLL。所有外部依赖项都应具有位于此/bin共享目录中的版本化DLL 我理解你的同事在便利方面所做的事情。然而,开发人员的方法与正确的配置/构建管理截然相反
示例:如果在应用程序中使用MS数据应用程序块作为依赖项,则应引用正确发布的二进制文件,而不是从MS的dev源主干获取最新版本我认为这种方法与我认为最好的做法完全相反。我认为最好的方法是将第三方二进制文件从源存储库中删除,并在构建过程中通过类似Maven存储库的方式引用它们。将DLL放在源存储库中会不必要地膨胀存储库的内容,并导致项目的GET比必要时花费更长的时间。它还使第三方二进制文件版本的独立管理变得模糊,因为它没有按名称引用版本,而是通过引用存储在项目库文件夹中的特定版本的dll来暗示。为什么不设置私有NuGet提要?这样,依赖项(NuGet存储库)只有一个副本,多个项目可以引用它。依赖项的多个版本可以共存,如果需要,每个项目可以引用不同的版本。此外,TFS Build可以在生成时恢复包
配置VS:如何不?你没有在SCC中包含所有可链接的模块吗?对-“直接转到dll地狱。不要传递…你是否将二进制文件签入源代码版本控制?不,不是我自己的二进制文件。我假设最初的问题是关于某个第三方DLL,它不是与项目一起构建的。我们对第三方库也做同样的事情。这也是我的第一个想法。我看到的唯一缺点是,如果您有一个常用的DLL,它将位于引用它的每个项目的多个位置的源代码管理中。@vg1890:DLL的多个副本可能是一个好处,它将允许每个项目在版本控制的同时可能使用不同版本的dllI建议GAC。这样,通过使用预构建的事件,您可以将该DLL从共享存储库安装到GAC中。我认为现在最好在外部保留工件,并在编译时使用诸如Artifactory、NuGet、Maven等工具将其包括在内。您的第一句话是用英语写的吗?:)也许一些逗号或连词可以帮助我理解它?