1

最近、VB.NETソリューションをVS2005からVS2010にアップコンバートしているときに、やや厄介な動作に遭遇しました。参考までに、ソリューションは.NET 2.0を対象としており、変換前にデバッガーでエラーなしで実行されていました。IDEの変更に加えて、企業はデバイスをWin XP(x86)からWin 7(x64)に更新するのに適していると考えています。

ソリューションをVS2010に変換したので、デバッガーがロードされるとすぐにソケット例外を受け取ります(詳細は以下を参照)。これはデバッガーでのみ発生します。リリース構成でソリューションを構築すると、エラーなしで正しくインストールおよび実行される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: 

本当に紛らわしいのは、この例外が私のコードの1行が実行される前に生成されることです。MainメソッドはVB.NET(マネージコード)を介して生成され、ブレークポイントを設定したり、エラーをトラップしたり(カーネル/アプリケーションのコンテキストの切り替えが原因で)、シンボリックにデバッグしたりすることはできません。

これに対する可能な修正は、別の.NET Frameworkバージョンをターゲットにすることですが、なぜこれが発生するのかを理解することに本当に興味があります。このようなエラーがデバッガーでのみ発生し、リリースされたコードでは発生しない理由を理解できません。そして、はい、私はマシンを再起動して、まだリッスンしている残りのソケットがないことを確認しようとしました。これにより、バインディングが失敗します。

よろしくお願いします。

4

1 に答える 1

1

多くの作業と創造的な悪口の山盛りの支援の後、私は問題を解決することができました. この問題は、ネットワーク上の場所からコードを実行することに関係していたことが判明しました。当社は、疑似ネットワーク ドライブにすべてのコードを格納する ClearCase に移行しています。結局のところ、.NET 4 では、デフォルトで「リモート」ホスト上のアセンブリをターゲットにする機能が削除されました。私のコードは M: ドライブにあるように見えたので、ランタイムが特定のアセンブリの読み込みを拒否していたと推測されます。

これを修正するために、次のタグを app.config に追加しました。

<runtime>
  <loadFromRemoteSources enabled="true"/>
</runtime>

これで問題が解決したようです。ただし、仮想ネットワークを介してアセンブリを解決した結果、その特定のエラー メッセージがどのように生成されたかを誰かが知っている場合は、ぜひ聞いてください。また、インターネットを信じるなら、このセキュリティ対策は .NET 4 で導入されましたが、フレームワーク 2.0 を明示的に対象としていたにもかかわらず、依然として問題が発生していました。

うまくいけば、これにより誰かがかなりの時間を節約できます。そして、あなたの文学的な喜びのために、いくつかの補足資料を読んでください:

http://through-the-interface.typepad.com/through_the_interface/2011/07/loading-blocked-and-network-hosted-assemblies-with-net-4.html

ファイルまたはアセンブリを読み込めませんでした HRESULT: 0x80131515 (ネットワーク ドライブにアセンブリ参照がある MVC プロジェクトにコントローラーを追加する場合)

于 2012-09-11T22:50:46.037 に答える