0

背景情報

VS2010 を使用して C# で Winforms アプリケーションを維持しています。メイン フォームには、いくつかのタブを持つ TabControl があります。スタートアップ オブジェクトは、メイン フォームを起動するだけの Main 関数 (ここでは新しいものはありません) を持つクラスです。このフォームは、静的設定クラスから DB サーバーへの接続文字列を取得する Datastore オブジェクトを作成します。このクラスには静的初期化ブロックがあります。

static Settings()
    {
        IniReader reader = new IniReader("config.ini");
        //...
    }

構成ファイルは、メイン プロジェクト フォルダー (スタートアップ オブジェクトと同じ) (および bin フォルダーと debug フォルダー) にあります。

問題

ソリューション エクスプローラーで、メイン フォームをダブルクリックしてデザイナーで開くと、VS がクラッシュし、この質問のタイトルに記載されている例外が発生しますが、config.ini ファイルが " C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE". この問題は、構成ファイルをその場所にコピーすることで解決できますが、これが実際の解決策であるとは思いません。 VS がその場所でファイルを検索するのはなぜですか? 奇妙なことに、前回ソリューションを開いたときには、この問題は発生していませんでした。それ以来、新しい Windows 更新プログラムをインストールしていません。

述べる

アプリケーションのアーキテクチャやその他の設計上の決定は、私のものではありません。私はプログラムを拡張しているだけで、これを行っている間、アーキテクチャを改善しようとしています。しかし、それはこの質問の主題ではありません。

4

1 に答える 1

0

VSデザイナが表示しようとしているフォームのインスタンスを作成することはすでに理解していると思います。つまり、コンストラクタと静的コンストラクタを呼び出します。

この種の問題を回避するために私が見た最も一般的なパターンは、重要な初期化ロジックを別の初期化メソッドに移動することです。そこでは、コンストラクター以外のメソッドで、...を使用できます。

if (!DesignMode)
{
    //your code here
}

...フォームがデザイナで正しくレンダリングされるために実際には必要のないコードの周り。これはコードのリファクタリングを意味し、それを望まないかもしれませんが、私はこのアプローチを使用しており、この種の問題をうまく回避しています。

于 2012-05-04T12:11:55.367 に答える