我正在使用WiX创建一个MSI,该MSI调用在VS 2008中使用Votive编写的托管自定义操作(CA).CA以.NET 32位Framework 3.5为目标。当我运行安装程序时,它无法加载CA,因为它无法找到正确的框架版本。在MSI安装日志中有行
MSI(5C:C0)[10:25:00:680]:您好,我是您的32位模拟自定义操作服务器。
SFXCA:将自定义操作提取到临时目录:C:\ Windows \ Installer \ MSI34ED.tmp- \
SFXCA:绑定到CLR版本v4.0.30319
我已经知道问题是正在加载错误的框架版本。这似乎是尝试运行version 4 CA and version 2 of the framework时由MSIExec加载时提到的反问题(我假设它是决定加载框架的MSIExec)。
我也在盒子上安装了VS 2010,但由于我无法控制的原因,我必须使用VS 2008进行项目。如果我将项目升级到VS 2010,则所有内容都按预期运行,因为CA随后将定位到.NET 4.0。
在调用自定义操作时,有什么方法可以让MSIExec加载.NET 2.0 / 3.5吗?
更新:我已经更改了CustomAction.config,现在它已经有了
<!--<supportedRuntime version="v4.0" />-->
<supportedRuntime version="v2.0.50727"/>
它没有任何区别。
我还发现,尝试将CA加载到导致异常的调试器中是一种行为。如果我在不破坏方法的情况下运行msi,它将按预期运行(无错误)。所以我可以将设置部署为.NET 3.5设置,我无法调试CA。
答案 0 :(得分:-2)
看起来您无法覆盖MSIExec使用的.Net版本 Aaron Stebner的博客文章Don't use managed code to write your custom actions!说:
此外,如果您创建托管DLL自定义操作,则将您的命运留在Windows Installer手中,因为它将在所有情况下在计算机上使用最新版本的.NET Framework