我想知道什么时候可以设置copy-local=true
参考资料?
如果只能在内部使用引用的类型copy-local
,true
但是如果引用的类型作为参数或返回值公开copy-local
,false
并且指示使用我的库时应该引用特定版本的依赖项,则可以设置为?
谁能为我澄清一下?
Answers:
本地复制对于部署方案和工具很重要。通常,如果引用未包含在GAC中,则应使用CopyLocal = True。
从本地复制实际上意味着我必须手动部署此DLL才能使我的应用程序正常工作。如果为假,则本质上意味着“我依赖于必须单独安装或链接的另一个组件,DLL将会已经存在”。
复制本地实际上是为了支持本地调试而实现的。在为打包和部署准备应用程序时,应将项目构建到相同的输出文件夹,并确保在那里拥有所需的所有引用。
当构建大型源代码树时,CopyLocal特别麻烦。有一个有关如何在此处禁用CopyLocal的相关问题,因此您可以在如何覆盖MSBUILD的.NET中引用的CopyLocal(私有)设置中看到它。以及Visual Studio(2008)中大型解决方案的最佳做法。
我已经在文章MSBuild:创建可靠构建的最佳实践,第2部分中写了关于如何处理大型源代码树的文章。
简而言之,当文件复制使您的构建花费更多的时间时,我会说禁用CopyLocal,然后您愿意为每个构建花费。
这实际上与目标环境有关。如果本地副本错误,则表示该程序集将已存在于目标环境中(通常在GAC中)。将其设置为true可以确保它会出现在您的构建输出中,从而使部署到目标环境更加容易。
此选项仅影响构建阶段。它只是将引用复制到已生成程序集的本地目录。
如果另一个程序集(T)要使用您正在构建的程序集(A)中的方法,该方法具有另一个引用的程序集(R)的返回类型或参数,则该程序集(T)应该能够访问该程序集(R)。如果在GAC中安装了引用的程序集(R),则可能无需做任何特殊的操作即可。否则,它需要该文件的本地副本。
将CopyLocal设置为false的保守方法是检查是否在项目的输出路径中找到了引用。这应该使您能够避开一些令人讨厌的运行时问题,同时仍然减少IO的数量。
在此过程中,我创建了CopyLocalFixer,可以为一个文件夹运行它。我尝试了一个大型构建,但是说实话结果并不令人印象深刻。我想这取决于项目的文件夹结构。
设置CopyLocal = false将缩短构建时间,但在部署期间可能导致其他问题。
我设置CopyLocal = false的经验并不成功。请参阅我的博客文章“请勿将“复制本地”项目引用更改为false,除非了解子序列,” ,以了解优缺点摘要。