2011-03-23 8 views
6

समस्या: जब मूल श्रेणी किसी अन्य असेंबली से इंटरफेस को कार्यान्वित कर रही है तो विंडोज फॉर्म डिज़ाइनर विरासत में उपयोगकर्ता नियंत्रण के लिए काम नहीं करता है।वीएस -2010: विरासत में उपयोगकर्ता नियंत्रण के साथ काम करते समय विंडोज फॉर्म डिज़ाइनर समस्याओं से कैसे बचें?

प्लेटफार्म: VS 2010 SP1, .NET 4.0 फ़्रेमवर्क

त्रुटि:

MyInterfaceLib:

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

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 वर्ग पुस्तकालय परियोजनाओं के साथ एक समाधान है MyBaseControlLib:

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

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

     public void Foo() 
     { 
     } 
    } 
} 

MyDerivedLib:

namespace MyDerivedControlLib 
{ 
    using MyBaseControlLib; 

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

हालांकि डिजाइनर MyBaseControl लिए काम करता है यह myControl के लिए काम नहीं करता। यदि MyBaseControl IMyInterface को लागू नहीं करता है, तो डिज़ाइनर MyControl के लिए भी काम करता है।

कोई विचार?

धन्यवाद, रॉबर्ट

+0

में यह करने के लिए कुंजी "आधार वर्ग 'MyBaseControlLib.MyBaseControl' लोड नहीं किया जा सका। सुनिश्चित विधानसभा संदर्भित किया गया है और सभी परियोजनाओं का निर्माण किया गया है।" है नहीं ..? –

+0

मेरे (सीमित) अनुभव में, वीएस में उपयोगकर्ता नियंत्रण और कस्टम नियंत्रणों के साथ बहुत सी समस्याएं हैं जो उसी समाधान में रहते हैं जहां आप उनका उपभोग कर रहे हैं। जब मैं अपनी "सुविधा महत्वाकांक्षा स्तर" को कम करता हूं और इसे स्वीकार करता हूं, तो नियंत्रणों के लिए एक अलग समाधान बनाते समय मुझे हमेशा बहुत कम समस्याएं होती हैं। फिर मैं अन्य परियोजनाओं से डीएलएल का संदर्भ देता हूं और अगर मैंने नियंत्रण को संशोधित किया है तो "बिल्ड" के बजाय "पुनर्निर्मित" का उपयोग करें। –

उत्तर

2

हम एक ही मुद्दा था। हमने MyControlDesign क्लास बनाकर वर्कअराउंड का उपयोग किया जो MyControl क्लास द्वारा विरासत में मिला है।

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

public partial class MyControlDesign : MyBaseControl 
{ 
    public MyControlDesign():base() 
    { 
    } 
} 
संबंधित मुद्दे