Я недавно написал DLL на C # (.Net 2.0), которая содержит класс, который требует IP-адрес. Мой коллега изменил класс для получения IP-адреса из файла «.dll.config» (XML) - очевидно, он автоматически генерируется созданным им файлом «Настройки приложения» (Settings1.settings). Преимущество этого состояло в том, что конечный пользователь мог по своему желанию изменять IP-адрес в файле XML / config.
К сожалению, когда я проверяю его код в дереве и пытаюсь скомпилировать (или использовать) этот новый код, любое приложение, вызывающее эту DLL, получает только значение по умолчанию, а не значение из файла.
Конструктор, который вызывает файл конфигурации, выглядит следующим образом:
public class form : System.Windows.Forms.Form
{
public form()
{
// This call is required by the Windows Form Designer.
InitializeComponent();
IP = IPAddress.Parse(Settings1.Default.IPAddress);
}
}
Я нашел ссылку на эту проблему на форумах MSDN , где пользователь сказал:
«старые» значения (те, которые вы определяете во время разработки) жестко запрограммированы. Если franework не может получить доступ к файлу конфигурации или открыть его, вместо него будут использоваться значения по умолчанию. Это всегда будет происходить, если вы используете настройки в DLL.
Означает ли это, что я не могу сохранить внешнее значение для DLL в файле конфигурации? (Мой сотрудник как-то сделал эту работу ...)
Так как моя инфраструктура не может получить доступ или открыть файл конфигурации, как мне выяснить, почему он не работает? Или даже определить, когда это произойдет?
Декер : Это немного помогает. К сожалению, я записываю эту DLL в спецификацию, поэтому на самом деле у меня нет доступа к файлу конфигурации приложения. Как вы заметите выше, мой коллега создал файл «Настройки 1 .settings». Я не понимал этого в то время, но теперь кажется, что добавление «1» не позволяет использовать его в пространстве настроек любого приложения, которое его вызывает.
Полагаю, я пытаюсь выяснить, почему DLL, похоже, не находит файл конфигурации рядом с ним в той же директории. Отслеживание кода шаг за шагом ничего не показывает.
Кроме того, я могу изменить «Тип вывода» моей сборки с «Библиотеки классов» на «Приложение Windows» и добавить следующие строки в начале моего кода DLL:
[STAThread]
public static void Main(string[] args)
{
System.Windows.Forms.Application.Run(new form());
}
Когда я запускаю этот файл, он генерирует другой файл конфигурации («.exe.config»), который я могу изменить, и получить из него новые данные. Так что я немного растерялся. Есть идеи?