代码之家  ›  专栏  ›  技术社区  ›  BlueRaja - Danny Pflughoeft

疯狂vs设计师错误

  •  3
  • BlueRaja - Danny Pflughoeft  · 技术社区  · 15 年前

    这里有一个奇怪的。

    在重命名一个类之后,我的一个表单开始在设计器中给我错误,拒绝打开。有趣的是,当我运行这个程序时,表单运行得很好。

    我开始还原我的更改以推断问题。我现在完全回到了上次的承诺 知道 表单在设计器中工作-清理了解决方案,并删除了bin/和obj/文件夹以及*.suo文件以获得良好的度量。

    窗体仍不在设计器中显示。


    下面是它给出的错误:

    1. 找不到“mynamespace.mycontrol”。请确保引用了包含此类型的程序集。如果此类型是开发项目的一部分,请确保已成功生成该项目。
    2. 变量“mycontrol1”未声明或从未分配。

    变量既被声明又被分配,mycontrol构建得很好(同样,当程序实际运行时,窗体工作得很好)。更奇怪的是,如果我试图创建一个新表单并将mycontrol拖到上面,就会出现以下实体框架错误:

    未能创建组件“mycontrol”。错误消息如下: 'System.ArgumentException:指定的命名连接在配置中找不到,不打算与EntityClient提供程序一起使用,或者无效。 在system.data.entityclient.entityconnection.changeconnectionstring(字符串newconnectionstring) 在system.data.entityclient.entityconnection..ctor(字符串连接字符串) 在system.data.objects.objectcontect.createEntityConnection(字符串连接字符串) 等。

    我的连接字符串没有什么问题:它以前工作过,而且,再一次, 当我真正运行这个程序的时候 (该控件已存在于以前提交的旧窗体上)。


    任何想法 不管怎样?我完全不知所措。


    [编辑] 唯一有意义的代码:

    MyControl.cs
    public MyControl()
    {
        _entities = new MyEFEntities(); //Entity-framework generated class
    }
    
    MyForm.Designer.cs
    private void InitializeComponent()
    {
        this.myControl1 = new MyNamespace.MyControl();
        ...
        this.Controls.Add(this.myControl1);
    }
    
    MyEFDatabase.Designer.cs
    public MyEFEntities() : base("name=MyEFEntities", "MyEFEntities") { ... }
    
    App.Config
    <connectionStrings>
        <add name="MyEFEntities" connectionString="metadata=res://*/MyEFDatabase.csdl|res://*/MyEFDatabase.ssdl|res://*/MyEFDatabase.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=MyDatabaseServer;Initial Catalog=MyDatabase;Integrated Security=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />
    </connectionStrings>
    

    我试过 “替代” &quot; 具有 ' 诡计-没用。


    [编辑2] 它也发生在新项目上,但不是立即发生的。只是在摆弄了一点之后(这和EF自己没有发现的多对一关系有关系),但我无法确定具体的复制步骤。

    5 回复  |  直到 14 年前
        1
  •  2
  •   Rowland Shaw    15 年前

    我建议关闭在设计模式下打开的所有窗体;重新生成所有窗体,然后在重新打开窗体设计器时查看它们是否工作——我以前遇到过这样的问题,即它无法生成控件库,因为它被(窗体设计器)锁定在内存中。

        2
  •  0
  •   IniTech    15 年前

    是否尝试删除designer.cs文件,然后右键单击aspx页面并选择“转换为Web应用程序?”它重新生成设计器文件,通常在我遇到奇怪的设计器问题时为我工作。

        3
  •  0
  •   Big Endian    15 年前

    你有没有试过把这张违规表格从项目中排除/包括进来?这在过去对我很有用。

        4
  •  0
  •   Simon    15 年前

    自从更改了类的名称之后,您是否成功地构建了项目?设计器只能从生成的程序集加载组件。

    编辑:另一个要检查的是.resx文件的大小。我有时发现我的已经被截断了,我必须删除它或从源代码管理中还原它。

        5
  •  0
  •   BlueRaja - Danny Pflughoeft    14 年前

    我已经发布了一个错误报告和一个解决方案, here .

    唯一的解决方法是在表单中创建ef_实体,并将其作为参数传递给控件。

    如果参数是控件的父级成员(即myChildControl:myParentControl、myParentControl:UserControl、myParentControl的EF实体参数成员),则此解决方法不再有效。设计器崩溃,错误为“对象引用未设置为对象的实例”;进一步的检查表明,设计器正在运行需要ef实体参数的代码,由于某种原因,该参数设置为空(它在窗体的构造函数中设置正确,并且在实际运行)。

    解决方法 问题是阻止所有需要使用ef实体参数的代码在设计器中运行(请参阅解决方法 here )