如何停止Silverlight xap文件,包括“Copy Local = False”dll?

时间:2012-04-24 14:56:08

标签: silverlight visual-studio-2010 copy xap

在过去,我使用了以下网址中列出的解决方案,以避免在模块化Silverlight应用程序中多次下载第三方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.dll,

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

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

似乎包含的项目文件被忽略了“复制本地”设置,而是使用父“Copy Local”设置,而我无法排除那些3rdParty.dlls

我错过了一些微妙的东西吗?有没有其他方法可以避免在shell应用程序下载它们时在多个模块中下载这些3rdParty.dll?

2 个答案:

答案 0 :(得分:0)

我不是100%确定为什么会出现此问题,但它与Prism有关。我们解决它的方式是添加对所有启动项目和每个子项目的引用,即使它们没有直接引用但是该项目。

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

  2. 确保Parent1.csproj引用了所有3 rd 派对。

  3. 将这些相同的引用添加到child1.csprojchild2.csproj

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

答案 1 :(得分:0)

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

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