2

私は次のようなUserControlライブラリソリューションを持っています

UserControl---UserControlプロジェクト

  ---UserControl Test Project

テストプロジェクトでは、ユーザーコントロールをツールボックスに追加できます。ドラッグしてフォームにドロップすると失敗します。ログを記録すると、ユーザーコントロールが構成ファイルを読み取ることがわかりました。構成ファイルは常にコピーするようにマークされており、obj\debugおよびbin\debugディレクトリ/に存在します。

ただし、ユーザーコントロールをテストプロジェクトのフォームにドラッグすると、からファイルを取得しようとしています。

C:\ Documents and Settings \ jondoe \ Local Settings \ Application Data \ Microsoft \ VisualStudio \ 8.0 \ ProjectAssemblies \ vqjlihdl01

上記はこれの結果です

string pluginAssemblyPath = Assembly.GetExecutingAssembly().Location;
            DirectoryInfo dirInfo = new DirectoryInfo(pluginAssemblyPath);
            pluginAssemblyPath = pluginAssemblyPath.Replace(dirInfo.Name.ToString(),"");
            string configFilePath = pluginAssemblyPath + "FileConfig.xml";

デバッグモードでコンパイルする場合、ファイルはobj \ debugの下にあり、それがアセンブリパスであると想定していました。設定ファイルを正しい場所で見つけることができるように、正しく実行するために必要な設定は何ですか?

4

4 に答える 4

1

フォーム上の別のコントロールにコントロールがある場合 (たとえば)、DesignMode プロパティが信頼できないことがわかりました。デザイン サーフェイスに直接配置されたコントロールに対してのみ機能するようです。

于 2008-12-11T16:40:15.300 に答える
0

さまざまなプロジェクトでコントロールを使用する必要があるため、構成ファイルを使用してプロジェクトに基づいて設定を微調整しました。

同様の方法で作業を行った他のプロジェクトでは、この問題は発生しませんでした。常にobj\debugパスを使用してアセンブリ実行パスを構築しました

于 2008-12-11T16:31:53.087 に答える
0

設計時に構成ファイルが必要ですか? そうでない場合は、次のようにコードを変更して、設計時に実行されているかどうかをテストできます。

if (this.Site != null && this.Site.DesignMode)
{
    ... design time behavior
}
else
{
    ... runtime behavior (read config file)
}
于 2008-12-11T16:20:46.807 に答える
0

ユーザー コントロールは本当に構成ファイルを読み取る必要がありますか? ユーザー コントロールを別のプロジェクトにする主な利点の 1 つは、それを他の複数のプロジェクトで再利用できることです。ユーザー コントロールが構成ファイルを読み取る必要がある場合、その再利用はより困難で複雑になります (ご覧のとおり)。

コントロールを複数のプロジェクトで実際に使用する必要がない場合、現在の問題に対する最も迅速な解決策は、ユーザー コントロールをメイン プロジェクトに組み込むことです (つまり、別のプロジェクトとして保持しないでください)。

于 2008-12-11T16:21:52.513 に答える