NET C#应用程序在开发PC上运行良好,但不能在生产计算机上运行

问题描述:

因此,它基本上如标题中所述。我已经使用一些外部库在Visual Studio 2013中创建了一个WPF应用程序。NET C#应用程序在开发PC上运行良好,但不能在生产计算机上运行

应用程序完美地运行在我的开发机器上(Windows 8.1 x64 + Visual Studio 2013),但在生产设备(带有Windows 8(不是8.1)的平板电脑)上完全不运行。应用程序是在.NET 4.5下开发的,如果我尝试运行调试或发布版本,则无关紧要。该过程只是挂了一段时间,然后关闭没有任何错误或消息。

如果有人知道该怎么办或如何解决这个问题,我会非常高兴。

在此先感谢:)。

+0

这是一个商店应用程序或桌面应用程序? – 2014-10-19 19:32:02

+0

@MingSlogar WPF不适用于商店应用。 – 2014-10-19 19:35:08

+0

@BrianRasmussen我不确定OP是否知道这一点;许多商店应用程序开发人员认为,因为他们使用XAML进行编码,所以它是WPF。如果实际上它是一个商店应用程序,则崩溃可能是由于使用8和8.1之间的不同库引起的。 – 2014-10-19 19:39:34

这是因为你的外部库没有被编译到最终的.exe文件中。所以你要么需要将它们包含在同一个文件夹中,要么将它们合并到exe中,但这个过程可能非常棘手。寻找ILMerge。然而,只需要将它们复制到exe文件中就简单多了。

+0

这就是我已经完成的,并不是很不幸。 – drajvver 2014-10-19 18:48:30

+0

除.dll文件之外,如果目标设备上未安装.NET Framework 4.5,则启动后应用程序也会立即崩溃... – Filip 2014-10-19 19:13:21

最有可能在启动时发生绑定错误,但您正在测试的生产计算机被配置为以静默方式报告这些错误,并且不显示通知您该进程崩溃的典型对话框。

虽然不要担心,但这个消息可能无法帮助你太多。

你需要做的是用一个可以生成依赖树的工具检查主可执行文件,并找出哪些DLL丢失。很可能这些将是本机二进制文件,不受管理。通常的嫌疑犯是VC运行时,或MFC或ATL库,但也可能有其他人。这就是为什么您需要使用诸如DependencyWalkerRedGate's Reflector之类的工具来查找主可执行文件的所有依赖关系。

在这种情况下,第一件事情就是查看Windows事件日志。当.NET应用程序崩溃时,.NET运行时会在那里记录事件。大多数情况下,这些事件会记录导致崩溃的堆栈跟踪。这会给你提示发生了什么。

这样的日志可以在“应用程序”类别中找到,并且您需要查找的源名称是“.NET运行时”。通常情况下,会有另一个条目的源名称为“应用程序错误”,但这个条目不太可能帮助您。

另一个有用的技术是在程序开始时添加一个Console.WriteLine调用,以查看该行是否可以运行。

根据您使用这些技术所找到的内容,您可能还想使用诸如Dependency WalkerILSpy之类的工具,正如Mike Dinescu所建议的那样。

+0

是的,我使用了Dependency Walker,它显示我缺少“ieshims.dll”,快速谷歌搜索后,我发现它用于VC++ 2005 redistributable,安装它,但没有效果。要查看事件日志 – drajvver 2014-10-19 19:31:31

+0

好吧,我已检查,这是我的错误:http://pastebin.com/58trXNKC 该应用程序正在使用本地SQL文件(.mdf),我有SQL本地安装,但没有用。 – drajvver 2014-10-19 21:13:53

+0

@drajvver你有一个XamlParseException。这个错误本身并没有太大的帮助,因为它表明在WPF初始化窗口的时候出现了问题。通常,这将表明在窗口的构造函数中发生了错误,但它偶尔也可能是由类型初始值设定项中的错误引起的。 – GoldenCrystal 2014-10-20 21:09:57