c# - 应用程序在 InitializeComponent() 中崩溃

标签 c# winforms initializecomponent measurement-studio

首先,我使用的是 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.runform1 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 文件修复了我遇到的问题。

下面是我可以看到的 mstudiocommonmstudioui 合并模块的模块依赖关系的屏幕截图: Screenshot of the module dependencies that I could see for the <code>mstudiocommon</code> and <code>mstudioui</code> merge modules.

虽然,我不太明白为什么 Visual Studio 检测的是 VS90 而不是 VS100,但我很高兴我终于解决了这个问题,我将把这个问题留到另一天。

关于c# - 应用程序在 InitializeComponent() 中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955558/

相关文章:

xaml - 在 xamarin 表单中实现可重用元素

c# - 使用 postsharp 将方面应用到方面

c# - 在 StatusStrip 的 ProgressBar 上显示文本

c# - 哪种交叉方法最能让我们快速改变 GA 中 TSP 的最佳值?

c# - 如何在 C# 中从工作线程发布 UI 消息

C# 没有像我告诉的那样处理控件

c# - 如何自定义InitializeComponent的代码生成?更具体地说,如何对所有生成的代码进行后处理?

wpf - 当前上下文中不存在名称 'InitializeComponent'

c# - 如何在 Nancy 中注入(inject) ClaimsPrincipal

c# - 如何将 JSON 输出转换为 C# 对象并将它们存储到数组中