【问题标题】:How to stop Silverlight xap files including "Copy Local=False" dlls?如何停止包含“Copy Local=False”dll 的 Silverlight xap 文件?
【发布时间】:2013-09-16 05:05:04
【问题描述】:

过去,我使用以下 URL 中概述的解决方案来避免在模块化 Silverlight 应用程序中多次下载第 3 方 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 的项目文件

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

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

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

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

【问题讨论】:

    标签: silverlight visual-studio-2010 copy xap


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 非常感谢您的及时回复。将 dll 添加到父项目(即使没有直接引用)并在父项目上将“复制本地”设置为 false,这一切都可以正常工作。
    • 据我所知,Prism 模块不支持应用程序库缓存,除非您进行一些自定义。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2012-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多