我想知道何时设置copy-local=true
参考是否有任何启发式方法?
如果引用类型仅在内部使用,我可以设置copy-local
为,true
但如果引用类型作为参数或返回值公开,我设置copy-local
为false
并指示在使用我的库时应该引用特定版本的依赖项?
任何人都可以为我澄清这一点吗?
我想知道何时设置copy-local=true
参考是否有任何启发式方法?
如果引用类型仅在内部使用,我可以设置copy-local
为,true
但如果引用类型作为参数或返回值公开,我设置copy-local
为false
并指示在使用我的库时应该引用特定版本的依赖项?
任何人都可以为我澄清这一点吗?
本地复制对于部署方案和工具很重要。作为一般规则,如果引用不包含在 GAC 中,则应使用 CopyLocal=True。
Copy Local 本质上意味着我必须手动部署此 DLL 才能使我的应用程序正常工作。当它为假时,它本质上意味着“我依赖另一个必须单独安装或链接的组件,DLL 将已经存在”。
真正实现了复制本地以支持本地调试。当你为你的应用程序打包和部署时,你应该将你的项目构建到相同的输出文件夹中,并确保你在那里有你需要的所有引用。
在构建大型源代码树时,CopyLocal 尤其令人头疼。有一个关于如何在此处禁用 CopyLocal 的相关问题,您可以在How do I override CopyLocal (Private) setting for references in .NET from MSBUILD中看到它。以及Visual Studio (2008) 中大型解决方案的最佳实践。
我在文章MSBuild: Best Practices For Creating Reliable Builds, Part 2中写过如何处理构建大型源代码树。
所以简而言之,当文件复制导致您的构建花费更多时间时,我会说禁用 CopyLocal,然后您愿意为每个构建花费更多时间。
这实际上与目标环境有关。如果 copy local 为 false,则表示程序集已经存在于目标环境中(通常在 GAC 中)。将其设置为 true 可确保它出现在构建的输出中,从而更容易部署到目标环境。
查看以下 MSDN 参考,其中详细解释了 CopyLocal 行为。
不幸的是,对于二级程序集中的程序集引用,存在一些怪癖,CopyLocal 不会像预期的那样工作,如下所示。
如果您不打算将第三方程序集安装到目标机器上的 GAC 中,这会使 xcopy 部署变得困难。
此选项仅影响构建阶段。它只是将引用复制到已构建程序集的本地目录。
如果另一个程序集 (T) 想要使用您正在构建的程序集 (A) 中具有来自另一个引用程序集 (R) 的返回类型或参数的方法,它 (T) 应该能够访问该程序集 (R)。如果引用的程序集 (R) 安装在 GAC 中,它可能无需执行任何特殊操作即可执行此操作。否则,它需要一个本地副本。
设置 CopyLocal=false 将缩短构建时间,但在部署期间可能会导致不同的问题。
我设置 CopyLocal=false 的经验并不成功。请参阅我的博客文章“不要将“复制本地”项目引用更改为 false中的优缺点摘要,除非了解子序列。
将 CopyLocal 设置为 false 的保守方法是检查是否在项目的输出路径中找到了引用。这应该可以让您避开一些令人讨厌的运行时问题,同时仍然减少 IO 量。
在此过程中,我创建了CopyLocalFixer,您可以为文件夹运行它。我尝试了一个大型构建,但说实话,结果并没有那么令人印象深刻。我想这归结为项目的文件夹结构。