我有以下问题:
我们有一个加载模块的应用程序(添加).这些模块可能需要app.config中的条目(例如WCF配置).因为模块是动态加载的,所以我不希望在我的应用程序的app.config文件中包含这些条目.
我想做的是以下内容:
注意:我不想覆盖默认的app.config!
它应该透明地工作,以便例如ConfigurationManager.AppSettings使用该新文件.
在我这个问题的评价,我用同样的解决方案提出了为这里提供:刷新的app.config与NUnit的.
不幸的是,它似乎没有做任何事情,因为我仍然从正常的app.config获取数据.
我用这段代码来测试它:
Console.WriteLine(ConfigurationManager.AppSettings["SettingA"]);
Console.WriteLine(Settings.Default.Setting);
var combinedConfig = string.Format(CONFIG2, CONFIG);
var tempFileName = Path.GetTempFileName();
using (var writer = new StreamWriter(tempFileName))
{
writer.Write(combinedConfig);
}
using(AppConfig.Change(tempFileName))
{
Console.WriteLine(ConfigurationManager.AppSettings["SettingA"]);
Console.WriteLine(Settings.Default.Setting);
}
Run Code Online (Sandbox Code Playgroud)
它打印相同的值twices,虽然combinedConfig包含除正常app.config之外的其他值.
我有一个Powershell脚本,它正在加载.NET程序集(在我的例子中是.EXE)并调用一个公共方法,该方法使用app.config来提取加密的连接字符串.
该脚本将程序集的exe.config动态复制到Powershell($ pshome)文件夹作为powershell.exe.config,并且能够从我的开发框运行就好了.问题是它不能从标准的Windows Server 2003安装运行.
我验证了exe.config正在被正确复制到powershell目录.我运行了SysInternals Process Explorer并验证了该进程正在访问配置文件(没有找到文件的消息).我远程调试的powershell.exe实例,可以看到该组件加载罚款,但不能访问ConfigurationManager.AppSettings [...]值(返回null).
我没有想法.我已经读过,我可能可以使用单独的应用程序域,但我看不到使用Powershell执行此操作的示例.
我的代码对以下内容产生了影响:
$absolute_path = "c:\foo.exe"
$config_path = $absolute_path + ".config"
copy "$config_path" "$pshome\powershell.exe.config" -Force
[Reflection.Assembly]::LoadFrom($absolute_path)
$foo = new-object MyFooAssembly.FooClass
$foo.DoSomething()
Run Code Online (Sandbox Code Playgroud)
在Vista中代码可以工作,在Windows Server 2003中,代码不起作用.
我想运行一些单元测试.对于此测试,我需要使用app.config文件中的另一个值,然后使用默认值.
在这篇文章" 使用nunit重新加载app.config "中,我找到了一个解决方案.
但是,当一次运行多个测试时,某些测试会失败,因为在部署该函数后未调用旧的配置文件(app.config).怎么会这样?