C#控制台配置重命名和重新定位

时间:2019-03-15 09:47:15

标签: c# asp.net configuration

我正在尝试弄清楚如何使它工作。 我有一个C#控制台应用程序。 构建后,我得到的默认配置文件是 myApp.exe.config 我要实现以下目标:

  1. 我想将配置文件重命名为myApp.xml
  2. 我想把它放在一个 由某个调度系统管理的不同位置。

我通过执行以下操作使其得以工作:

    private static void resetConfig()
    {
        var directory = System.IO.Directory.GetCurrentDirectory();
        var filename = $"{directory}\\myApp.xml";
        if (File.Exists(filename))
        {
            AppDomain.CurrentDomain.SetData("APP_CONFIG_FILE", filename);

            typeof(ConfigurationManager)
                .GetField("s_initState", BindingFlags.NonPublic |
                                         BindingFlags.Static)
                .SetValue(null, 0);

            typeof(ConfigurationManager)
                .GetField("s_configSystem", BindingFlags.NonPublic |
                                            BindingFlags.Static)
                .SetValue(null, null);

            typeof(ConfigurationManager)
                .Assembly.GetTypes()
                .Where(x => x.FullName ==
                            "System.Configuration.ClientConfigPaths")
                .First()
                .GetField("s_current", BindingFlags.NonPublic |
                                       BindingFlags.Static)
                .SetValue(null, null);
        }
    }

但是,最近我升级了一些软件包。而且在运行它时出现以下错误。

未处理的异常:System.IO.FileLoadException:无法加载文件或程序集'SomePackage,版本= 6.0.0.0,区域性=中性,PublicKeyToken = f3619abdd9aa739d'或其依赖项之一。找到的程序集的清单定义与程序集引用不匹配。 (来自HRESULT的异常:0x80131040)

升级软件包后我注意到的配置差异是添加了一些新的运行时部分:

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <dependentAssembly>
    <assemblyIdentity name="SomePackage" publicKeyToken="f3619abdd9aa739d" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.2.1.2" newVersion="6.2.1.2" />
  </dependentAssembly>
</runtime>

有人知道如何解决以上错误吗?

0 个答案:

没有答案