复制本地和系统dll' - 重点是什么?

时间:2010-07-06 10:22:39

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

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

由于这些文件包含在每个XAP中,因此XAP大小会大幅增加。在我的有限测试中,将“Copy local”设置为false似乎并没有破坏任何东西。为什么Visual Studio将这些文件添加到bin路径?由于用户已经拥有Silverlight,我可以假设这些程序集已经安装在每个用户的GAC中,或者我错过了什么?

3 个答案:

答案 0 :(得分:5)

您提及的文件未包含在Silverlight的运行时安装中。使用这些库的Silverlight应用程序必须在下载过程中将它们提供给用户。

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

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

这有助于您的网站可能有多个Xap用于各种应用程序或频繁发布新版本的情况。对于很少变化或被许多独特访问者点击的单个应用程序,它不那么有用。

答案 1 :(得分:0)

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

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

然而,如果不知道究竟是什么dll被引用,我就无法准确说出

答案 2 :(得分:0)

我认为这里的关键是“似乎没有破坏任何东西”。由于Silverlight应用程序可以在许多平台和具有不同版本的浏览器上运行,因此无法做出假设,因为它适用于您的计算机甚至一两个其他平台。

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

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