2012-04-24 29 views
0

在我用在以下网址列出的解决方案,以避免在模块化的Silverlight应用程序的第三方的dll的多个下载过去:如何停止Silverlight xap文件,包括“Copy Local = False”dll?

How to optimize the size of silverlight XAP file by removing common files?

但是我工作的一个Visual Studio 2010/Silverlight的5解决方案应用程序不起作用。

我有一个PRISM模块让我们把它Parent1.csproj一个没有引用我的3rdParty的dll,但它确实有它引用的3rdParty的dll child1.csproj和child2.csproj其他两个项目文件的引用

对于3rdParty.dlls,child1.csproj和child2.csproj都将“Copy Local”设置为false,但尽管如此,Parent1.csproj的.xap文件包含第三方dll。

如果我在Parent1.csproj文件中设置child1.csproj和child2.csproj文件并将“Copy Local”设置为false,那么我将得到一个显着减少的没有第三方dll的xap文件,但也没有其他代码孩子项目,我实际上需要能够运行。

看来,如果包括项目文件获取它们的“复制本地”设置忽略使用父“复制本地”设置代替,而且也没有办法,我排除那些3rdParty.dlls

我错过了什么在这里微妙?有没有其他方法可以避免在shell应用程序已经下载它们时在多个模块中下载这些3rdParty.dlls?

回答

0

我不是100%确定为什么发生此问题,但它与棱镜有关。我们解决这个问题的方法是为所有启动项目和每个子项目添加引用,尽管它们不是直接引用而是该项目。

  1. 确保“通过使用应用程序库缓存减少XAP大小” 所有您的项目已启用。

  2. 请确保Parent1.csproj提及您所有的3 rd派对dll。

  3. 将这些相同的参考添加到child1.csprojchild2.csproj

  4. 仔细检查你所有的3 rd派对dll有extmap文件。如果缺少这些dll将被加载到XAP文件中。

+0

非常感谢您的及时回复。将dll添加到父项目(即使未直接引用),并将父项目中的“copy local”设置为false,这些都可以工作。 – user1353999 2012-04-25 07:54:47

+1

据我所知,Prism模块不支持应用程序库缓存,除非您进行一些自定义。 – Thorarin 2013-09-15 20:42:50

0

添加对模块项目的引用并将Copy Local设置为false会起作用,这或多或少是接受的答案描述的。但是,Prism模块不支持应用程序库缓存,因此可能无法按预期工作。

如果您有很多程序集引用,以这种方式添加它们不是很好维护。您还可以使用后期构建步骤从XAP中删除不需要的程序集。这里有一个简短的article that I wrote关于如何。