Visual Studio 2010安装项目中的CustomAction的System.BadImageFormatException

时间:2010-06-23 08:42:41

标签: .net-3.5 visual-studio-2010 64-bit setup-project

抓住你的枪!我确实检查了所有项目输出是否都设置为相同的处理器架构(在本例中为x64)。他们是。那么我想做什么呢?

  1. 为Autodesk Revit Architecture 2011 x64编写了一个插件
    • 定位.NET 3.5
    • 64
  2. 创建了一个设置项目
  3. 使用提供的DLL(RegisterRevit2011Addin)创建了一个自定义操作(RevitAddInUtility.dll),用于向Revit注册插件
    • 定位.NET 3.5
    • 64
  4. 添加自定义操作以设置项目,构建,安装
  5. 这是我收到的错误消息:

      

    错误1001.初始化安装时发生异常:   System.BadImageFormatException:无法加载文件或程序集   'RegisterRevit2011,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或者一个   它的依赖关系。试图加载格式不正确的程序。

    为了确保,我创建了一个简单的控制台测试应用程序:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                var register = new RegisterRevit2011Addin.RegisterAddinCustomAction();
                Console.WriteLine(register);
                register.Context = new System.Configuration.Install.InstallContext();
                register.Context.Parameters.Add("assemblypath",     typeof(Program).Assembly.Location);
                register.Install(new Dictionary<string, string>());
                Console.ReadLine();
            }
        }
    }
    

    我编译了这个目标x64和.NET 3.5 - voilà,它的工作原理!所以我现在可以假设错误位于安装项目的某个地方。我在设置项目属性中设置了目标平台,并将启动条件设置为3.5。

    有趣:当我使用setup.exe检查生成的dumpbin /headers时,它会通知我它是x86进程!

    我很确定这一切都在前天工作,所以我有点担心我以某种方式搞砸了我的系统。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

这听起来像是答案:http://blogs.msdn.com/b/heaths/archive/2006/02/01/64-bit-managed-custom-actions-with-visual-studio.aspx

基本上,Visual Studio(至少在2005版本中)使用32位垫片运行自定义操作。在构建msi之后手动将其更改为64位可以解决问题。我现在正在研究它。