Vb.net My.Settings.MyConnectionString可以工作,但app.config不能?

Vb.net My.Settings.MyConnectionString可以工作,但app.config不能?,vb.net,configuration,connection-string,app-config,Vb.net,Configuration,Connection String,App Config,我不是WinForms开发人员,但已经做ASP.NET很长时间了。 我必须在VB.NET中编写一些东西,将一些简单的数据推送到数据库中。 因此,我创建了VB.NET WinForms应用程序(VisualStudio2005) 当我运行应用程序时,它可以很好地使用: Dim conMyData As SqlConnection Dim cmdInsert As SqlCommand Dim isSaved As Boolean isSaved = True

我不是WinForms开发人员,但已经做ASP.NET很长时间了。 我必须在VB.NET中编写一些东西,将一些简单的数据推送到数据库中。 因此,我创建了VB.NET WinForms应用程序(VisualStudio2005)

当我运行应用程序时,它可以很好地使用:

    Dim conMyData As SqlConnection
    Dim cmdInsert As SqlCommand
    Dim isSaved As Boolean
    isSaved = True
    conMyData = Nothing

    Try
        conMyData = New SqlConnection(My.Settings.MyConnectionString)
        cmdInsert = New SqlCommand("insComputer2", conMyData)
如果我使用:

    Dim conMyData As SqlConnection
    Dim cmdInsert As SqlCommand
    Dim isSaved As Boolean
    isSaved = True
    conMyData = Nothing
    Dim str As String = ConfigurationManager.ConnectionStrings("connect").ConnectionString

    Try
        conMyData = New SqlConnection(str)
        cmdInsert = New SqlCommand("insComputer2", conMyData)
也就是说,如果我在项目的属性中定义连接字符串。如果我构建项目,从bin\debug文件夹中获取.exe并在我的桌面上运行,则只有当我的版本显示为my.Settings.MyConnectionString时,它才会工作

否则,如果我使用从app.config文件中提取连接字符串的另一个版本,则只有通过visual studio运行项目时,该版本才起作用,而不是通过打开桌面上的.exe来运行。它是一种类似于ConnectionString not set的东西,或者有时它表示对象未设置为某个对象的实例

我的问题是:为什么它在项目内部工作


是因为我在构建项目时无法引用app.config文件,因为我已将其移动到桌面?

您必须拥有app.config文件并在其中指定连接字符串


编译时,app.config将卷起到MyProgram.exe.config文件中,因此在生成时查找该文件。

您需要将app.config(现在是@Joseph编写的YourProgramName.exe.config)复制到放置yur exe的文件夹(在本例中为桌面)


当您使用
My.Settings.MyConnectionString
时,您使用的是exe中的现有资源,因此它可以正常工作。

好,那么这是否意味着如果我将MyProgram.exe和MyProgram.exe.config放在桌面上,它就可以正常工作?好的,那么它就可以正常工作了……我想我明白了为什么必须打包应用程序:)。非常感谢。应该这样。我很惊讶My.Settings版本在没有任何其他文件的情况下工作。@Joel-我认为这是因为在后台为My.Settings生成的类在代码中有默认值,因此如果配置文件不存在,它将使用默认值。我不是百分之百确定。伙计们,投反对票的是什么?这是我最讨厌stackoverflow的一件事。否决票需要一个理由+1和:-)