Редактирование пользовательского раздела конфигурации в классе установщика - PullRequest
4 голосов
/ 24 августа 2009

Я пытаюсь обновить пользовательский раздел конфигурации файла web.config во время установки моего продукта в настраиваемом действии. Я хотел использовать фактические классы конфигурации, чтобы сделать это, однако, когда установщик запускает, он загружает мой класс установщика, но затем Configuration.GetSection выдает исключение File Not Found, поскольку оно пытается загрузить мой класс пользовательского раздела из системного каталога Windows. Мне удалось заставить это работать, скопировав необходимые сборки в системный каталог Windows, но это не идеальное решение, так как я не могу гарантировать, что у меня всегда будет доступ к этому каталогу.

Как еще можно решить эту проблему?

Мой код обновления выглядит следующим образом

[RunInstaller(true)]
public partial class ProjectInstaller : Installer
{
    public override void Install(System.Collections.IDictionary stateSaver)
    {
        //some code here
        webConfig = WebConfigurationManager.OpenWebConfiguration("MyService");
        MyCustomSection mySection = webconfig.GetSection("MyCustomSection") //<--File Not Found: CustomConfigSections.dll
        //Update config section and save config
    }
}

Мой конфигурационный файл выглядит так

<configuration>
    <configSections>
        <section name="myCustomSection" type="CustomConfigSections.MyCustomSection, CustomConfigSections" />
     </configSections>
    <myCustomSection>
        <!-- some config here -->
    </myCustomSection>
</configuration>

1 Ответ

1 голос
/ 18 февраля 2013

Надеюсь, вы поймете ответ так, как он предназначен.

Предполагается, что вы установили программу установки для вывода проекта. Если не Щелкните правой кнопкой мыши по установщику Project, нажмите add-> Project Output-> выберите ваш проект и затем вы можете продолжать использовать свой код.

Более того, если вы используете dll, за исключением .net, убедитесь, что вы там изменили свойства для copylocal = true

Если вы хотите прочитать элемент Перед установкой, используйте BeforeInstall Event Обработчик и попробуйте прочитать ваш файл. ihope ваша проблема будет решена

Если в случае, если вы хотите прочитать элемент после установки, щелкните правой кнопкой мыши на проект установщика Нажмите «Просмотр» -> «CustomActions» -> «При установке» нажмите «Добавить настраиваемое действие». -> Выберите папку приложения -> Выберите основной выход из вашего проекта и нажмите хорошо.

Теперь Нажмите на первичный выход и нажмите F4, и в Данные пользовательских действий напишите

/DIR="[TARGETDIR]\"

и после этого напишите свой код следующим образом.

[RunInstaller(true)]
public class ProjectInstaller : Installer
{
  public ProjectInstaller()
  {
    this.InitializeComponent();
  }
  private void InitializeComponent()
  {
    this.AfterInstall += new InstallEventHandler(ProjectInstaller_AfterInstall);
  }
  void ProjectInstaller_AfterInstall(object sender, InstallEventArgs e)
  {
    string path = this.Context.Parameters["DIR"] + "YourFileName.config";
    // make sure you replace your filename with the filename you actually
    // want to read
    // Then You can read your config using XML to Linq Or you can use
    // WebConfigurationManager whilst omitting the .config from the path
  }
...