在使用visual studio安装程序安装过程中更改app.配置文件失败:无法加载文件或程序集'

本文关键字:安装 加载 文件 程序集 失败 配置文件 studio visual 程序 过程中 app | 更新日期: 2023-09-27 18:15:36

项目信息:我们正在创建一个安装程序项目,允许用户选择服务器名和数据库名。主程序安装完成后,将创建一个相应的数据库。

安装项目:

  • 有一个额外的UI屏幕,有两个文本框,包含服务器名和数据库名。
  • 自定义操作将在安装时执行,并将服务器名和数据库名定义为自定义操作数据。

主要用途:

  • 安装程序类连接安装后事件。这个类将在安装期间自动执行。自定义动作数据将作为参数传递给该类。
  • 安装后事件将触发一个方法:
      创建数据库
  • 获取app.config文件并调整connectionstring

一切正常除了保存配置文件:我们收到这个错误:

System.Configuration。ConfigurationErrorsException:为entityFramework创建配置部分处理程序时发生错误:无法加载文件或>程序集' entityFramework, Version=6.0.0.0, Culture=neutral,>PublicKeyToken=b77a5c561934e089'

很奇怪,在运行和调试主应用程序时,我们没有得到entityframework的任何错误。此外,我们能够以unittest的形式执行代码,因此只有在使用visual studio installer

安装期间更改配置文件时,才会出现这个汇编问题。

您可以在下面找到更改配置文件的代码。

void DeployInstaller_AfterInstall(object sender, InstallEventArgs e)
{
  try
  {
    Configuration config = ConfigurationManager.OpenExeConfiguration(Assembly.GetExecutingAssembly().Location);
    string connectionsection = config.ConnectionStrings.ConnectionStrings
    ["XBSDbDataContext"].ConnectionString;
    ConnectionStringSettings connectionstring = null;
    if (connectionsection != null)
    {
          config.ConnectionStrings.ConnectionStrings.Remove("XBSDbDataContext");
    }
    connectionstring = new ConnectionStringSettings("XBSDbDataContext", connectionString);
    config.ConnectionStrings.ConnectionStrings.Add(connectionstring);
    config.Save(ConfigurationSaveMode.Minimal, true);
    }
    catch (Exception ex)
    {
          MessageBox.Show(ex.ToString());      
    }
}

你知道可能是什么原因和如何解决它吗?提前感谢。

—UPDATE—我们找到了一个解决方法

避免使用ConfigurationManager类来编辑配置文件我们不再有这个问题。现在可以使用system.xml完成此操作名称空间。

  //updating config file
  XmlDocument XmlDoc = new XmlDocument();
  MessageBox.Show(Assembly.GetExecutingAssembly().Location + ".config");
  XmlDoc.Load(Assembly.GetExecutingAssembly().Location+".config");
  foreach (XmlElement xElement in XmlDoc.DocumentElement)
  {
       if (xElement.Name == "connectionStrings")
       {
            xElement.LastChild.Attributes["connectionString"].Value = connectionString;
       }
  }
  XmlDoc.Save(Assembly.GetExecutingAssembly().Location + ".config");

在使用visual studio安装程序安装过程中更改app.配置文件失败:无法加载文件或程序集'

如果该Dll(或它的依赖项)正在由您的MSI安装到GAC,问题是安装的GAC程序集在安装的提交阶段之前实际上无法在GAC中访问。尽管名称为"AfterInstall",但该事件实际上是"接近安装结束"。如果你把那个自定义动作移到Commit自定义动作并且它能工作,那就是问题所在。

一般来说,在应用程序的第一次运行时做这些事情通常效果更好-看到它没有配置,然后做创建,连接字符串等。它的调试要简单得多;在安装程序类中,您使用本地系统帐户(在每台机器安装中)或非提升用户(在每用户安装中)运行,这可能会导致安全性等问题。除此之外,如果用户想要移动数据库,或者服务器名称更改等,您可以再次运行一些配置。