Переопределить параметры app.config, встроенные в MSI? - PullRequest
5 голосов
/ 30 апреля 2010

У меня есть решение .NET с проектом установщика, который генерирует MSI. Один из проектов, установленных MSI, содержит файл App.Config. Похоже, что значения этого файла конфигурации встроены в MSI во время компиляции. Есть ли способ переопределить их во время выполнения ?

Например, App.Config, с которым я работаю, задает URL-адрес веб-службы, с которой общается установщик. Можно ли переопределить этот URL во время выполнения, чтобы мне не приходилось перекомпилировать MSI при изменении URL?

Обновление: Полагаю, я спрашиваю, могу ли я скопировать файл App.Config с определенным именем в каталог установщика, чтобы он переопределил во время выполнения встроенные параметры в MSI?

Я знаю, что могу изменить код для проверки переопределений в других местах, например в реестре или в известном месте расположения текстовых файлов, но моя немедленная необходимость - решить эту проблему без перекомпиляции. (В руках пользователей много установочных дисков)

Ответы [ 3 ]

1 голос
/ 30 апреля 2010

У нас была похожая проблема при разработке приложения, над которым я сейчас работаю. Мы хотели, чтобы у вас была возможность начать новую установку при первой настройке с настройками, перенесенными с другого компьютера, или с помощью утилиты конфигурации. Честно говоря, я не знаю, насколько хорошо наше решение в грандиозной схеме, но я могу рассказать вам, что мы сделали, что работает для нас, пока.

В нашем случае многие из этих настроек в конечном итоге попадают в файл app.config, которым не рекомендуется пытаться манипулировать извне самого приложения. Это может быть сделано, но это опасно несколькими тонкими способами. Если бы это было не так, лучше всего было бы добавить «настраиваемое действие» для проекта установки, которое вставляло бы данные в файл, базу данных или все, что мы использовали для хранения наших настроек. Отправную точку для того, как это сделать, можно найти в MSDN .

Но так как это было не вариант, мы решили, что, вероятно, самый простой способ получить данные через установку в приложение, без встраивания их в установочный пакет, - это использовать файл «переезд». Это файл, о котором знает ваша установка, но который не встроен в .MSI. Он должен просто находиться в известном месте относительно MSI при установке. Вы сообщаете проекту установки, что это за файл, где он должен быть и где его поместить. Затем ваше приложение может при запуске проверять его существование и обрабатывать все, что оно там находит. В вашем случае это будет переопределение настроек URL. Затем приложение может удалить файл, чтобы оно не загружалось при каждом запуске.

В проекте установки для этого файла необходимо задать несколько свойств, чтобы обеспечить его правильную работу в соответствии со стилем пакета, который создает проект VS Setup. Убедитесь, что вы установили их, иначе вы можете получить ошибки или другое странное поведение, если исключен файл перехода, поскольку он не нужен.

  • Состояние: НЕ УСТАНАВЛИВАЕТСЯ
  • PacakgeAs: vsdpaLoose
  • Vital: False

Мы называем наш файл AutoImport.Settings.xml. Это пользовательский XML-файл, в котором хранятся все данные, с помощью которых мы хотим иметь возможность инициализировать наше приложение при его установке. Он следует тому же формату, который мы используем, когда мы вручную экспортируем / импортируем конфигурации из приложения во время выполнения, и использует тот же механизм. Он просто делает это автоматически при запуске, если находит файл там. Это позволяет нам настроить один «прототип» машины со всеми сетевыми настройками, которые мы хотим иметь, экспортировать эти настройки, а затем отправить этот файл импорта для автоматической загрузки с любыми другими установками, которые мы делаем в этой сетевой среде. *

Как я уже сказал, такое чувство, что должен быть "лучший" способ. Единственное, что мы могли придумать, означало отход от механизмов app.config и user.config, которые имеют свои преимущества. В итоге мы решили, что это альтернатива с минимальным трением, полностью отвечающая нашим потребностям.

0 голосов
/ 30 апреля 2010

Если вы предоставляете URL-адрес как общедоступное свойство (т. Е. Любое свойство в таблице Proeprties со всеми прописными буквами считается общедоступным - я не знаю, есть ли у вас этот уровень контроля в проекте установки в VS), вы можете установить его из командной строки при запуске MSI. Это не очень хорошее решение для вашей конкретной проблемы, хотя, возможно, лучшей идеей будет установить первоначальное соединение с известным адресом, который не изменится, и он может вернуть текущий адрес реального веб-сервиса, который вы хотите использовать. поговорить с.

0 голосов
/ 30 апреля 2010

Если вам нужен установщик для общения с веб-службой, где вы будете хранить URL, если не в самом установщике?

Если у вас есть известное место, где можно искать URL («постоянный» URL, база данных, общая папка и т. Д.), Вы можете включить его адрес в установщик. В противном случае просто некуда получить URL от ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...