为什么我的连接字符串仅在 Dev 中工作

本文关键字:Dev 工作 我的 连接 字符串 为什么 | 更新日期: 2023-09-27 18:31:59

请参阅下面的DGibbs答案。

我无法将配置文件与EXE一起保存,因为它存在于每个用户的桌面上,因此似乎我无法将密码存储在配置文件中,并且必须提出其他解决方案。


我有一个需要以管理员身份运行 CMD 命令的应用程序。为了实现这一点,我将密码存储在 app.config 的连接字符串中:

<connectionStrings>
  <add name="mypw" connectionString="PASSWORD" />
</connectionStrings>

然后,我可以在我的Cmd类中将其称为安全字符串:

    private static SecureString pw()
            {
                string connectionString = ConfigurationManager.ConnectionStrings["mypw"].ConnectionString;
                SecureString ss = new SecureString();
                foreach (char c  in connectionString)
                {
                    ss.AppendChar(c);
                }
                return ss;
            }

当我在调试 (F5) 的计算机上从 VS 运行应用程序时,它工作正常并检索密码。但是,在开发环境中运行时,我看到异常Object Reference not set to an instance of an object,从我自己的调试中,我可以看到这发生在以下行:

string connectionString = ConfigurationManager.ConnectionStrings["mypw"].ConnectionString;

任何人都可以解释为什么该应用程序能够在我的计算机上检索连接字符串,但在其他地方部署时却不能?发布应用时,app.config 文件是否会更改?

为什么我的连接字符串仅在 Dev 中工作

很少有事情,不要使用<connectionStrings>,这通常用于存储数据库连接的凭据,在这里没有意义。尝试在App.config文件中使用AppSettings,例如

<appSettings>
    <add key="mypw" value="password" />
</appSettings>

您可以像这样检索值:

string pw = ConfigurationSettings.AppSettings["mypw"];

最后,确保已部署配置文件,它应该是[ApplicationName].exe.config而不是App.Config如果未显示,请检查Copy to output directory设置,确保将其设置为 Copy Always