20190705_关于winform程序修改程序名后, 报未将对象引用设置到对象的实例

winform做了一个小项目, 其中要用到数据库连接, 字符串, 

   private string ConnStringSource =   System.Configuration.ConfigurationManager.ConnectionStrings["ConnStringSource"].ConnectionString;

 就直接用的app.config配置文件

开发完成后, 也没有打包, 直接用debug下的文件发给用户了, 用户试用后, 觉得名字是英文的不方便, 想改下中文名

    , 这个图是项目本来的名字;

 

 ,这个图是用户修改后的名字; 

改完名字之后, 就一直包下图的经典错误:

解决办法是:

将配置文件也对应的改名, 比如你将 PrintBindRFID.exe 修改为 RFID打印.exe , 那么配置文件也得改成 RFID打印.exe.config; 

问题到这里就解决了, 那么为什么是这样的呢?

看看System.Configuration.ConfigurationManager.ConnectionStrings 类的源码就知道了;

public static ConnectionStringSettingsCollection ConnectionStrings
{
    get
    {
        object obj2 = GetSection("connectionStrings");
        if ((obj2 == null) || (obj2.GetType() != typeof(ConnectionStringsSection)))
        {
            throw new ConfigurationErrorsException(SR.GetString("Config_connectionstrings_declaration_invalid"));
        }
        ConnectionStringsSection section = (ConnectionStringsSection) obj2;
        return section.ConnectionStrings; //配置字符串从这个方法来
    }
}
 
//-----------------------------------------------------------------------------------------
public static object GetSection(string sectionName)
{
    if (string.IsNullOrEmpty(sectionName))
    {
        return null;
    }
    PrepareConfigSystem();
    return s_configSystem.GetSection(sectionName);//从这里来
}

  private static void EnsureConfigurationSystem()
    {
        object obj2 = s_initLock;
        lock (obj2)
        {
            if (s_initState < 2)
            {
                s_initState = 1;
                try
                {
                    try
                    {
                        //s_configSystem使用这个进行实例化的, 转到它的构造函数
                        s_configSystem = new ClientConfigurationSystem();
                        s_initState = 2;
                    }
                    catch (Exception exception)
                    {
                        s_initError = new ConfigurationErrorsException(SR.GetString("Config_client_config_init_error"), exception);
                        throw s_initError;
                    }
                }
                catch
                {
                    s_initState = 3;
                    throw;
                }
            }
        }
    }
//-----------------------------------------------------------------------------------------
  
internal ClientConfigurationSystem()
{
    this._configSystem = new ConfigSystem();
    //ClientConfigurationHost看下这个类里面
    this._configSystem.Init(typeof(ClientConfigurationHost), new object[2]);
    this._configHost = (ClientConfigurationHost) this._configSystem.Host;
    this._configRoot = this._configSystem.Root;
    this._configRoot.ConfigRemoved += new InternalConfigEventHandler(this.OnConfigRemoved);
    this._isAppConfigHttp = this._configHost.IsAppConfigHttp;
    string schemeDelimiter = Uri.SchemeDelimiter;
}
//-----------------------------------------------------------------------------------------
internal sealed class ClientConfigurationHost : DelegatingConfigHost, IInternalConfigClientHost
{
    // Fields
    private ClientConfigPaths _configPaths;
    private string _exePath;
    private ExeConfigurationFileMap _fileMap;
    private bool _initComplete;
    private const string ConfigExtension = ".config";
    internal const string ExeConfigName = "EXE";  //看到这里就不用再看下去了
    internal const string ExeConfigPath = "MACHINE/EXE";

 

  

 

posted on 2019-07-05 15:21  印子  阅读(1323)  评论(0编辑  收藏  举报

导航