VisualStudioに対する要望[VisualStudio][.NETFramework]
といってもオイラ自信の要望ではありません。
今一緒に働いている派遣の方がコレでなやんでらっしゃる。
VisualStudioのデザイナが動的プロパティを使用するクラスを継承したページを表示できない。
この場合の「ページ」は、
WindowsフォームでもWebフォームでどちらでも同じです。
たとえば次のようなクラスと、
"hoge"のキーワードで適当な値を登録した構成ファイル
(.configファイル)を作成します。
Formクラスを継承し、さらに動的プロパティを使用するクラス。
public class MyForm : Form { public static readonly string HOGE; static MyForm(){ AppSettingsReader reader = new AppSettingsReader(); HOGE = (string)reader.GetValue("hoge", typeof(string)); } }
さらに新規作成したWindowsフォームクラスのFormの継承宣言をMyFormを継承するように変更。
カスタムフォームを継承するフォーム(VisualStudio2005で作成)
public partial class Form1 : MyForm { public Form1() { InitializeComponent(); } }
そしてこのフォームをデザイナで開くと、以下のようなメッセージが出て開くことができません。
デザイナの読み込み時に 1 つ以上のエラーが発生しました。エラーは以下に一覧表示されます。コードの変更が必要なエラーもありますが、プロジェクトを再度ビルドすると解決できるエラーもあります。
ファイル内にデザインできるクラスがないため、このファイルのデザイナを表示できませんでした。ファイルの以下のクラスがデザイナで見つかりました: Form1 --- 基本クラス 'DynamicPropertySample.MyForm' を読み込めませんでした。アセンブリが参照されているか、およびすべてのプロジェクトがビルドされているかを確認してください。
非表示場所 System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
場所 System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
場所 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
場所 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)
VisualStudio2003で発覚した問題ですが、
2005でもやっぱり同じですね。
原因としては、デザイナモード時には
プロジェクトで使用する構成ファイルではなく
VisualStudioが開発環境自身の構成ファイルを参照するためです。
その証拠に、C:\Program Files\Microsoft Visual Studio 8\Common7\IDE\VCSExpress.exe.configファイルに、
<appSettings> <add key="hoge" value="moge"/> </appSettings>
とキーを追加するとちゃんと表示される。
まあこれじゃ何の解決にもならんけど。
ちなみに以上のことは僕ではなく、
派遣の方が全部調べたことです。
もっと突っ込んで調べた結果、
「やっぱり無理!」だそうな。
でも自分で作ったクラスを継承させても
デザイナで開きたいよなあ。
ちなみにカスタムフォームのインスタンス化のところで
Exceptionが発生するので、
カスタムフォームのコンストラクタをTryCatchで
くくっても一応表示されます。
やっぱり何の解決にもならないけど(笑)