0

过去,我使用以下 URL 中概述的解决方案来避免在模块化 Silverlight 应用程序中多次下载第 3 方 dll:

如何通过删除常用文件来优化 silverlight XAP 文件的大小?

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

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

child1.csproj 和 child2.csproj 都将 3rdParty.dll 的“复制本地”设置为 false,但尽管如此,Parent1.csproj 的 .xap 文件仍包含第 3 方 dll。

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

似乎包含的项目文件忽略了它们的“复制本地”设置并使用父“复制本地”设置,我无法排除那些 3rdParty.dll

我在这里错过了一些微妙的东西吗?当外壳应用程序已经下载它们时,是否有其他方法可以避免在多个模块中下载这些 3rdParty.dll?

4

2 回答 2

0

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

  1. 确保为所有项目启用“使用应用程序库缓存来减少 XAP 大小”。

  2. 确保它Parent1.csproj引用了所有 3 rd方 dll。

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

  4. 仔细检查您是否有所有 3 rd方 dll 的 extmap 文件。如果这些缺失,dll 将被加载到 XAP 文件中。

于 2012-04-24T15:04:41.870 回答
0

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

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

于 2013-09-15T21:05:04.790 回答