编辑安装程序类中的自定义配置节

时间:2009-08-24 14:32:29

标签: c# configuration installer config

我正在尝试在自定义操作中安装产品期间更新web.config文件的自定义配置部分。我想使用实际的移民类来执行此操作,但是当安装程序运行时,它会加载我的安装程序类,然后加载 Configuration.GetSection在尝试从Windows系统目录加载自定义节类时抛出File Not Found异常。我设法通过将所需的程序集复制到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 个答案:

答案 0 :(得分:1)

希望你能按照预期的方式理解答案。

假设您已设置安装程序以使项目输出。如果不 右键单击安装程序项目单击添加 - >项目输出 - >选择您的项目 然后你可以继续使用你的代码。

此外,如果您使用的是dll,除了.net之外,请务必在那里进行更改 属性为copylocal = true

如果要在安装前阅读元素,请使用BeforeInstall事件 处理程序并尝试读取您的文件。 ihope你的问题将得到解决

如果您想要在安装后阅读元素,请单击右键 安装程序项目单击view-&gt; customActions-&gt;安装时单击“添加自定义操作” - &gt;选择应用程序文件夹 - &gt;从项目中选择主输出,然后单击 好的。

现在单击主输出并按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
  }