什么时候copy-local应该设置为true,什么时候不应该?

Fad*_*oof 69 .net msbuild reference copy-local

我想知道什么时候设置copy-local=true引用有任何启发式方法?

如果引用类型只在内部使用我可以设置copy-localtrue,但如果被引用类型暴露作为参数和返回值我设置copy-localfalse和指示时,应使用我的媒体库的依赖特定版本应参照?

谁能为我澄清一下这个?

Jar*_*Par 61

复制本地对于部署方案和工具很重要.作为一般规则,如果引用未包含在GAC中,则应使用CopyLocal = True.

复制本地意味着我必须手动部署此DLL才能使我的应用程序正常工作.如果它是假的,它实质上意味着"我依赖于另一个必须单独安装或链接的组件,DLL就会在那里".


Say*_*imi 21

复制本地实际上是为了支持本地调试.当您为应用程序打包和部署时,您应该将项目构建到相同的输出文件夹,并确保您拥有所需的所有引用.

在构建大型源代码树时,CopyLocal尤其令人痛苦.有一个关于如何在此处禁用CopyLocal的相关问题,您可以在MSBUILD如何覆盖.NET中的引用的CopyLocal(专用)设置.以及Visual Studio(2008)中大型解决方案的最佳实践.

我在文章MSBuild:创建可靠构建的最佳实践,第2部分中写过如何处理构建大型源代码树的文章.

所以简而言之,我会说当文件复制导致你的构建花费更多时间然后你愿意为每个构建花费时禁用CopyLocal.

  • 如果更改输出以将项目构建到相同的输出文件夹并确保您拥有所需的所有引用,那么更好地说"仅禁用CopyLocal". (3认同)

Ken*_*art 13

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


jpi*_*son 6

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

项目参考

不幸的是,有一些怪癖,并且CopyLocal将不必按照预期的方式工作,如下所示构建的辅助装配中的装配参考.

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

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


Meh*_*ari 2

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

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

  • 它的作用远不止于此。它严重影响部署场景。 (4认同)