我有一个共同的silverlight项目。除其他外,该项目项目包括常量和静态类。
Silverlight App我引用了这个公共库。 另外,我有一些按需加载的外部模块(通过Prism)。每个模块都是自己的.Xap文件,它们也引用了公共库。
所以现在我的silverlight应用程序中的每个Xap都引用了Common.dll。 这是否意味着每次加载xap时都会加载common.dll,或者它本质上是指只加载了主应用程序的common.dll?
我得到的最终问题是: 如果我在common.dll中进行代码更改(错误修复),我是否必须释放所有Xap文件或仅发布主应用程序xap?
感谢。
答案 0 :(得分:1)
如果您在引用公共dll的所有项目中使用Assembly Caching,那么您只需将一个副本下载为自己的zip文件。这样,所有不同的XAP文件都将引用相同的dll。否则common.dll
将包含在引用的每个XAP文件中。
您需要为common.extmap.xml
创建一个common.dll
文件,该文件需要位于引用dll的同一文件夹中。
答案 1 :(得分:0)
默认情况下,DLL会按需加载。这意味着您无法真正保证它们将从哪个目录加载。这是模块化应用程序中的一个常见问题,也是一个没有现成处方的问题。它本质上取决于要求。
你可以做的一些事情:
我们选择了2号(我们将“Common.dll”视为很少更改的合同程序集)以保持我们的xcopy部署完好无损。
如果您预计Common.dll上的代码流失率很高,或者您希望保持模块的部署时间表完全自主(如果模块由具有单独构建的单独团队开发和部署),则第1号可能更有意义和源存储库,例如)。
编辑:看起来Silverlight有一些东西可以提供GAC方法的xcopy变体。 ChrisF的回答可能就是我使用Silverlight的方式(我们做WPF,所以有点不同)。我会把这个留给后人。