Visual Studio SUO 文件破解应用程序

Posted

技术标签:

【中文标题】Visual Studio SUO 文件破解应用程序【英文标题】:Visual Studio SUO file breaking application 【发布时间】:2014-06-19 09:54:12 【问题描述】:

我正在清理 C# Visual Studio 2008 解决方案,但遇到了障碍。我正在尝试删除不必要的文件,以准备将代码置于适当的修订控制之下。在此过程中,我删除了现有的 .suo 文件和所有二进制工件以重新开始。当我这样做时,我的程序无法通过Microsoft.PointOfService 库访问连接的条形码扫描仪。我已将问题缩小到 .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 的问题。当使用 legacy.suo 而不是新的构建完成时,似乎会拾取对安装程序创建的 HHOS4NET.DLL 的注册表引用。有什么想法可以在哪里寻找罪魁祸首?

更新 3

似乎卸载正在运行的应用程序有点像红鲱鱼。它清除了扫描仪驱动程序用来查看扫描仪的Configuration.xml 文件(即插即用?是的,对)。这仍然给我留下了一个神秘的魔法.suo。我尝试使用简单的 C# 控制台应用程序枚举连接的 POS 设备,但没有成功,因此 MS 的 POSfor.NET 框架或霍尼韦尔的驱动程序肯定有问题。它们确实是 POS。

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

【问题讨论】:

也许有一个特殊的调试命令行参数?这些都保存在 .suo 中。 项目的调试选项卡中是否设置了默认的命令行参数或工作目录? 项目属性 -> 调试下的任何自定义项?可能是时候打破 Sysinternals 的进程监视器了。 项目文件夹中是否有剩余的 bin 或 obj 文件夹?如果是这样,请删除它们和支持文件并重新加载所有内容。当我自己开发一些手持应用程序时,其他开发人员需要不时地这样做。另外,您将其保留在 vs2008 中是正确的。我问是因为微软在以后的版本中放弃了对紧凑框架的支持。 @dklingman。我清理了所有构建产品,包括以前存在的二进制文件。构建工作正常。只是正在运行的应用程序失败(很可能是由于卸载的 DLL)。这一切都在 vs2008 中。 【参考方案1】:

检查 SUO 是否针对特定位数。有时你必须明确。继续你的输出,当它加载失败时问题就开始了

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

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

【讨论】:

以上是关于Visual Studio SUO 文件破解应用程序的主要内容,如果未能解决你的问题,请参考以下文章

我应该将 Visual Studio .suo 和 .user 文件添加到源代码管理吗?

Microsoft Visual Studio正忙解决办法(VS卡死)(删除.suo文件重启VS)

Microsoft Visual Studio正忙解决办法(VS卡死)(删除.suo文件重启VS)

SVN 和 Visual Studio 数据库项目?

应将哪些 Visual Studio 2013 项目文件签入源代码管理?

visual studio 2015怎么破解