"Тип не определен", когда я хочу добавить свой пользовательский класс в качестве типа настроек
Я хочу добавить этот класс как тип настройки:
using System.Collections.Generic;
using System.Configuration;
namespace MY_PROJECT.SUB_PROJECT
{
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
public class Configs: List<ConfigData>
{
Configs(int capacity): base(capacity) { }
public string GroupName { get; set; }
}
}
Итак, что я сделал:
- Выберите Обзор... в раскрывающемся списке типов:
- Я не вижу
MY_PROJECT
пространство имен где угодно: - Поэтому я набрал полный тип вручную:
Результатом является ошибка:
Type 'MY_PROJECT.SUB_PROJECT.Configs' is not defined.
Я тоже пробовал SUB_PROJECT.Configs
а также Configs
в одиночестве. Ничего не помогло Почему мой класс не отображается в браузере?
3 ответа
Для того, чтобы получить что-то в качестве ссылки, вам нужно скомпилировать его как файл DLL. В Visual Studio они называют это "библиотекой", которая на самом деле является просто классом без основной функции. Другой вариант - просто оставить его в том же пространстве имен и перетащить класс во все, над чем вы работаете.
У меня только что была эта проблема, и это было связано с ошибкой несогласованного доступа . Убедитесь, что любой «обязательный» тип/поле доступен глобально (public?). В случае с ОП, создание общедоступного конструктора решает проблему:
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
public class Configs: List<ConfigData>
{
public Configs(int capacity): base(capacity) { }
// ^^
public string GroupName { get; set; }
}
В моем случае это была проблема:
internal struct NativeType
{
//...
}
[SettingsSerializeAs(SettingsSerializeAs.Xml)]
public class NativeTypeWrapper
{
public NativeType type; // This will not work because NativeType
// is less accessible than NativeTypeWrapper...
}
У меня тоже была эта проблема. Я делал то же самое: создавал собственный класс для использования в настройках приложения. В моем случае я выполнил шаги, описанные в этой очень информативной статье: http://www.blackwasp.co.uk/CustomAppSettings.aspx .
Должен отметить, что статья написана для C#, и я кропотливо конвертировал ее в VB, пока она не заработала. Мне пришлось исправлять ошибку трудным путем: неустанно экспериментировать, пока я не заработал.
Я опишу свое первое решение, которое не было упомянуто в статье, вероятно, потому, что оно для C#, а не для VB, а именно: поместить пользовательский класс или классы каждый в свои файлы. Например:
Employee.vb
а также
Room.vb
. Это единственный способ, которым я мог заставить его работать идеально без ошибок. Сделав это и перестроив решение, я смог добавить свой пользовательский класс в качестве параметра приложения, но, конечно, только вручную введя полное имя в диалоговом окне.
Однако, следуя статье, на которую я ссылался выше, если я помещу все определения классов в
Module1.vb
файл с
Sub Main()
,
Select a Type
диалог не может найти их, и я получаю
Type...is not defined
ошибка.
И причиной этой ошибки, по-видимому, являются недостатки в коде и дизайне системы настроек приложений и страницы настроек диалогового окна свойств проекта. Я говорю это из-за решения, которое я нашел: я жестко взломал свои классы в настройках.
Я имею в виду, что я изначально создал параметр с именем и типом . Затем я использовал
Find In Files
диалог, чтобы найти все экземпляры
DefaultEmployee
и заменил соответствующие экземпляры
String
с
TestProject.Employee
.
Файлы, в которых я сделал замены:
App.config
,
Settings.Designer.vb
, а также
Settings.settings
.
И это сработало..! Вроде, как бы, что-то вроде. Я должен сказать, что код работал нормально, и он сделал то, что ожидалось. Но... диалог настроек приложения не понравился. После того, как я внес изменения, при каждом открытии системы Project Properties/Settings возникают различные ошибки. Но, как я уже сказал, он все еще работает.
Таким образом... мой единственный вывод заключается в том, что код системы настроек не предназначен для обработки этой ситуации, и если вы хотите получить наиболее надежный и безошибочный опыт, лучше всего поместить каждый из пользовательских классов в свои собственные
.vb
файл класса.
С другой стороны, если вы хотите быть очень предприимчивым, вы можете создать свою собственную систему настроек приложений, как это сделал автор этой статьи. Я еще не все это прочитал, но просмотр кажется очень интересным: https://weblog.west-wind.com/posts/2012/dec/28/building-a-better-net-application-configuration-class-пересмотрено