什么时候应该将copy-local设置为true,何时不应该这样做?

我想知道是否有任何启发式设置copy-local=true的引用?

如果引用types只在内部使用,我可以将copy-local设置为true但是如果引用types作为参数或返回值公开,则将copy-local设置为false并指示当我的库应该引用时,应引用特定版本的依赖项用过的?

任何人都可以为我澄清这一点?

复制本地对于部署场景和工具很重要。 一般来说,如果引用不包含在GAC中,则应该使用CopyLocal = True。

本地复制意味着我必须手动部署此DLL才能使我的应用程序正常工作。 当它是错误的时候,它的意思就是“我依赖于另外一个必须单独安装或链接的组件,这个DLL就已经存在了”。

复制本地实现真正支持本地debugging。 当你准备打包和部署你的应用程序时,你应该把你的项目build立到相同的输出文件夹,并确保你有所有你需要的引用。

在构build大型源代码树时,CopyLocal特别痛苦。 有一个相关的问题,关于如何禁用CopyLocal在这里你可以看到它在如何重写MSLUILD在.NET中引用的CopyLocal(私人)设置 。 以及Visual Studio(2008)中大型解决scheme的最佳实践。

我已经写了关于如何处理构build大型源代码树的文章MSBuild:创build可靠构build的最佳实践,第2部分 。

所以总之,我会说当文件复制导致你的构build需要更多的时间,那么你愿意花费每一个构build禁用CopyLocal。

这是关于目标环境。 如果复制本地为false,则表示该程序集已经存在于目标环境中(通常在GAC中)。 将其设置为true可确保它将显示在构build的输出中,因此可以更轻松地将其部署到目标环境。

查看以下详细解释CopyLocal行为的MSDN参考资料。

项目参考

不幸的是有一些怪癖和CopyLocal将不需要按照预期的次要程序集中的程序集引用结构如下所示。

  • MainApp.exe
    • MyLibrary.dll
      • ThirdPartyLibrary.dll(如果在GAC CopyLocal中不会复制到MainApp的bin文件夹)

如果您不打算将第三方程序集安装到目标计算机上的GAC上,这会使xcopy部署变得困难。

此选项仅影响构build阶段。 它只是将引用复制到构build的程序集的本地目录中。

如果另一个程序集(T)想要使用正在构build的程序集(A)中的方法,该程序集具有来自另一个引用程序集(R)的返回types或参数,则它(T)应该能够访问该程序集(R)。 如果引用程序集(R)安装在GAC中,则可能无需做任何特殊的操作。 否则,它需要一个本地副本。

设置CopyLocal = false将会缩短构build时间,但在部署期间会导致不同的问题。

我设置CopyLocal = false的经验并不成功。 请参阅我的博客文章“ 不要更改”“复制本地”项目引用为false,除非明白子序列 。