【问题标题】:Why is my Connection String only working in Dev?为什么我的连接字符串只能在 Dev 中使用?
【发布时间】:2016-05-02 22:56:20
【问题描述】:

请参阅下面的 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 文件是否发生变化?

【问题讨论】:

  • 为什么要使用连接字符串来存储密码?
  • 我不确定,我之前一定在某个地方读到过,这已经完成了——这不是好习惯吗?
  • Does the app.config file change when publishing the app - 是的,有转换。寻找app.Debug.config。这是一个 XSLT 文件,可能会删除您的连接字符串。
  • "发布应用时,app.config 文件有变化吗?"抱歉,我的水晶球正在维修中。你为什么不自己检查一下? 有权访问您的 DEV 和部署环境。

标签: c# security app-config


【解决方案1】:

没什么,不要使用&lt;connectionStrings&gt;,这通常用于存储数据库连接的凭据,在这里没有意义。尝试在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

【讨论】:

  • 感谢您对 DGibbs 的回答,但我认为这里肯定还有其他原因。正如你所解释的,我已经用 appSettings 标签更新了我的 app.config(我将它放在 app.config 文件的底部,但在 &lt;configuration&gt; 标签内),但仍然看到同样的问题!使用 ConfigurationSettingsConfigurationManater 时会发生这种情况 - 异常似乎没有区别
  • 您是否检查了解决方案中App.config 文件上的Copy to output directory 设置?您能否确认[AppName].exe.config 文件与.exe 一起在bin 中?除此之外,我没有想法。
  • 我已将Copy to Output Directory 设置为Copy always,我可以在`IT Self Help\bin\debug` 中看到IT Self Help.exe.config,它看起来与VS 中的相同。但是,在实时运行应用程序时,只会将 EXE 文件复制到用户的计算机上 - 配置文件保留在原处。这会有所作为吗?
  • 配置应该和.exe在同一个目录
  • 好的,谢谢 DGibbs - 很抱歉不知道这一点,感谢您帮助我。我想我的密码只需要存储在应用程序的实际代码中——这似乎太错误了!我的用户桌面上没有配置文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 2021-01-28
  • 1970-01-01
  • 2012-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多