我正在将 Windows CE 解决方案从 .NET 1.1 移植到 3.5
我能够“部署”它——一次——(到Pocket PC 2003 SE Emulator),并运行.exe,但它失败并显示错误消息。
关闭模拟器后,我在Visual Studio 2008 IDE的构造函数中设置了一个断点导致问题,并再次部署,希望单步执行代码,看看问题出在哪里。
然而,我并没有被这个编码器的涅槃,而是被编译器的这个公报刺痛了:
“部署和/或注册失败并出现错误:0x8973190e。写入文件'%CSIDL_PROGRAM_FILES%\ABC\ABC.exe'时出错。错误0x80070020:该进程无法访问该文件,因为它正被另一个进程使用。设备连接组件”
考虑到模拟器的进程可能像南方姐妹会外面的疙瘩一样徘徊,我关闭了 Visual Studio 并重新启动。我再次捣碎了 F5,充满了人类胸中永恒的希望,只是再次被同样的信息搭讪。
我需要做什么才能让我的模拟器回来?
作为一个<aside
>,我觉得奇怪的是我无法截取模拟器的屏幕截图 - PrtScn 和 Alt+PrtScn 都无法用其像素填充剪贴板。
更新
我随后部署到“USA Windows Mobile 5.0 Pocket PC R2 Emulator”,我的应用程序在该“设备”上运行,但是当我尝试让应用程序通过它的步伐时,我得到:“异常:文件或程序集名称'System.Core ,Version=3.5.0.0 ...,或其依赖项之一,未找到“
我看到文件资源管理器有一个“.NET CF 2.0”文件夹,但没有“.NET CF 3.5”文件夹——但是使用 3.5 的应用程序已部署到设备(至少部分)......我是否正确假设会有这样一个文件夹?如果没有,System.Core 3.5 版应该放在哪里?
更新 2
接下来,我尝试“Windows Mobile 5.0 Smartphone Device R2”,得到错误:“部署和/或注册失败,错误:0x8973190e。写入文件'\Windows\NETCFv35.wm.ARMV4I.cab'时出错。错误0x80070070:那里磁盘空间不足。设备连接组件“
宾夕法尼亚嘻哈!(关键说唱!)
...哦,哎呀-我实际上想再次使用模拟器,而不是将其部署到实际设备上。
更新 3
我再次收到此错误消息,直接部署到设备。我今天运行了几次,最后几次它失败了,可能是一个糟糕的 REST 调用(客户端上的措辞错误)。现在我又看到了这个“磁盘上没有足够的空间”爵士乐。
我尝试了 JP2Code 的建议,但我根本看不到正在运行的应用程序,也没有看到表面上存储名称的选项卡:
至于将 this.Close() 添加到退出代码中,已经存在的是:
DialogResult userResponse =
MessageBox.Show("Are you sure you want to exit Duckbill?", Platypus.GetFormTitle("", "", ""),
MessageBoxButtons.YesNo,
MessageBoxIcon.Question, MessageBoxDefaultButton.Button2);
if (userResponse == DialogResult.Yes)
{
Dispose(false);
}
我不知道为什么最初的编码员会这样做,但我认为这个花哨的代码避免了对 this.Close() 的调用——或者不是?
相当奇怪和可怕的自定义“处置”方法是(我的评论):
protected override void Dispose(bool disposing)
{
dbconn.DBClose();
base.Dispose(disposing);
Application.Exit(); // Why?
// I would add to that "Why?" comment above with a reference to this:
// http://codereview.stackexchange.com/questions/23133/is-there-a-valid-answer-to-this-why-comment
// This makes me think twice about removing it, though:
// http://social.msdn.microsoft.com/Forums/en-US/clr/thread/15efa70b-0065-44ef-ab09-7088fefd52b0
// If it becomes a problem/there are complaints about it crashing when closing, revisit...
// Could this have been the cause of the NRE that I ended up "eating"? See frmEntry.saveDSD()'s
// catch block
}