疯狂的VS设计师错误

时间:2010-03-16 17:25:08

标签: c# visual-studio-2008 entity-framework designer

这是一个奇怪的。

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

我开始恢复我的更改以推断出问题。我现在已经完全恢复到最后一次提交 - 我知道表单在设计器中工作 - 清理了解决方案,并删除了bin /和obj /文件夹,以及*。 suo文件很好的措施。

表单仍未在设计器中显示。


以下是它给出的错误:

  
      
  1. 找不到'MyNamespace.MyControl'。请确保引用包含此类型的程序集。如果此类型是开发项目的一部分,请确保已成功构建项目。
  2.   
  3. 变量'myControl1'未声明或从未分配。
  4.   

变量既被声明又被赋值,MyControl构建正常(同样,当程序实际运行时表单工作正常)。更奇怪的是,如果我尝试创建一个新表单并将MyControl拖到它上面,我会得到这个Entity-Framework错误:

  

无法创建组件'MyControl'。错误消息如下:   'System.ArgumentException:在配置中找不到指定的命名连接,不打算与EntityClient提供程序一起使用,或者无效。   在System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)   在System.Data.EntityClient.EntityConnection..ctor(String connectionString)   在System.Data.Objects.ObjectContect.CreateEntityConnection(String connectionString)   等等。

我的连接字符串没有任何问题:它之前有效,而且,当我实际运行程序时它的工作原理(该控件已存在于旧表单上的上一次提交中)。


任何想法无论如何?我完全不知所措。


[编辑] 唯一重要的代码:

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;替换为'技巧 - 没有帮助。


[Edit2] 新项目也在发生,但不会立即发生。只是在摆弄了一点之后(它与添加EF本身没有找到的多对一关系有关),但我无法弄清楚重现的确切步骤。

5 个答案:

答案 0 :(得分:2)

我建议关闭所有在设计模式下打开的表单;重建所有,然后看看当你重新打开表单设计器时它们是否有效 - 我在过去遇到过无法生成控件库的问题,因为它被锁定在内存中(由表单设计者)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您是否尝试从项目中排除/包含违规表格?这对我来说过去很有用。

答案 3 :(得分:0)

您是否已成功构建项目,因为您更改了类的名称?设计人员只能从构建的组件中加载组件。

编辑:要检查的另一件事是.resx文件的大小。我有时发现我的被截断了,我必须删除它或从源代码控制中恢复它。

答案 4 :(得分:0)

我发布了错误报告以及解决方法here

  

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

     

如果参数是控件父级的成员,则此解决方法不再有效。 MyChildControl:MyParentControl,MyParentControl:UserControl,MyParentControl的EF_EntitiesParameter成员。设计器崩溃时出现错误“对象引用未设置为对象的实例”;进一步检查显示设计器正在运行需要EF_EntitiesParameter的代码,由于某种原因,该代码被设置为null(它在表单的构造函数中正确设置,并且在实际运行时工作正常)。

     

问题的解决方法是阻止所有需要使用EF_EntitiesParameter的代码在设计器中运行(请参阅变通方法here