首先,我使用 Visual Studio 2010、Measurement Studio 2010 插件、C# 和 .NET 4.0。
我的应用程序从 USB 设备接收数据并使用WaveformPlot()
[这是 Measurement Studio 的一部分] 绘制数据。我能够在调试和发布模式下正常运行应用程序,甚至可以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 的另一个不相关的问题后,我意识到我可以将 theApplication.run
和 theform1 mainform = new form1()
放在一个 try-catch 块中。
System.TypeInitializationException:“NationalInstruments.UI.Internal.WaveformPlotElement”的类型初始化程序抛出异常。--> System.IO.FileNotFoundException:无法加载文件或程序集“NationalInstruments.Common.Native.dll”或其依赖项之一。指定的模块无法找到。
因为我现在至少知道这是一个例外,所以我会处理它,尝试找出缺少哪个 DLL 以及为什么,并更新这个问题。
更新 2
我检查了发布文件夹中的应用程序文件,它确实包含“NationalInstruments.Common.Native.dll”。我不知道为什么它不能加载它。
更新 3
我在客户端计算机上运行 Fusion Log Viewer 并看到NationalInstruments.Common.Native.dll
已成功加载。但是,调试异常消息仍然显示,如 OP 所示,
无法加载文件或程序集“NationalInstruments.Common.Native.dll”或其依赖项之一”
Fuslog Viewer 显示所有程序集都已成功加载。我在客户端计算机上进行了检查。虽然,National Instruments DLL 文件中有一行显示“GAC 查找不成功”,而其他程序集则没有。
DebugViewer 显示我使用打印出来的异常Debug.writeLine
。这表明NationalInstruments.Common.Native.dll
无法加载其依赖项或其中一个依赖项。
我很困扰。
我尝试添加对项目的引用,使用反编译器检查引用,使用其他安装程序(ClickOnce 除外),但它们似乎都没有让我到任何地方。:(
更新 4
我昨天才发现该应用程序在 64 位系统上安装和运行良好。我之前试过的两台电脑都是 32 位的 Windows 7 系统。我正在寻找是否可以以某种方式帮助我。该应用程序是在我的 64 位 Windows 7 开发笔记本电脑上编译的。项目属性下“构建”中的“平台”下拉菜单显示“活动(x86)”,我将“任何 CPU”作为平台目标。