Visual Studio SUO 文件损坏导致应用程序出错

11

我正在清理一个C# Visual Studio 2008解决方案,碰到了一个问题。我想在将代码放置在适当的版本控制下之前删除不必要的文件。在这样做时,我删除了现有的 .suo 文件和所有二进制工件,以获得一个干净的起点。但是,当我这样做时,我的程序无法通过 Microsoft.PointOfService 库访问连接的条形码扫描仪。我已经缩小了问题范围,发现问题出在 .suo 上。如果我保留原始的 .suo,我可以检索到连接的扫描仪列表。但是如果使用新的 .suo,则不能在 PosExplorer.GetDevices() 调用中看到连接的扫描仪。

对我来说,任何与 .suo 相关的事情影响程序行为并不清楚。该解决方案包含三个项目,其中两个被主应用程序引用。在测试中追踪此问题时,我发现这两个项目的引用有时会在干净的 .suo 中断,并且必须重新建立。尽管它们与扫描仪无关。我还必须重新启用顶层项目的调试生成配置。

有什么想法吗?如果可能的话,我不想检查旧版的 .suo。

更新

当使用功能性的旧版 .suo 时,我注意到会加载其他扫描仪驱动程序 DLL(HHSO4NET.dll)。更改后的 VS 输出窗口部分列在下面。

旧版 .suo 输出窗口:

'foo.vshost.exe' (Managed): Loaded 'C:\Program Files (x86)\Honeywell\UPOS Suite\POS4NET Suite\POS for NET\bin\HHSO4NET.dll'
'foo.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.PointOfService.ControlBase\1.12.0.0__31bf3856ad364e35\Microsoft.PointOfService.ControlBase.dll'
'foo.vshost.exe' (Managed): Loaded 'C:\Program Files (x86)\Microsoft Point Of Service\SDK\Samples\Simulator Service Objects\Microsoft.PointOfService.DeviceSimulators.dll'
'foo.vshost.exe' (Managed): Loaded 'C:\Program Files (x86)\Microsoft Point Of Service\SDK\Samples\Example Service Objects\Microsoft.PointOfService.ExampleServiceObjects.dll'
'foo.vshost.exe' (Managed): Loaded 'C:\Program Files (x86)\Honeywell\UPOS Suite\POS4NET Suite\POS for NET\bin\HHSO4NET.dll'
'foo.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.PointOfService.ControlBase\1.12.0.0__31bf3856ad364e35\Microsoft.PointOfService.ControlBase.dll'

清理 .suo 输出窗口:

'foo.vshost.exe' (Managed): Loaded 'C:\Program Files (x86)\Microsoft Point Of Service\SDK\Samples\Simulator Service Objects\Microsoft.PointOfService.DeviceSimulators.dll'
'foo.vshost.exe' (Managed): Loaded 'C:\Windows\assembly\GAC_MSIL\Microsoft.PointOfService.ControlBase\1.12.0.0__31bf3856ad364e35\Microsoft.PointOfService.ControlBase.dll'
'foo.vshost.exe' (Managed): Loaded 'C:\Program Files (x86)\Microsoft Point Of Service\SDK\Samples\Example Service Objects\Microsoft.PointOfService.ExampleServiceObjects.dll'

更新2

我通过卸载之前安装的程序发布版本(来自VS部署项目的msi安装程序)复现了使用遗留.suo出现的问题。似乎在使用旧版.suo进行构建时,会捕获安装程序创建的对HHOS4NET.DLL的注册表引用,而不是新鲜构建。有任何想法从哪里寻找罪魁祸首吗?

更新3

似乎工作应用程序的卸载是一个红色干鱼。它擦除了扫描仪驱动程序依赖的Configuration.xml文件,以查看扫描仪(PnP?没错)。这仍然让我拥有一个神秘的魔术.suo。我尝试使用简单的C#控制台应用程序枚举连接的POS设备,但这并没有起作用,所以MS的POSfor.NET框架或Honeywell的驱动程序肯定出了问题。他们确实很烂。

值得记录的是,“好”的.suo中没有特殊的调试设置。我从中提取了字符串,但没有什么特别的地方。接下来,我将尝试将其放入控制台应用程序中,以查看它是否在不相关的解决方案中保留其神奇属性。


也许有一个特殊的调试命令行参数? 这些保存在 .suo 文件中。 - Cameron
在项目的调试选项卡中是否有默认的命令行参数或工作目录设置? - Rowland Shaw
在“项目属性->调试”下有任何自定义设置吗?也许是时候使用Sysinternals的Process Monitor了。 - Cameron
一些提取/查看suo文件内容的方法:https://dev59.com/VnVD5IYBdhLWcg3wNIvc - Justin Killen
你能否尝试在 app.config 中使用某种汇编重定向来强制评估这些程序集?或者改为在 app.config 中进行引用包含? - Mark S
显示剩余3条评论
1个回答

0

检查SUO是否针对特定的位数。有时需要明确指出。根据您的输出,当它无法加载时,问题就开始了。

Program Files (x86)\Honeywell\UPOS Suite\POS4NET Suite\POS for NET\bin\HHSO4NET.dll

错误的位数可能会搞乱加载路径和名称解析。您在魔术 SUO 中定义了其他路径吗?我可以拿一份副本来分析吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接