首先,我使用的是 Visual Studio 2010,Measurement Studio 2010 plugin 、C# 和 .NET 4.0。
我的应用程序从 USB 设备接收数据,并使用 WaveformPlot()
[这是Measurement Studio 的一部分] 绘制数据图表。我能够在调试和 Release模式下正常运行该应用程序,甚至可以直接使用开发计算机上 bin
文件夹中的 EXE 文件正常运行该应用程序。
但是,我根本无法在另一台计算机上运行它。我正在使用ClickOnce创建安装文件和文件夹,然后将发布文件夹从开发计算机复制到客户端计算机。然后运行安装文件,ClickOnce 下载 .NET(如果尚未安装),然后打开应用程序。该应用程序显示了我的初始对话框,要求我从许多可用的 COM 端口中选择一个。执行此操作后,我的代码将执行 InitializeComponent()
,之后主窗体应该会显示。
在初始框之后主窗体不会打开。使用 Debug.WriteLine 语句,我已经能够将其范围缩小到
this.waveformPlot = new NationalInstruments.UI.WaveformPlot();
这里崩溃了。它没有向我显示任何错误消息或任何内容。它在我的开发计算机上运行良好,但在其他计算机上运行不佳。我包括了 National Instruments DLL 文件和其他 National Instruments 组件初始化良好。只是这个没有。该应用程序会在 Windows 任务管理器中显示一段时间,然后在大约 10 秒后消失。
我应该做什么?
更新1
在阅读 Stack Overflow 上的另一个不相关问题后,我意识到我可以将 Application.run
和 form1 mainform = new form1()
放入 try-catch 中堵塞。
System.TypeInitializationException: The type initializer for 'NationalInstruments.UI.Internal.WaveformPlotElement' threw and exception. --> System.IO.FileNotFoundException: Could not load file or assembly 'NationalInstruments.Common.Native.dll' or one of its dependencies. The specified module could not be found.
因为我现在至少知道这是一个异常,所以我会处理它,尝试找出缺少哪个 DLL 以及原因,并更新这个问题。
更新2
我检查了发布文件夹中的应用程序文件,它确实包含“NationalInstruments.Common.Native.dll”。我不知道为什么它无法加载它。
更新3
我在客户端计算机上运行 Fusion Log Viewer,发现 NationalInstruments.Common.Native.dll
已成功加载。但是,调试异常消息仍然显示如OP所示,
Could not load file or assembly 'NationalInstruments.Common.Native.dll' or one of its dependencies"
Screenshot of what the Fuslogvw.exe shows
<小时/>Fuslog Viewer显示所有程序集已成功加载。我检查了客户端计算机。虽然,National Instruments DLL 文件中有一行显示“GAC 查找不成功”,而其他程序集却没有。
DebugViewer 显示我使用 Debug.writeLine
打印出来的异常。这表明无法加载 NationalInstruments.Common.Native.dll
或其依赖项之一。
我很困惑。
<小时/>我尝试添加对项目的引用,使用反编译器检查引用,使用其他安装程序(ClickOnce 除外),但它们似乎都没有让我有任何进展。 :(
<小时/>更新4
我昨天才发现该应用程序在 64 位系统上安装并运行良好。我之前尝试过的两台电脑都是32位的Windows 7系统。 我想看看这是否能以某种方式帮助我。 该应用程序是在我的 64 位 Windows 7 开发笔记本电脑上编译的。项目属性下“构建”中的“平台”下拉菜单显示“事件 (x86)”,并且我将“任何 CPU”作为平台目标。
最佳答案
在这个问题上花了很多时间后,我与 National Instruments 的某人交谈,他帮助我解决了我遇到的问题。我之前注意到,通过检查 mstudiocommon.2010.msm
的模块依赖项,它 (mstudiocommon.2010.msm
) 正在寻找 vs100_crt_x86.msm
文件,但安装程序已检测到(并添加)了 vs90_crt_x86.msm
(在安装程序项目的“检测到的依赖项”中)。右键单击安装程序项目并手动添加 VS100 .msm 文件修复了我遇到的问题。
下面是我可以看到的 mstudiocommon
和 mstudioui
合并模块的模块依赖关系的屏幕截图:
虽然,我不太明白为什么 Visual Studio 检测的是 VS90 而不是 VS100,但我很高兴我终于解决了这个问题,我将把这个问题留到另一天。
关于c# - 应用程序在 InitializeComponent() 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955558/