我最近在将 VB.NET 解决方案从 VS2005 升级到 VS2010 时遇到了一些相当令人费解的行为。作为参考,该解决方案以 .NET 2.0 为目标,并且在转换之前在调试器中运行没有错误。除了 IDE 更改之外,公司还认为将我的设备从 Win XP (x86) 刷新到 Win 7 (x64) 是合适的。
现在我已经将解决方案转换为 VS2010,一旦调试器加载,我就会收到一个 Socket 异常(详情如下)。这只发生在调试器中。在其发布配置中构建解决方案会生成一个正确安装和运行且无错误的 MSI。
收到的异常详情如下:
System.Net.Sockets.SocketException was unhandled
Message=An invalid argument was supplied
Source=System
ErrorCode=10022
NativeErrorCode=10022
StackTrace:
at System.Net.Sockets.Socket..ctor(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType)
at System.Net.Sockets.TcpListener..ctor(IPAddress localaddr, Int32 port)
at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel.SetupChannel()
at System.Runtime.Remoting.Channels.Tcp.TcpServerChannel..ctor(IDictionary properties, IServerChannelSinkProvider sinkProvider, IAuthorizeRemotingConnection authorizeCallback)
at System.Runtime.Remoting.Channels.Tcp.TcpChannel..ctor(IDictionary properties, IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider)
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.RegisterChannel(Boolean SecureChannel)
at Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run(String[] commandLine)
at FSASYSTEM.My.MyApplication.Main(String[] Args) in 17d14f5c-a337-4978-8281-53493378c1071.vb:line 81
at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
真正令人困惑的部分是,这个异常是在我的单行代码执行之前生成的。Main 方法是通过 VB.NET(托管代码)生成的,我无法对其进行断点,在其中捕获错误(据我了解,由于内核/应用程序上下文切换),也无法对其进行符号调试。
一个可能的解决方法是针对另一个 .NET 框架版本,但是我真的很想了解为什么会发生这种情况。我不明白为什么这样的错误只会出现在调试器中而不是发布的代码中。而且,是的,我已经尝试重新启动机器以确保没有任何剩余的套接字仍在侦听,从而导致绑定失败。
提前感谢您的时间和帮助。