我的main方法以TypeLoadException退出

时间:2011-03-30 11:50:25

标签: c#

该程序运行良好,直到我这样做:

  1. 在现有文件和现有命名空间下添加了新类。
  2. 为新类所属的项目添加了设置。
  3. 构建解决方案。
  4. 构建安装项目。
  5. 在计算机上安装新版本。
  6. 当我在机器上启动新版本时,我得到:

      

    未处理的例外情况:   System.TypeLoadException:无法   加载类型   'SI.AS.CommonLogic.Utils.ErrorLog'   从装配   “SI.AS.CommonLogic.ErrorUtils,   版本= 1.0.0.0,文化=中立,   公钥= 925c8734ae397609' 。在   RSMonitor.RSMonitorMain.Main(字符串[]   参数)

    ErrorUtils是我添加的新类。有一个带有静态类的文件。我在其下添加了另一个静态类,并为项目添加了设置。它在我的开发人员计算机上以调试模式顺利运行。但是我无法在另一台机器上安装和运行它。该程序可以从同一个文件中调用另一个静态类。我在这里缺少什么?

    **更新**

    我试图第二次安装它并检查DLL。时间戳与最新的编译版本匹配,现在可以正常工作。我不知道为什么它上次不起作用,因为它是我再次安装的相同包。但如果我得到同样的错误,那么我会尝试你的建议。

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

您的程序看起来无法找到另一个程序集,可能称为SI.AS.CommonLogic.ErrorUtils.dll。要么就是这样,要么它只能找到这个程序集的错误版本。

这是一个解决方案的一部分吗?

如果是这样,是否在" bin"它无法运行的机器上的目录(换句话说,这个程序集是否与您的应用程序一起正确部署)?

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

在这里可能会有所帮助的一件事就是在它可以使用的miachine上使用Assembly Binding Log Viewer,并且它不会在工作案例中看到它从哪里加载,并且它试图在失败的情况下加载它。

注意您可能需要进行注册表更改才能记录所有装配箱信息:

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

答案 3 :(得分:1)

听起来你的程序集的旧版本正在从某个地方加载。

要检查的一些事项:

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

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

我在一家公司工作过(简要地)为内部版本构建了安装程序,而没有使用正确的程序集版本,导致了这种类型的绝对可怕的问题(开发人员机器将充满GAC中的程序集)。

检查开发人员和客户计算机上的GAC。还要尝试Josh建议的内容:将罪魁祸首DLL从开发人员计算机复制到客户计算机的安装目录,看看是否能修复它,然后从那里开始工作。