0

StackOverflowExceptionへの既存のフォーラム参照は有益ではありますが、私が遭遇している現在のシナリオに正確には関連していないため、この質問を投稿しています。

最近 MSI を作成し、会社の Citrix サーバー ファームにインストールした雇用主向けのアプリケーションを開発しています。Citrix Workspace 経由でアプリケーションを起動すると、正常に起動しました。しかし、特定のボタンをクリックしてアプリケーションの Windows フォームの 1 つをインスタンス化すると、StackOverflowExceptionが発生しました。私の開発マシンではStackOverFlowExceptionがスローされていなかったので、これは驚きでした。私はこのアプリケーションを 1 年以上開発してきました。

当社の Citrix サーバー ファームには 3 台のサーバーがあります。StackOverFlowExceptionはそのうちの2 つで発生しますが、3 番目では発生しません。各サーバーにログインし、コンパイルされたアプリケーションを直接実行して、これを確認しました。

エラーのデバッグは Citrix サーバーではオプションではないため、アプリケーション コードにダイアログ ウィンドウを追加し、修正した実行可能ファイルを作成して、問題の Citrix サーバーで使用しました。

そのアプローチを使用して、例外がスローされたステートメントを特定することができました。フォームのNewコンストラクターが呼び出された時点でスローされました。

新しいコンストラクタ - 矢印

そこで、コンストラクタのコードを見てみました。コードにさらにいくつかのダイアログ ボックスを配置してアプリケーションを再実行すると、 InitializeComponentの呼び出し中に例外が発生したことがわかりました。

新しいコンストラクター - InitializeComponent 呼び出し

問題の Windows フォームは、いくつかの TabControls、TreeViews、および複数の SplitContainers (ネストされているものもあります) を含む多数のコントロールを備えた非常に大きなフォームです。

当然のことながら、InitializeComponent は非常に大きなルーチンです。このスレッドに投稿するには大きすぎます。そうでなければ、私はそうしたでしょう。

NewコンストラクターまたはInitializeComponent内に再帰が見られません。さらに、ここで困惑しているのは、SystemStackOverFlowExceptionが 3 台のサーバーのうち 2 台で発生し、3 台​​目のサーバーでは発生していない理由です。

誰かが何かアイデアを持っているなら、私はそれらを聞きたい. もちろん、どんな提案や洞察も大歓迎です。

私の開発マシンは、Windows 10 で VS2017 (.Net Framework 4.8.1) を使用しています。

サーバー ファーム内の 3 台の Citrix サーバーはすべて Windows 2008 Server R2 上にあります。それらはすべて .NET Frameworks 4.8.1 がインストールされています。

4

0 に答える 0