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

时间:2016-01-26 11:30:12

标签: c# security app-config

见下面的DGibbs答案。

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

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

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

然后我可以在我的Cmd类中将其作为SecureString调用:

    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文件是否会更改?

1 个答案:

答案 0 :(得分:0)

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

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

您可以像这样检索值:

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

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