在资源中隐藏App.config

时间:2012-03-03 13:57:57

标签: c# .net visual-studio app-config

我已经搜索了一段时间,但我找不到具体的答案。

在我目前的C#项目中,我需要一个App.config文件,以便我的EDM上下文找到数据库连接。

我需要将我的应用程序包含在单个.exe文件中,但由于App.config,它会生成.exe文件旁边的.exe.config并要求它才能正常运行。< / p>

有没有办法以编程方式为我的数据库上下文添加连接字符串,还是可以将App.config存储在资源中?

如何将连接字符串传递给我的数据库上下文?

2 个答案:

答案 0 :(得分:0)

最后Amen Ayach的最后评论向我指出了正确的解决方案

而不是在没有参数的情况下实例化我的ObjectContext,我只需要从我的App.config传递连接字符串,然后我就可以删除App.config

而不是

Entities = new MyEntities();

我致电

Entities = new MyEntities( "metadata=res://*/Models.csdl|res://*/Models.ssdl|res://*/Models.msl;provider=System.Data.SqlClient;provider connection string=\"data source=sql-server;initial catalog=initialDatabase;integrated security=True;pooling=False;multipleactiveresultsets=True;App=EntityFramework\"" );

Visual Studio会自动重载它创建的上下文类的构造函数,允许您手动传递连接字符串

答案 1 :(得分:-2)

您可以像注册表中的所有高级程序一样保存和读取设置,并忘记app.config,这就是如何操作:

public object GetRegistryValue(string KeyName, object DefaultValue)
        {
            object res = null;
            try
            {
                Microsoft.VisualBasic.Devices.Computer c = new Microsoft.VisualBasic.Devices.Computer();
                Microsoft.Win32.RegistryKey k = c.Registry.CurrentUser.OpenSubKey("Software\\YourAppName", true);
                if (k != null)
                {
                    res = k.GetValue(KeyName, DefaultValue);
                }
                else
                {
                    k = c.Registry.CurrentUser.CreateSubKey("Software\\YourAppName");
                }
                if (k != null)
                    k.Close();
                // ex As Exception
            }
            catch
            {
                //PromptMsg(ex)
            }
            return res;
        }

public void SetRegistryValue(string KeyName, object _Value)
        {
            try
            {
                Microsoft.VisualBasic.Devices.Computer c = new Microsoft.VisualBasic.Devices.Computer();

                Microsoft.Win32.RegistryKey k = c.Registry.CurrentUser.OpenSubKey("Software\\YourAppName", true);
                if (k != null)
                {
                    k.SetValue(KeyName, _Value);
                }
                else
                {
                    k = c.Registry.CurrentUser.CreateSubKey("Software\\YourAppName");
                    k.SetValue(KeyName, _Value);
                }
                if (k != null)
                    k.Close();
                // ex As Exception
            }
            catch
            {
                //PromptMsg(ex)
            }
        }