2011-03-23 19 views
6

問題:基本クラスが別のアセンブリからインターフェイスを実装しているときに、継承されたユーザーコントロールでWindowsフォームデザイナーが機能しません。VS2010:継承されたユーザーコントロールで作業するときにWindowsフォームデザイナの問題を回避するにはどうすればよいですか?

プラットフォーム:VS 2010 SP1、.NET 4.0 Frameworkの

エラー:

The designer could not be shown for this file because none of the classes within it can be designed. The designer inspected the following classes in the file: MyControl --- The base class 'MyBaseControlLib.MyBaseControl' could not be loaded. Ensure the assembly has been referenced and that all projects have been built.

at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager) at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager) at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager) at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.DeferredLoadHandler.Microsoft.VisualStudio.TextManager.Interop.IVsTextBufferDataEvents.OnLoadCompleted(Int32 fReload)

私は3クラスライブラリプロジェクトとソリューションを持っている:

MyInterfaceLib:

namespace MyInterfaceLib 
{ 
    public interface IMyInterface 
    { 
     void Foo(); 
    } 
} 

MyBaseControlLib:

namespace MyBaseControlLib 
{ 
    using System.Windows.Forms; 
    using MyInterfaceLib; 

    public partial class MyBaseControl : UserControl, IMyInterface 
    { 
     public MyBaseControl() 
     { 
      InitializeComponent(); 
     } 

     public void Foo() 
     { 
     } 
    } 
} 

MyDerivedLib:設計者はMyBaseControlのために働く

namespace MyDerivedControlLib 
{ 
    using MyBaseControlLib; 

    public partial class MyControl : MyBaseControl 
    { 
     public MyControl() 
     { 
      InitializeComponent(); 
     } 
    } 
} 

が、それはMyControlとでは動作しません。 MyBaseControlがIMyInterfaceを実装していない場合、デザイナーはMyControlでも動作します。

アイデア?

おかげで、 ロバート

+0

で、このための鍵「ベースクラスは、 『MyBaseControlLib.MyBaseControl』をロードできませんでした。アセンブリが参照されたし、すべてのプロジェクトが構築されていることを確認してください。」ではありませんか..? –

+0

私の(限られた)経験では、VSはユーザーコントロールと、ユーザーが使用しているのと同じソリューションに存在するカスタムコントロールに多くの問題があります。私は私の「利便性の野望レベル」を下げてこれを受け入れ、コントロールのための別個のソリューションを作成すると、ずっとずっと問題を少なくしてきました。その後、私は他のプロジェクトからDLLを参照し、コントロール自体を変更した場合は "ビルド"ではなく "再構築"を使用します。 –

答えて

2

は、我々は同じ問題を持っていました。 MyControlクラスによって継承されたMyControlDesignクラスを作成してワークアラウンドを使用しました。

public partial class MyControl : MyControlDesign { 
    public MyControl() 
    { 
     InitializeComponent(); 
    } 
} 

public partial class MyControlDesign : MyBaseControl 
{ 
    public MyControlDesign():base() 
    { 
    } 
} 
関連する問題