这是一个令人尴尬的问题,但我觉得我在过去的几个小时里尝试了一切。
我只想将以下属性添加到我的属性中
#using <System.Drawing.dll>
#using <System.Design.dll>
...
using namespace System::Drawing::Design;
using namespace System::Configuration;
using namespace System::ComponentModel;
using namespace System::Windows::Forms::Design;
...
[Editor(typeof(FolderNameEditor), typeof(UITypeEditor))]
property System::String^ DefaultWorkingDirectory;
首先,我按原样尝试,编译器说“非法使用类型(FolderNameEditor)。
现在我尝试了这个
[Editor(Type::GetType("System.Windows.Form.Design.FolderNameEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"),
Type::GetType("System.Drawing.Design.UITypeEditor, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"))]
但它说非法属性参数。
如果我执行以下操作,C++/CLI 项目将编译
[Editor("System.Windows.Form.Design.FolderNameEditor", "System.Drawing.Design.UITypeEditor")]
但是,每当我尝试从 C# 项目中获取项目的引用时,都会收到一条错误消息,指出缺少命名空间。如果我注释掉上面的编辑器属性和#using 和 using 命名空间,一切都很好。
由于某种原因,我在 MSDN 中找不到相关资料,如果您能指出正确的文档,将不胜感激。
更新: C# 项目是 .NET 4 客户端配置文件,这就是为什么我收到错误指示缺少命名空间的原因,这是误导性的。将目标框架更改为 .NET 4 解决了这个问题。