Я пытаюсь понять, как заставить это работать.
У меня есть консольное приложение c #.
После сборки я получил файл конфигурации по умолчанию myApp.exe.config
Я хочу добиться следующего:
- Я хочу переименовать файл конфигурации в myApp.xml
- Я хочу положить его в
другое местоположение, управляемое некоторой системой планирования.
Я сделал это, выполнив следующее:
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>
Кто-нибудь знает, как исправить вышеуказанную ошибку?