自動生成されたアセンブリの1つがnew()でStackOverflowExceptionをスローしていることを発見しました。このクラスには、コンストラクターで初期化される400以上の単純なプロパティがあります(ほとんどの場合、デフォルト(文字列)など)。
64ビットでは問題ありませんが、32ビットでは問題ありません。
コードジェネレーターを再設計する際に余裕を持たせるために、ユースケースでより大きなデフォルトスタックを作成することが合理的かどうかをテストする必要があります。
私たちは特にそうします。可能であればapp.configを含むソリューションに興味があります。しかし、私は現実主義者なので、何でもいいでしょう。
スタックオーバーフローの理由。問題のコンストラクターを絞り込みました。私の第一印象も無限再帰のタイプでした。ただし、次の3行のコンソールアプリを使用してエラーを再現しました。
- クラスの空のインスタンスを作成します。
- 最初の仕事はインスタンスを作成して空にすることであるクラスで非静的メソッド(Clone)を呼び出し、プロパティをに渡します。
2番目のコンストラクターにヒットすると、バタンと鳴ります。
.netソースコードを使用してデバッグしているところ、スタックオーバーフローがGuid.NewGuid()にあり、これが2番目のパラメーターとしてコンストラクターに渡されていることがわかります。実際のコード行は、ネイティブCoCreateGuid()呼び出しの呼び出しです。
したがって、CoCreateGuid()のバグである可能性がありますが、コードを問題から排除したいと考えています。私の最初の考えは、スタックのサイズを大幅に増やして、このエラーが再発するかどうかを確認することです。次に、すべてのユースケースを制御できると思うので、コンストラクターをオブジェクトの初期化に置き換えます。これにより、スタックへのプレッシャーを軽減できると思います。
Nb。クラスからintプロパティだけを削除することで、エラーの発生を防ぐことができます。