VS 2008 设计器失败:HRESULT E_FAIL 已从对 COM 组件的调用返回

VS 2008 designer failure: HRESULT E_FAIL has been returned from a call to a COM component

我正在使用带有一些更新的 VS 2008 SP1,在 C++/CLI 和 Winforms 中进行软件开发。我有一个 winforms 项目,设计师在打开时显示失败:

HRESULT E_FAIL has been returned from a call to a COM component

bei EnvDTE.CodeFunction.get_FunctionKind()
bei Microsoft.VisualC.CppCodeParser.OnTypePopulateMembers(Object sender, EventArgs e)
bei System.CodeDom.CodeTypeDeclaration.get_Members()
bei System.ComponentModel.Design.Serialization.TypeCodeDomSerializer.Deserialize(IDesignerSerializationManager manager, CodeTypeDeclaration declaration)
bei System.ComponentModel.Design.Serialization.CodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager manager)
bei Microsoft.VisualStudio.Design.Serialization.CodeDom.VSCodeDomDesignerLoader.PerformLoad(IDesignerSerializationManager serializationManager)
bei System.ComponentModel.Design.Serialization.BasicDesignerLoader.BeginLoad(IDesignerLoaderHost host)

然后我可以单击 "ignore" 并查看我的整个 winforms,正确显示。但我不想总是忽略,因为它 1) 烦人,以及 2) 我也会忽略真正的失败,导致设计期间表单损坏(之前有过几次,浪费了数小时的开发时间)。 ..

同一解决方案中的另一个 winforms 项目没有设计器问题。

到目前为止我尝试过的:

解决了”问题:

任何其他想法,我怎样才能消除那个失败?它显然在 VS 中,因为我可以编译并 运行 没有错误,甚至如上所述在另一个 VS 上查看表单。
但是我想保留我原来的VS解决方案而不是打开另一个。

我找到了问题的解决方案:

我有 2 个相关项目,其中一堆功能 100% 相同。在每个项目中,函数都属于主窗体 frmMain,因为窗体部分包含相同的控件。

我不喜欢复制和粘贴,但由于上述原因我无法将它们移动到 dll/assembly,所以我将这些功能外包到一个文件 frmMain.cpp.h,我将其包含在两个项目 frmMain.cpp

proj_1\frmMain.cpp:
#include "frmMain.cpp.h"

proj_2\frmMain.cpp:
#include "..\proj_1\frmMain.cpp.h"

也许这不是最好的方法,但它工作得很好。即使在 VS 设计器中,它也已经工作了几个月。不知何故,#2 表单的设计者现在决定不再接受它。

我现在的解决方案是,我有该文件的 2 个副本。但是由于我是用SVN externals来创建第二个副本,我仍然可以避免复制和粘贴,设计师很乐意再次向我展示表格。