【问题标题】:Crazy VS Designer Errors疯狂 VS 设计器错误
【发布时间】:2011-01-28 05:40:36
【问题描述】:

这是一个奇怪的。

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

我开始还原我的更改以推断问题。我现在已经完全恢复到上次提交 - 我知道表单在设计器中工作 - 清理了解决方案,并删除了 bin/ 和 obj/ 文件夹,以及 *. suo 文件以备不时之需。

表单仍然没有显示在设计器中。


这是它给出的错误:

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

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

未能创建组件“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>

我尝试了 “用 ' 替换 &amp;quot; 技巧 - 没有帮助。


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

【问题讨论】:

  • 通常发生这种情况时,我只需重新启动 VS,错误就会消失
  • 不走运 - 刚刚完成重新启动我的计算机,但它仍在发生。
  • mmmm 我的下一个猜测 =P.... 命名空间好吗?
  • @Luiscencio:是的,一切都在同一个命名空间下。我只是尝试检查一个新副本;仍在发生。
  • 你能发布你的设计器代码和 MyControl 类...链接最好

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


【解决方案1】:

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

【讨论】:

  • 这是一个winforms应用程序,我非常怀疑它是生成代码的问题;它只是一个带有控件的窗口,所以我上面列出的代码实际上就是所有相关代码。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      自从更改班级名称后,您是否成功构建了项目?设计者只能从已构建的程序集中加载组件。

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

      【讨论】:

      • 是的,但是我把名字改回来了;再次,我将所有代码恢复为原始形式。
      • 是的,我已经清理和建造了很多次。我还删除了 bin/ 和 obj/ 文件夹,以及 *.suo 文件。
      【解决方案5】:

      我已经发布了一个错误报告以及解决方法,here

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 2012-05-03
        • 1970-01-01
        • 1970-01-01
        • 2010-12-12
        相关资源
        最近更新 更多