我正在尝试在自定义操作中安装产品期间更新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>
答案 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
}