为什么MVVM Light将系统组件复制到应用程序文件夹?

时间:2016-07-31 09:18:07

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

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

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

再现它非常简单。我正在使用VS2015社区。

  1. 创建一个新的WPF应用程序项目。
  2. 将NuGet引用添加到MVVM Light(或仅限Lib的版本;无所谓)。
  3. 将MSI安装项目添加到解决方案中(必须安装extension)。
  4. 将WPF应用程序的主项目输出添加到安装项目。
  5. 你去吧。一长串 System.X.Y 将添加到列表中。如果您构建并安装安装项目,则会在Program Files文件夹中看到所有这些DLL。

    为什么呢?以及如何解决它?

    更新

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

有关更多信息,请参见:

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