【问题标题】:Copy local and system dlls' - what is the point?复制本地和系统 dll' - 有什么意义?
【发布时间】:2010-07-06 10:22:38
【问题描述】:

Visual Studio 默认将所有 dll 复制到每个项目的 bin 文件夹中。这还包括系统 dll(mscorlib.dll 和 System.dll 除外),例如 System.Xml.Linq、System.ComponentModel.Composition(自 SL4 起包含)等。

由于这些文件包含在每个 XAP 中,XAP 的大小会大大增加。在我有限的测试中,将“复制本地”设置为 false 似乎并没有破坏任何东西。为什么 Visual Studio 将这些文件添加到 bin 路径?由于用户已经拥有 Silverlight,我是否可以假设这些程序集已安装在每个用户的 GAC 中,还是我遗漏了什么?

【问题讨论】:

    标签: .net visual-studio silverlight copy-local


    【解决方案1】:

    您提到的文件不包含在 Silverlight 的运行时安装中。使用这些库的 Silverlight 应用程序必须将它们作为下载的一部分提供给用户。

    您可以通过在项目属性页面的 Silverlight 选项卡中设置“通过使用库缓存来减少 XAP 大小”选项来最小化一些影响。

    此选项会使这些文件中的每一个都放置在单独的 Zip 文件中,这些文件将放置在与 XAP 相同的文件夹中。

    这有助于您的网站可能有多个 Xap 用于各种应用程序或您经常发布新版本的情况。对于很少更改或被许多唯一访问者访问的单个应用程序,它没有那么有用。

    【讨论】:

    • 完全有道理。感谢您提供的信息...非常有帮助。
    【解决方案2】:

    不是默认情况下,通常存储在 GAC 中的特定于框架的 dll 不会复制到输出 bin 目录,您可以假设它们将在客户端计算机上。

    上面提到的Copy Local默认为false,所以我相信在某个阶段它们被更改为true。

    但是,在不确切知道 dll 指的是什么的情况下,我不能准确地说出

    【讨论】:

    • 在我的例子中,它们是 System.Xml.Linq、System.Windows、System.ComponentModel.Composition、System.Runtime.Serialization 和 System.Windows.Browser。
    • @Blake:所有这些 dll 都是 SDK 的一部分,需要从您的站点作为缓存库(请参阅我的回答)或作为 Xap 的一部分提供。
    【解决方案3】:

    我认为这里的关键是“似乎没有破坏任何东西”。因为 Silverlight 应用程序可以在许多平台和具有不同版本的浏览器上运行,所以您不能假设某些东西会起作用,因为它可以在您的机器上运行,甚至在一两台其他机器上运行。

    如果包含 DLL 是因为可能需要它们,因此如果您计划广泛分发您的应用程序,您需要确定它们会在那里。

    例如,我一直在开发一个基于 Prism 的应用程序,该应用程序延迟加载模块。大多数 XAP 已减少到 20k 左右,因为保证辅助模块能够使用它们在 Shell XAP 中所需的 DLL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-29
      • 2018-10-10
      • 1970-01-01
      • 2012-08-07
      • 2011-11-10
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多