Это неловкий вопрос, но я чувствую, что перепробовал все за последние пару часов.
Я просто хочу добавить атрибут следования в мою собственность
#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 #, я получал сообщение о том, что пространство имен отсутствует. Если я закомментирую атрибут editor и #using и использую пространство имен выше, все будет хорошо.
По какой-то причине я не могу найти соответствующие материалы в MSDN, если вы можете указать правильный документ, который был бы оценен.
ОБНОВИТЬ: Проект C # представлял собой .NET 4 Client Profile, и именно поэтому я получил сообщение об ошибке, указывающее на отсутствующее пространство имен, которое вводит в заблуждение. Изменение целевой платформы на .NET 4 решило проблему.
C ++ / CLI эквивалентно typeof()
является ::typeid
, Попробуй это:
[Editor(FolderNameEditor::typeid, UITypeEditor::typeid)]
Других решений пока нет …