【问题标题】:C# "Failed to parse method 'InitializeComponent'. The parser reported the following error 'Invalid symbol kind: NamedType'"C#“无法解析方法'InitializeComponent'。解析器报告以下错误'无效符号种类:NamedType'”
【发布时间】:2019-01-13 13:18:15
【问题描述】:

我有一个由其他人使用 .NET 框架 4 编写的项目 我对其中一种形式有疑问(其他形式正确打开)。

当我尝试在“设计模式”下​​打开 Form1 时,Visual Studio 2017 显示错误屏幕并返回 “无法解析方法‘InitializeComponent’。解析器报告了以下错误‘无效的符号种类:NamedType’。请查看任务列表中的潜在错误。”

使用调用堆栈

在 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomParser.OnMethodPopulateStatements(对象发件人,EventArgs e) 在 System.CodeDom.CodeMemberMethod.get_Statements() 在 System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager 管理器,CodeTypeDeclaration 声明) 在 System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager 管理器) 在 Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager 序列化管理器) 在 System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost 主机)

【问题讨论】:

  • 贴出相关代码
  • 显示类代码或使其更清晰。
  • 尝试打开Form1.designer.cs文件,看看是否有编译错误。一定有一些 Visual Studio 设计者不喜欢的更改或线路。
  • 您需要打开设计器文件并手动修复它。如果没有看到问题代码,我们无法推荐修复。
  • 对不起...我是新来的...如何在这篇文章中添加代码? (Form1.cs 超过 12000 行,Form1.resx 超过 7200 行)

标签: c# designer


【解决方案1】:

确保引用了正确的系统命名空间。

在我的情况下,我的项目中有一个 System 文件夹(因此 project.system 命名空间),它混淆了命名空间并导致这些错误,因为 InitializeComponent() 中的系统引用失败。

【讨论】:

    【解决方案2】:

    转到 InitializeComponent() 函数并搜索 nameof()。如果找到,只需将值部分替换为准确值。

    在我的情况下是

    this.Text = nameof (Form1);
    

    改为:

    this.Text = "Page1";
    

    【讨论】:

      【解决方案3】:
      1. 这也可能是由于缺少未引用程序集中引用的类型
      2. 程序集损坏(所指程序集的错误签名或公钥令牌不匹配)。这主要是由于版本不匹配(强命名程序集)或程序集补丁造成的。

      请检查程序集、清理、重建并查看此错误是否仍然出现。也许重新启动 Visual Studio。

      干杯

      【讨论】:

        【解决方案4】:

        为了补充知识,我遇到了同样的错误。我的情况是我正在升级由 JetBrains dotPeek 创建的解决方案。其解决方案版本为 10.0 (VS2008) 并为 VS2017 转换为 15.0 (VS2015),是一个 .NET 3.5 目标类库。打开表单后(在没有设计器文件的旧样式中)打开设计器时总是抛出错误(但运行类库很好)。仔细查看 InitializeComponent 的每一行,我发现了一个“this.Name = nameof(formname)”。查看另一个有效的表单,我看到了“this.Name = "formname"”。一旦我把线改成另一种方法,设计师就完美地打开了!

        【讨论】:

        • 对我有用,但除此之外,我还看到其他问题,resx 文件附加到表单,仍未解决。
        • 为我工作! tx 以节省我的时间来逆向工程丢失源的旧项目并使用 JetBrains dotPeek 重新创建它!因为这是一个非常简单的项目,所以我似乎对 resx 文件没有任何问题(参见 Ifink)
        • 您可能需要从项目中卸载您的form.cs 文件,然后添加 -> 现有项目 -> yourFormName.cs 以便它看起来正确
        猜你喜欢
        • 2016-08-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-17
        • 2016-12-31
        相关资源
        最近更新 更多