Конфигурация загрузки .net в библиотеке классов

скажем, у меня есть: 1) 1 форма WindowsForm в проекте «A» 2) 1 форма WindowsForm в проекте «B» 3) 1 библиотека классов (GAC)

Состояние. Обе ссылки на проект одинаковы.

Часть 1. У меня есть my.settings в моей библиотеке классов для сохранения конфигурации с общедоступной функцией.

Часть 2: Я создаю значение / конфигурацию из «А» и сохраняю их в своей библиотеке классов. настройки были успешно сохранены, и загрузить значение / конфигурацию без ошибок

Вопрос: 1). Почему я не могу загрузить значение / конфигурацию из "B"? Показано исключение NullException Сначала я думаю, чтобы использовать my.resources в библиотеке классов, но my.resources доступен только для чтения

2). Какое лучшее решение для подключения библиотеки 1 класса к нескольким проектам

код в библиотеке классов для сохранения ценности

Public Sub Kucing_simpan(ByVal value As String)
    My.Settings.Kucing = value
    My.Settings.Save()
End Sub

код в библиотеке классов для загрузки значения

Public Function kucing_ambil()
    Dim value As String
    value = My.Settings.Kucing
    Return value
End Function

код в букве "А"

dim save as new Zombie.Kencing 'My class Library Name
save.Kucing_simpan(textbox1.text)

код в букве "Б"

dim load as new Zombie.Kencing 'My class Library Name
DataGridView1.Rows(0).Cells(1).Value = load.kucing_ambil

person Ryan Good    schedule 27.09.2014    source источник
comment
каждое приложение (из A Prj и B Prj) имеет свой собственный объект My.Settings, почему бы не использовать их? Чего вы пытаетесь достичь?   -  person Ňɏssa Pøngjǣrdenlarp    schedule 27.09.2014
comment
Я хочу сохранить значение / конфигурацию в библиотеке классов с помощью проекта A, чтобы проект B, C или D мог получить значение / conf из библиотеки классов .. вот так: A сохранить значение в библиотеке классов, а B загрузить значение, это что возможно ??   -  person Ryan Good    schedule 27.09.2014
comment
как минимум, вам понадобится один большой пул настроек; Class Lib не разбивает их на части для A, некоторые для B и т.д., а также не может получить настройки A для A. CLassLib также не будет загружать их в my.settings A, они будут DLL. И вам придется выставлять реквизиты для каждой отдельной настройки. Лучше, IMO, добавить класс для управления ими всеми, который является общим для A, B, C и D, который также может управлять сохранением и загрузкой для вас.   -  person Ňɏssa Pøngjǣrdenlarp    schedule 27.09.2014
comment
Объект настроек в библиотеке классов, сэр, а не проект, назначение A - изменить значение в   -  person Ryan Good    schedule 27.09.2014
comment
Я понимаю это; Я говорю, что Lib не может загрузить их для A или в настройки A. Why i can't load the value/configuration from "B" отредактируйте свое сообщение, чтобы показать код, который не работает; мы понятия не имеем, как выглядит код   -  person Ňɏssa Pøngjǣrdenlarp    schedule 27.09.2014
comment
Это мой код, сэр, помогите мне, пожалуйста ...   -  person Ryan Good    schedule 29.09.2014


Ответы (1)


Вы не можете делать то, что пытаетесь сделать - по крайней мере, так, как вы это делаете.

Во-первых, вы должны понять, как / где сохраняются настройки. При использовании имени приложения по умолчанию и т. Д. Проект A - WindowsApplication1 сохранит свои настройки во что-то загадочное, например:

C:\Users\<UserName>\AppData\Local\Microsoft\_
    WindowsApplication1_Url_ggn13vigzyicmtfkwaa3vi5tyxn0sy3r\1.0.0.0\user.config

NET создает хэш, чтобы убедиться, что одноименные приложения имеют другое безопасное место для хранения настроек. Итак, WindowsApplication3 будет иметь другой хеш; так же ваш 17-й проект с именем WindowsApplication1 случайно не загружает и не находит настройки WinApp 1-16.

Далее, ваша библиотека классов настроек не является отдельным приложением. Как DLL, он работает так, как если бы это был набор функций, связанных с вызывающим его приложением. Таким образом, когда Project A сохраняет настройки через ClassLib, они сохраняются в другом месте, чем Project B. Даже при использовании Class Lib, NET использует учетные данные и информацию приложения для создания имени файла и пути.


Что вы можете сделать, так это написать класс, который определяет все возможные настройки (или создает List или Dictionary из них), а затем сохранять их в фиксированном известном месте, например:

Private Comp As String = "ZiggySoft"
Private Prod As String = "ZiggyWare"

Private settingsFile As String

'...
settingsfile = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)
settingsfile = Path.Combine(settingsfile, Comp, Prod, "usersettings.dat")

В результате получится: "C: \ Users \\ AppData \ Roaming \ ZiggySoft \ ZiggyWare \ usersettings.dat"

Включите один и тот же файл в каждый проект («Добавить существующий элемент», возможно, выберите «Добавить как ссылку» в раскрывающемся списке). Теперь вы можете читать и записывать свои настройки в файл, за который вы отвечаете. Вы можете сохранить / загрузить весь класс или список в 3-5 строк кода, если вы его сериализуете.

Когда проект A загружает настройки, он также получит те, которые применимы только к B, J или V, но общие будут и могут быть общими.

person Ňɏssa Pøngjǣrdenlarp    schedule 29.09.2014