该程序运行良好,直到我这样做:
当我在机器上启动新版本时,我得到:
未处理的例外情况: System.TypeLoadException:无法 加载类型 'SI.AS.CommonLogic.Utils.ErrorLog' 从装配 “SI.AS.CommonLogic.ErrorUtils, 版本= 1.0.0.0,文化=中立, 公钥= 925c8734ae397609' 。在 RSMonitor.RSMonitorMain.Main(字符串[] 参数)
ErrorUtils是我添加的新类。有一个带有静态类的文件。我在其下添加了另一个静态类,并为项目添加了设置。它在我的开发人员计算机上以调试模式顺利运行。但是我无法在另一台机器上安装和运行它。该程序可以从同一个文件中调用另一个静态类。我在这里缺少什么?
**更新**
我试图第二次安装它并检查DLL。时间戳与最新的编译版本匹配,现在可以正常工作。我不知道为什么它上次不起作用,因为它是我再次安装的相同包。但如果我得到同样的错误,那么我会尝试你的建议。
答案 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从开发人员计算机复制到客户计算机的安装目录,看看是否能修复它,然后从那里开始工作。