如何在同一解决方案中将自定义IDesigner移动到单独的程序集中?

时间:2012-09-04 09:09:59

标签: c# winforms windows-forms-designer

我创建了一个具有设计时支持的自定义用户控件,如下所示:

项目/装配“MyUserControl”

  • MyUserControl.cs
  • MyUserControlDesigner.cs

代码是这样的:

namespace MyUserControl
{
  [Designer("MyUserControl.Design.MyUserControlDesigner, MyUserControl", typeof(IDesigner))]
  public class MyUserControl : Control
  {
    // Some stuff here
  }
}

namespace MyUserControl.Design
{
  public class MyUserControlDesigner : ControlDesigner
  {
    // Some other stuff here
  }
}

只要这两个类在同一个程序集中,一切正常。 VS2012显示了我所有的设计师选项。但是由于显而易见的原因(参考System.Design和其他)我不想在我的MyUserControl程序集中使用设计器代码,而是在MyUserControl.Design中。所以我在同一个解决方案中创建了第二个项目:

项目/装配“MyUserControl”

  • MyUserControl.cs

项目/大会“MyUserControl.Design”

  • MyUserControlDesigner.cs

代码是这样的:

namespace MyUserControl
{
  [Designer("MyUserControl.Design.MyUserControlDesigner, MyUserControl.Design", typeof(IDesigner))]
  public class MyUserControl : Control
  {
    // Some stuff here
  }
}

使用它时,根本找不到设计师。 VS2012不会显示内联可选组件,而是显示没有附加设计器的组件。

我是否必须将我的设计器程序集添加到GAC才能让VS2012找到它或者这里有什么问题?

编辑:在向WindowsFormsApplication1添加对MyUserControl.Design的引用时,一切正常,但这正是您不想要的......

2 个答案:

答案 0 :(得分:0)

您需要将MyUserControlDesigner作为公共课程。

答案 1 :(得分:0)

我遇到了完全相同的问题。只有当我按照以下方式指定设计者类时,它才开始为我工作。

namespace MyUserControl
{
  [Designer("MyUserControl.Design.MyUserControlDesigner, MyUserControl.Design,  Version=1.0.0.0, Culture=neutral, PublicKeyToken=8bc98ae14acadc09", typeof(IDesigner))]
  public class MyUserControl : Control
  {
    // Some stuff here
  }
}