WiX自定义操作项目 - BadImageFormatException

问题描述:

我正在开发我的第一个自定义操作,但无法获取生成的.CA.dll文件加载。继承人最简单的过程,其结果如下:WiX自定义操作项目 - BadImageFormatException

我创建了一个自定义操作项目并保留了所有的默认值。这个类看起来是这样的:

using Microsoft.Deployment.WindowsInstaller; 
namespace CustomAction 
{ 
public class CustomActions 
{ 
[CustomAction] 
    public static ActionResult CustomAction1(Session session) 
    { 
     session.Log("Begin CustomAction1"); 

     return ActionResult.Success; 
    } 
} 
} 

然后我建组件(无论是在调试或发行),这创造了我CustomAction.CA.dll文件。然后我尝试运行这个测试:

[TestMethod] 
    public void LoadAssembly() 
    { 
     Assembly.LoadFrom(@"D:\CustomAction\bin\Debug\CustomAction.CA.dll"); 
    } 

并且得到错误: System.BadImageFormatException:无法加载文件或程序集“文件:/// d:\ CustomAction \ BIN \调试\ CustomAction.CA。 DLL“或其依赖之一。预计该模块将包含程序集清单。

我也不能从我的WiX项目中引用自定义动作。变得非常沮丧!

编辑: 一看,当我通过VS测试经理我得到在应用程序事件日志中的运行:
TmiDataManager.TryConvertPropertyValueToDisplayText:无法使用属性描述符的类型转换器转换属性值。 System.FormatException:输入字符串的格式不正确。
在System.Number.StringToNumber(字符串str的NumberStyles选项,NumberBuffer &数的NumberFormatInfo信息,布尔parseDecimal)
在System.Number.ParseInt32(字符串s的NumberStyles风格的NumberFormatInfo信息)
在System.String。 System.IConvertible.ToInt32(的IFormatProvider提供商)
在System.Convert.DefaultToType(IConvertible值,类型TARGETTYPE,的IFormatProvider提供商)
在System.String.System.IConvertible.ToType(类型类型,的IFormatProvider提供商)
在系统.ComponentModel.EnumConverter.ConvertTo(ITypeDescriptorContext context,CultureInfo culture,Object value,Type destinationType)
在System.ComponentModel.TypeConverter.ConvertToString(对象的值)”

进一步编辑:我可以通过Assembly.LoadFrom加载正常CustomAction.dll,所以也许这是一个不同的问题给BadImageFormat的事情吗?是否有任何理由空白的行动,没有进一步的依赖不会加载到我的WiX项目?

+0

您的CustomAction.CA.dll是否包含嵌入式清单?通过Windows应用程序日志查看,会有一个条目,其中包含更多详细信息为什么无法加载DLL。 – 2011-06-08 10:59:23

+0

在上面添加了我的堆栈跟踪,对我来说没有多大意义。我只是使用默认设置,所以看不到在配置文件中使用字符串而不是数字的位置 – 2011-06-08 12:55:46

CustomAction.CA.dll是一个本机代码DLL,它包含托管代码程序集,并知道如何在MSI中作为自定义操作运行。托管代码程序集是“CustomAction.dll”。

+0

我看过的所有说明告诉我要引用.CA.dll文件来自我的WiX项目。当我尝试这个时,我得到“无法添加对D:\ CustomAction \ bin \ Debug \ CustomAction.CA.dll的引用。请确保该文件是可访问的,并且它是有效的WiX引用。” 我在其他地方看到了一个很好的调试方法,通过LoadAssembly方法... – 2011-06-08 12:48:32

+1

您可以在您的WiX创作中引用自定义动作DLL(例如,Binary,CustomAction元素)。Visual Studio中的“添加引用”是为了包含WiX扩展(这只是为了增加混淆,可以包含自定义操作)。 – 2011-06-08 13:39:33

+0

Doh!现在已经说出了总的意义,现在一切都按我的希望工作。太感谢了! – 2011-06-08 15:09:33