在Silverlight项目中引用的常见DLL

时间:2011-06-01 18:42:03

标签: silverlight prism

我有一个共同的silverlight项目。除其他外,该项目项目包括常量和静态类。

Silverlight App我引用了这个公共库。 另外,我有一些按需加载的外部模块(通过Prism)。每个模块都是自己的.Xap文件,它们也引用了公共库。

所以现在我的silverlight应用程序中的每个Xap都引用了Common.dll。 这是否意味着每次加载xap时都会加载common.dll,或者它本质上是指只加载了主应用程序的common.dll?

我得到的最终问题是: 如果我在common.dll中进行代码更改(错误修复),我是否必须释放所有Xap文件或仅发布主应用程序xap?

感谢。

2 个答案:

答案 0 :(得分:1)

如果您在引用公共dll的所有项目中使用Assembly Caching,那么您只需将一个副本下载为自己的zip文件。这样,所有不同的XAP文件都将引用相同的dll。否则common.dll将包含在引用的每个XAP文件中。

您需要为common.extmap.xml创建一个common.dll文件,该文件需要位于引用dll的同一文件夹中。

答案 1 :(得分:0)

默认情况下,DLL会按需加载。这意味着您无法真正保证它们将从哪个目录加载。这是模块化应用程序中的一个常见问题,也是一个没有现成处方的问题。它本质上取决于要求。

你可以做的一些事情:

  1. GAC目标环境中的Common.dll。这将允许您集中控制该DLL的版本控制。
  2. 每次Common.dll更改时释放所有内容(如您所述)。
  3. 我们选择了2号(我们将“Common.dll”视为很少更改的合同程序集)以保持我们的xcopy部署完好无损。

    如果您预计Common.dll上的代码流失率很高,或者您希望保持模块的部署时间表完全自主(如果模块由具有单独构建的单独团队开发和部署),则第1号可能更有意义和源存储库,例如)。

    编辑:看起来Silverlight有一些东西可以提供GAC方法的xcopy变体。 ChrisF的回答可能就是我使用Silverlight的方式(我们做WPF,所以有点不同)。我会把这个留给后人。