无法为此文件显示设计器,因为其中的所有类都无法设计

时间:2011-07-13 17:48:31

标签: c# visual-studio-2010 windows-services

我们有以下共享组件:

public class OurServiceBase : System.ServiceProcess.ServiceBase

此类具有我们在所有下游服务中所需的功能,例如标准化执行计划和日志记录功能。

在新项目中,我添加以下内容:

public class MyService : System.ServiceProcess.ServiceBase

在Windows Designer中,该类正确显示。

当我将服务更改为从OurServiceBase

派生时
public class MyService : OurSharedLibrary.OurServiceBase

设计师停止工作:

Error screenshot

完整的错误是: 无法为此文件显示设计器,因为其中的所有类都无法设计。设计者检查了文件中的以下类:EmailProcessor ---无法加载基类“OurSharedLibrary.CienaServiceBase”。确保已引用程序集并且已构建所有项目。

引用正确的程序集,项目构建。我不明白为什么设计师会对此进行讨论,因为我的服务最终来自可设计的课程。

欢迎任何建议。

更多信息 - 设计者在呈现无法设计派生服务的错误时调用堆栈:

at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.EnsureDocument(IDesignerSerializationManager manager)
at System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
at Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
at System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host) 

2011年7月19日下午2:34 EDT新发现。

类“OurServiceBase”存在于一个单独的项目中(通常仅作为DLL引用)。一时兴起,我将基类文件复制到我的项目中,构建并打开设计器。有效!当我再次删除基类文件并返回到外部DLL引用时,设计师再次破坏。

13 个答案:

答案 0 :(得分:59)

您也可以尝试这样做:

  • 关闭所有UI设计页面
  • 清洁解决方案
  • 构建解决方案
  • 打开所需的UI设计页面

这可能会有所帮助,也可能没有帮助,但它确实在我的项目中解决了同样的问题。

答案 1 :(得分:6)

您最好的选择是从没有功能的OurServiceBase版本开始,看看您是否可以设计MyService。如果是这样,那么慢慢添加功能直到它中断。

因为看起来Visual Studio在序列化OurServiceBase的其中一个成员时遇到问题。

答案 2 :(得分:4)

以防万一像我这样的人必须在Visual Studio 2008上的旧项目上工作并面临同样的问题。

这可能是因为项目路径包含一些奇特的字符,如C#

示例,我的路径看起来像这样:

C:\项目\ C#\项目名称...

将其重命名为

C:\项目\ CSHARP \项目名称...

Visual Studio现在能够识别父类,然后使用继承的表单打开表单。

答案 3 :(得分:2)

如果您的控件/服务继承自泛型类,也可能会遇到此问题。设计师与层次结构中的抽象类不相处,因为它必须实例化它们。

答案 4 :(得分:1)

我有一个包含2个项目的解决方案(一个引用另一个项目),我刚刚设置了一个目标.Net 4.5.2,另一个目标是4.5。

提示:查看错误列表中的警告消息:

  

正在构建“MSIL”的项目的处理器体系结构与参考“C:.... dll”,“x86”的处理器体系结构之间存在不匹配。这种不匹配可能会导致运行时故障。请考虑通过Configuration Manager更改项目的目标处理器体系结构,以便在项目和引用之间调整处理器体系结构,或者使用与项目的目标处理器体系结构相匹配的处理器体系结构依赖于引用。

答案 5 :(得分:1)

我在多个项目的解决方案中遇到了这个问题。我查看了所有项目的编译选项卡,目标 CPU。一个项目设置为 x64,其余项目均为 AnyCPU。我制作了所有项目 Target CPU = AnyCPU、Cleaned Solution 和 Rebuilt Solution。然后我可以在设计器模式下查看表单。

答案 6 :(得分:0)

这是另一种可能的解决方案:

在正在构建的项目属性下,我的平台目标设置为x64。我将其更新为“ Any CPU”,重新构建了项目,设计人员很好地打开了。

这可以更好地说明: Visual studio designer in x64 doesn't work

答案 7 :(得分:0)

我刚刚关闭了所有UI页面并清理了解决方案,然后重新构建它,使其开始工作。

答案 8 :(得分:0)

 form1.designer.cs // was showing this
           this.Components = new System.ComponentModel.Container();
           this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
   `enter code here`        this.ClientSize = new System.Drawing.Size(800, 450);
            this.Text = "form1";
  //  I had to add this to the code to get it to work
   this.Name = "form1";
   this.ResumeLayout(false);
   this.PerformLayout();

答案 9 :(得分:0)

进一步回答Ausibanez的问题。

我的应用程序在X64中,但是我的问题是我最近向WIA(Windows图像采集)添加了COM引用。

但是奇怪的是...

  1. 它工作了一段时间后才决定不再工作,并且
  2. 未以特定的继承形式或其特定形式调用WIA 基地。

但是,一旦删除了对WIA的引用,一切都可以了。

因此,请检查您的COM参考!

答案 10 :(得分:0)

  1. 在字段中转到项目>> 属性>> 链接器>> 系统在“ 子系统”中选择“ Windows( / SUBSYSTEM:WINDOWS )”,然后单击“应用”。

  2. 在字段中转到项目>> 属性>> 链接器>> 高级入口点”,输入值“ Main ”并应用,最后单击确定。

  3. 转到您创建的表单的文件代码(例如: MyForm.cpp ),然后在此文件中输入代码:

using namespace System;

using namespace System::Windows::Forms;

[STAThreadAttribute]

void Main(array<String^>^ args)

{

Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); Project1::MyForm form; Application::Run(%form);

}

  1. 保存重建

答案 11 :(得分:0)

  1. 打开“ Designer.cs”文件
  2. 剪切所有代码并保存文件
  3. 粘贴所有代码并保存文件
  4. 重新打开表单/重新启动项目/重新启动Visual Studio(以任何可行的方式)

这可以解决问题

答案 12 :(得分:0)

如果您的表单在共享项目中,您也可能出现此错误。解决方法是从共享项目中排除该文件,然后在主项目中创建指向该文件的链接。