I managed to find out the reason when I was copying the path for the config file, it seems an extra character appears with the path which caused the error.
How to solve issue with 'ClientConfigurationHost::Init' in my project.exe.config
I have created two projects where first handles setting up the DB connection information and send it to App.config of another project where the second project handles the connection of the DB to SQL server.
So, I done the following in my App.Config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="applicationSettings" (.....) >
<section name="Form.Properties.Settings" (.....) />
</sectionGroup>
<connectionStrings>
<add name="Form.Properties.Settings.DBConn" connectionString="Server=servername;Database=databasename;User Id=username;Password=password;"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configSections>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
And In file which handles sending the connection string:
var appconfigpath = txtbx_appConfigPath.Text;
var servername = txtbx_serverName.Text;
var databasename = txtbx_Database.Text;
var username = txtbx_Username.Text;
var password = txtbx_Password.Text;
var PlaceholderConnectionString = $"Server={servername};Database={databasename};User Id={username};Password={password};";
try
{
ExeConfigurationFileMap configFileMap = new ExeConfigurationFileMap();
configFileMap.ExeConfigFilename = appconfigpath;
try
{
Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);
// Modify the connection string value
config.ConnectionStrings.ConnectionStrings["Form.Properties.Settings.DBConn"].ConnectionString = PlaceholderConnectionString;
// Save the modified configuration
config.Save(ConfigurationSaveMode.Modified);
// Refresh the section
ConfigurationManager.RefreshSection("connectionStrings");
MessageBox.Show("Configuration Saved", "Output", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (ConfigurationErrorsException ex)
{
// Handle any configuration loading errors
MessageBox.Show($"Error loading configuration file: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
catch (Exception ex)
{
// Connection string not found in app.config
MessageBox.Show($"Error Message: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}
However, everytime I run the code, it gets to the line `Configuration config = ConfigurationManager.OpenMappedExeConfiguration(configFileMap, ConfigurationUserLevel.None);`
, gets to the exception and prints following error `System.InvalidOperationException: 'An unexpected error occurred in 'ClientConfigurationHost::Init'.'`
. Yesterday, it worked and when I started working on encryption then this started to happen.
Can you please explain to me what could be the issue (why can't I save the SQL connection into my secondproject.exe.config), how can I solve it and why when I tried to debug I was not able to access the function to pinpoint the error (it automatically jumps to the exception)?
Edit 1:
I tried to use following code:
try
{
// Update the connection string in the configuration file
var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
var connectionStringsSection = config.ConnectionStrings;
// Check if the connection string entry exists and update its value
if (connectionStringsSection.ConnectionStrings["Form.Properties.Settings.DBConn"] != null)
{
connectionStringsSection.ConnectionStrings["Form.Properties.Settings.DBConn"].ConnectionString = ConnectionString;
// Save the changes to the configuration file
config.Save(ConfigurationSaveMode.Modified);
// Refresh the configuration manager
ConfigurationManager.RefreshSection("connectionStrings");
// Use the connection string in your application logic
MessageBox.Show("Configuration Saved", "Output", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
Console.WriteLine("Connection string entry 'DBConn' does not exist in the configuration file.");
}
}
catch (Exception ex)
{
// Connection string not found in app.config
MessageBox.Show($"Error Message: {ex.Message}", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
I get the message for the configuration being saved but when I checked the config file, I still get the `'Server=servername;Database=databasename;User Id=username;Password=password;'`
Edit 2:
I have tried to trace the errors and I have found these fields were affected:
- CustomAttributes Method System.Reflection.MemberInfo.get_CustomAttributes cannot be called in this context. System.Collections.Generic.IEnumerable<System.Reflection.CustomAttributeData>
- Method System.Reflection.RuntimeMethodInfo.get_ReturnTypeCustomAttributes cannot be called in this context.
- '((System.Reflection.RuntimeMethodInfo)($exception).TargetSite).ReflectedType' threw an exception of type 'System.NotSupportedException'
- MethodImplementationFlags Method System.Reflection.MethodBase.get_MethodImplementationFlags cannot be called in this context. System.Reflection.MethodImplAttributes
- IsSecurityTransparent Method System.Reflection.RuntimeMethodInfo.get_IsSecurityTransparent cannot be called in this context. bool
- IsSecuritySafeCritical Method System.Reflection.RuntimeMethodInfo.get_IsSecuritySafeCritical cannot be called in this context. bool
- IsSecurityCritical Method System.Reflection.RuntimeMethodInfo.get_IsSecurityCritical cannot be called in this context. bool
I am using 4.7.2 for the .Net framework with 7.0.101 for the dotnet version.
Edit 3:
I found the following reference to the code for the ClientConfigurationHost ([.Net Source code to ClientConfigurationHost) and from what I understand is that I might have got the first error exception in code in Init (40% sure),
if (fileMap != null && !String.IsNullOrEmpty(_exePath)) {
throw ExceptionUtil.UnexpectedError("ClientConfigurationHost::Init");
}