【问题标题】:Why MVVM Light copies system assemblies to application folder?为什么 MVVM Light 将系统程序集复制到应用程序文件夹?
【发布时间】:2016-12-05 13:39:33
【问题描述】:

向 WPF 项目添加 MVVM Light 引用会将大量系统程序集添加到随附的 MSI 设置项目的依赖项列表中。然后在安装应用程序时将这些程序集(数量超过 50)复制到应用程序文件夹。为什么会这样?为什么不能直接从 GAC 引用呢?

注意:对于 MVVMLight.dll,复制本地 选项设置为 True。我显然不能将其设置为 False。

复制它非常简单。我正在使用 VS2015 社区。​​p>

  1. 创建一个新的 WPF 应用程序项目。
  2. 将 NuGet 引用添加到 MVVM Light(或仅 Lib 版本;没关系)。
  3. 将 MSI 安装项目添加到解决方案(必须安装 extension)。
  4. 将 WPF 应用程序的主项目输出添加到设置项目。

给你。 System.X.Y 的长列表将添加到列表中。如果您构建并安装安装项目,您将在 Program Files 文件夹中看到所有这些 DLL。

为什么?以及如何解决?

更新

如果 WPF 应用程序以 .NET Framework 4.0 为目标并且您在此之后添加 NuGet 引用,则不会出现此问题。但是,如果您以 .NET 4.5、4.5.1 或 4.6 为目标,则会再次出现一长串依赖项。认为 MVVM Light(或 NuGet)无法找到正确的包子文件夹。

【问题讨论】:

  • 我有一个针对 4.5 的应用程序,Galasoft.MVVMLight 为我添加了大约 4-5 个 dll。如何将其添加到项目中?
  • @BudaFlorin:直接通过 nuget。没什么特别的。我正在使用 VS2015 社区以防万一。另请注意,这只发生在安装项目 (MSI) 中,而不是主项目本身的 bin 目录。
  • 如果有人能确认他们可以复制它,我将不胜感激。

标签: wpf visual-studio windows-installer mvvm-light


【解决方案1】:

我不知道为什么会这样,但我可以提供一种解决方法。只需打开项目的 Detected Dependencies 文件夹,选择所有 System dll,右键单击并选择 Exclude。

【讨论】:

  • 感谢您的意见。这可能是我在所有其他方法都失败后要做的最后一件事。我不愿意使用这种方法的部分原因是它可能无法在用户机器上的 GAC 中找到合适的程序集,就像它无法在开发机器上定位它们一样。
  • 已经完成了...您将文件提交到源代码管理并通过 CI/CD 管道运行它,突然它会随机检测各种其他内容并再次包含它,因为您没有'不排除 THOSE 文件...相信我.. 不值得努力并且充满风险。
【解决方案2】:

过于激进的依赖扫描是我不使用 Visual Studio 部署项目的众多原因之一。相反,我使用 WiX / IsWiX。都是开源的,后面的都是我自己写的。

欲了解更多信息,请参阅:

http://www.github.com/iswix-llc/iswix-tutorials

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多