У меня есть отдельное приложение WinForms, назовем его «Программа А». Программа A позволяет пользователю создать файл и сохранить в нем некоторую информацию. Программа А также предоставляет некоторые открытые уроки.
Другое автономное приложение WinForms («Программа B») ссылается на Программу A и использует некоторые из ее открытых классов.
Однако некоторым классам Программы А необходимо открыть файл, созданный пользователем, чтобы извлечь из него данные. В программе A местоположение файла пользователя сохраняется в «Настройках» (как, конечно, в настройках области действия пользователя) и извлекается (это приложение VB.NET) через My.Settings
.
Это все хорошо до тех пор, пока не запустится программа B - когда она запускается и использует классы из программы A, которые должны считываться из My.Settings
программы A, настройки остаются пустыми - как если бы они были сброшены (как при запустить программу А в первый раз или под новой учетной записью пользователя). Любые настройки application-scope сохраняются, но любые настройки user-scope сбрасываются до значений по умолчанию (какими бы они не были установлены в IDE при написании программы A).
Вот пример псевдокода:
Программа A:
Namespace ProgramA
Public Class Foo
Public Shared Function GetStuff() as Object
File = OpenFile(My.Settings.UserFileName)
Return File.ReadStuff()
End Function
End Class
End Namespace
Программа B:
TheStuffIWant = ProgramA.Foo.GetStuff()
Предположим, что пользователь уже запустил Программу А хотя бы один раз и открыл файл, поэтому следует установить My.Settings.UserFileName
Программы А.
Когда программа B вызывает Foo.GetStuff()
, она ничего не возвращает, потому что My.Settings.UserFileName
не содержит имени файла пользователя - точнее, оно содержит любое значение «по умолчанию» для этого параметра (как установлено в IDE, когда вы устанавливаете настройку в первую очередь). Но если вы развернетесь и запустите Программу A, она запомнит настройки пользователя для UserFileName
.
Итак - вопрос: При вызове функции в ссылочной сборке, почему настройки пользователя не сохраняются? Есть ли объяснение поведения, которое я вижу, или я упускаю что-то ужасно очевидное? Или, может быть, я просто ошибаюсь в этом, и я не должен был делать какие-либо публичные уроки в программе А во-первых, полагаться на что-либо в My.Settings
?