C# 我的main方法以TypeLoadException退出

C# 我的main方法以TypeLoadException退出,c#,C#,在我这样做之前,该程序运行良好: 在现有文件和现有命名空间下添加了一个新类 向新类所属的项目添加了设置 构建解决方案 构建安装项目 在计算机上安装了新版本 当我在机器上启动新版本时,我得到: 未处理的异常: System.TypeLoadException:无法执行 负载类型 'SI.AS.CommonLogic.Utils.ErrorLog' 从组装 'SI.AS.CommonLogic.ErrorUtils, 版本=1.0.0.0,区域性=中性, PublicKeyToken=925c873

在我这样做之前,该程序运行良好:

  • 在现有文件和现有命名空间下添加了一个新类
  • 向新类所属的项目添加了设置
  • 构建解决方案
  • 构建安装项目
  • 在计算机上安装了新版本
  • 当我在机器上启动新版本时,我得到:

    未处理的异常: System.TypeLoadException:无法执行 负载类型 'SI.AS.CommonLogic.Utils.ErrorLog' 从组装 'SI.AS.CommonLogic.ErrorUtils, 版本=1.0.0.0,区域性=中性, PublicKeyToken=925c8734ae397609'。在 RSMonitor.RSMonitorMain.Main(字符串[]) args)

    ErrorUtils是我添加的新类。有一个包含静态类的文件。我在它下面添加了另一个静态类,并向项目中添加了设置。它在我的开发人员机器上以调试模式平稳运行。但是我不能在另一台机器上安装和运行它。程序可以从同一个文件调用另一个静态类。我错过了什么

    **更新**


    我第二次尝试安装它并检查了DLL。时间戳与最新编译版本相匹配,现在可以工作了。我不知道上次它为什么不工作,因为它是我再次安装的同一个软件包。但是如果我遇到同样的错误,那么我将尝试您的建议。

    听起来您的DLL没有正确部署/覆盖。尝试将CommonLogic DLL从开发机器复制到安装目录,然后看看它是否可以加载它,然后找出原因

    听起来您的DLL没有正确部署/覆盖。尝试将CommonLogic DLL从开发机器复制到安装目录,然后看看它是否可以加载它,然后找出原因

    另一个程序集未正确更新,它仍然是旧版本。尝试用当前版本手动更换总成,并检查问题是否依然存在;但是它应该消失。

    另一个程序集没有正确更新,仍然是旧版本。尝试用当前版本手动更换总成,并检查问题是否依然存在;但是它应该会消失。

    您的程序似乎在定位另一个程序集时遇到问题,可能称为SI.AS.CommonLogic.ErrorUtils.dll。否则,它只能找到此程序集的错误版本

    这是作为解决方案一部分的程序集吗

    如果是,它是否在无法运行的计算机上的“bin”目录中(换句话说,此程序集是否与您的应用程序一起正确部署)

    如果不是,这是单独安装的组件或应用程序的一部分,该组件或应用程序安装在您的机器上,而不是其他机器上(即,这是其他机器上缺少的外部依赖项)

    有一件事可能会有所帮助,那就是在这台机器和它不工作的机器上使用,以查看它在工作情况下从何处加载,以及在故障情况下尝试从何处加载

    注意:您可能需要进行注册表更改,以使其记录所有程序集箱信息:


    HKLM\Software\Microsoft\Fusion\ForceLog
    注册表值设置为1(该值为DWORD)。

    您的程序似乎无法找到另一个程序集,可能称为SI.AS.CommonLogic.ErrorUtils.dll。否则,它只能找到此程序集的错误版本

    这是作为解决方案一部分的程序集吗

    如果是,它是否在无法运行的计算机上的“bin”目录中(换句话说,此程序集是否与您的应用程序一起正确部署)

    如果不是,这是单独安装的组件或应用程序的一部分,该组件或应用程序安装在您的机器上,而不是其他机器上(即,这是其他机器上缺少的外部依赖项)

    有一件事可能会有所帮助,那就是在这台机器和它不工作的机器上使用,以查看它在工作情况下从何处加载,以及在故障情况下尝试从何处加载

    注意:您可能需要进行注册表更改,以使其记录所有程序集箱信息:


    HKLM\Software\Microsoft\Fusion\ForceLog
    注册表值设置为1(该值为DWORD)。

    听起来像是从某处加载了程序集的旧版本

    需要检查的几件事:

    首先,您是否错误地设置了对程序集而不是项目的引用?这可能会导致微妙的、依赖于顺序的构建问题。确保引用类型为“project”,而不是“assembly”

    第二,在开发人员机器上是否安装了中的罪犯程序集?即使程序集是构建的依赖项,如果它在GAC中,也可能不会复制到输出目录中。这个问题以一种非常有害的方式表现出来——开发人员机器上的一切看起来都很好(因为它在GAC中有程序集),尽管生成输出是错误的,但是客户机器将崩溃,因为程序集既不在GAC中,也不在安装目录中。我不记得这是否只适用于程序集引用,或者项目引用是否也会接受它。不过,如果这是一个问题,很容易进行测试——只需执行一个干净的构建,然后构建项目并检查复制到输出目录的程序集。他们都应该在那里。如果你的罪魁祸首.dll丢失了,那么你就知道这是个问题

    我曾在一家公司工作,该公司(短暂地)为内部版本构建安装程序,但没有使用正确的程序集版本控制,这导致了这类问题的绝对严重性(开发人员机器将在GAC中充满程序集)

    检查开发人员和客户机器上的GAC。还可以尝试Josh建议的方法:将罪魁祸首DLL从开发人员机器复制到客户机器的安装目录,并将其复制到s