Deployment WiX自定义操作项目-BadImageFormatException

Deployment WiX自定义操作项目-BadImageFormatException,deployment,installation,wix,custom-action,Deployment,Installation,Wix,Custom Action,我正在开发我的第一个自定义操作,但无法加载生成的.CA.dll文件。以下是最简单的过程和结果: 我创建了一个自定义操作项目,并保留了所有默认值。该类如下所示: using Microsoft.Deployment.WindowsInstaller; namespace CustomAction { public class CustomActions { [CustomAction] public static ActionResult CustomAction1(Session ses

我正在开发我的第一个自定义操作,但无法加载生成的.CA.dll文件。以下是最简单的过程和结果:

我创建了一个自定义操作项目,并保留了所有默认值。该类如下所示:

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:无法加载文件或程序集的file:///D:\CustomAction\bin\Debug\CustomAction.CA.dll'或其依赖项之一。模块应包含程序集清单

我也不能引用WiX项目中的自定义操作。真的很沮丧

编辑: 查看一下,当我运行VS测试管理器时,我在应用程序事件日志中得到以下内容:
TmiDataManager.TryConvertPropertyValueToDisplayText:无法使用属性描述符的类型转换器转换属性值。System.FormatException:输入字符串的格式不正确。
在System.Number.StringToNumber(字符串str、NumberStyles选项、NumberBuffer&Number、NumberFormatInfo、布尔解析十进制)中
位于System.Number.ParseInt32(字符串s、NumberStyles样式、NumberFormatInfo信息)
位于System.String.System.IConvertible.ToInt32(IFormatProvider)
在System.Convert.DefaultToType(IConvertible值,键入targetType,IFormatProvider提供程序)中
位于System.String.System.IConvertible.ToType(类型类型,IFormatProvider提供程序)
在System.ComponentModel.EnumConverter.ConvertTo(ITypeDescriptorContext上下文、CultureInfo区域性、对象值、类型destinationType)
位于System.ComponentModel.TypeConverter.ConvertToString(对象值)”


进一步编辑:我可以通过Assembly.LoadFrom加载普通的CustomAction.dll,因此这可能与BadImageFormat的问题不同?是否有任何理由不将没有进一步依赖项的空白操作加载到我的WiX项目中?

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

您的CustomAction.CA.dll是否包含嵌入的清单?查看Windows应用程序日志,会有一个条目提供无法加载DLL的更多详细信息。上面添加了我的堆栈跟踪,对我来说并没有多大意义。我只是使用默认值,所以看不到在配置文件或类似文件中使用字符串而不是数字的位置。我看到的所有说明都告诉我从我的WiX项目中引用.CA.dll文件。尝试此操作时,我得到“无法添加对D:\CustomAction\bin\Debug\CustomAction.CA.dll的引用。请确保该文件可访问,并且是有效的WiX引用。”我在别处看到一篇帖子,指出调试此操作的一个好方法是通过LoadAssembly方法…您在WiX创作中引用自定义操作dll(例如,二进制,CustomAction元素)。“添加引用”来自Visual Studio,用于包含WiX扩展(只是为了增加混淆,它可能包含自定义操作)。Doh!这完全是有道理的,现在已经说过了,一切都如我所愿工作。非常感谢!