"Тип не определен", когда я хочу добавить свой пользовательский класс в качестве типа настроек

Я хочу добавить этот класс как тип настройки:

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; }
    }
}

Итак, что я сделал:

  1. Выберите Обзор... в раскрывающемся списке типов:
  2. Я не вижу MY_PROJECT пространство имен где угодно:
  3. Поэтому я набрал полный тип вручную:
  4. Результатом является ошибка:

    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-пересмотрено

Другие вопросы по тегам