powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Конфигурационный файл для DLL
3 сообщений из 3, страница 1 из 1
Конфигурационный файл для DLL
    #38773649
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

Проект библиотеки (т.е. на выходе получаю DLL). В составе проекта присутствуют файлы app.config и Settings.settings. После компиляции проекта, на выходе получаю файлы HelloWorld.17.2.dll и HelloWorld.17.2.dll.config. Обозначенная библиотека используется в качестве расширения для внешнего exe-приложения (подгружается и расширяет стандартный функционал).
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
[Rt.CommandMethod("test")]
public void Test() {
    Properties.Settings sett = Properties.Settings.Default;
    cad.DocumentManager.MdiActiveDocument.Editor.WriteMessage(
        "{0}\n", sett.msg);
    sett.msg += " + ";
    sett.Save();
}


Содержимое генерируемого XML файла следующее:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="userSettings" 
type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
            <section name="HelloWorld.Properties.Settings" 
type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
allowExeDefinition="MachineToLocalUser" requirePermission="false" />
        </sectionGroup>
    </configSections>
    <userSettings>
        <HelloWorld.Properties.Settings>
            <setting name="msg" serializeAs="String">
                <value>Hello, friends!</value>
            </setting>
        </HelloWorld.Properties.Settings>
    </userSettings>
</configuration>


Каждый раз после запуска в приложении команды test, в настройках должно изменяться значение msg и сохраняться между сессиями. Изменение происходит. Однако я не пойму, где оно хранится. В файле HelloWorld.17.2.dll.config никаких изменений нет. Поиск по реестру оказался безуспешным.

Вопросы:
1. Где сохраняется изменённое значение?
2. Если в файле HelloWorld.17.2.dll.config меняю текст "Hello, friends!", на "Hello, programmers!", то всё равно в консоль отправляется "Hello, friends!". Если вовсе удалить файл HelloWorld.17.2.dll.config, то всё по прежнему работает и счётчик продолжает накручиваться. Почему так происходит?

С уважением, Андрей.
...
Рейтинг: 0 / 0
Конфигурационный файл для DLL
    #38773749
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum1. Где сохраняется изменённое значение?
Environment\SpecialFolders.LocalApplicationData\[CompanyName] из атрибутов сборки\[имя_exe] (как ни странно)_AssemblyIdentity\[entry_assembly_version]\user.config
Т.е. допустим, у меня есть сборка testdll версии 1.0.0.0 от компании Foo с таким классом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
public class Class1
{
    public static void Change()
    {
        Properties.Settings.Default.MySetting = Properties.Settings.Default.MySetting+"1";
        Properties.Settings.Default.Save();
    }
}


и основное приложение test.exe версии 1.0.0.1 от компании Bar с таким кодом:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class Program
{
    static void Main(string[] args)
    {
        Class1.Change();
        Console.WriteLine("done");
        Console.ReadKey(true);
    }
}


Изменения свойства MySetting будут сохраняться в Environment\SpecialFolders.LocalApplicationData\Bar\test.exe_Url_sk4na0cjetcf3okk4knuzbx3l33bnumj\1.0.0.1\user.config. sk4na0cjetcf3okk4knuzbx3l33bnumj - это identity от entry assembly (разумеется, в каждом отдельном случае оно своё).
Compositum2. Если в файле HelloWorld.17.2.dll.config меняю текст "Hello, friends!", на "Hello, programmers!", то всё равно в консоль отправляется "Hello, friends!". Если вовсе удалить файл HelloWorld.17.2.dll.config, то всё по прежнему работает и счётчик продолжает накручиваться. Почему так происходит?
Если сохранялись изменения значений свойств, то, поскольку версия сборки и название компании (а тем более имя сборки) не изменились - программа продолжает считывать измененное (и сохраненное) значение из файла из п.1. Если не менялись - программа читает это значение из атрибута DefaultSettingValueAttribute класса настроек, т.к. по умолчанию у каждой настройки свойство GenerateDefaultValueInCode = True, а на сам конфиг приреференсированной сборки программа без доп. телодвижений не смотрит вообще. Подробности (чтобы программа смотрела) здесь .
...
Рейтинг: 0 / 0
Конфигурационный файл для DLL
    #38773800
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Конфигурационный файл для DLL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]