我的方案是我在我的开发机器上创建了一个VB.NET应用程序,现在希望使用包和部署向导将它分发到另一台机器。
开发计算机上的代码完美地运行,但是当我在目标计算机上安装它时,它会给出一个空引用异常。
我在目标计算机上有一个访问数据库,它是我在开发计算机上使用的数据库的精确副本。我的连接字符串在我的app.config文件中定义,但我不知道如何继续。
这是我的app.config文件,其中包含我的连接字符串:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="connString"
connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\Dave\Documents\duraGadget.mdb"
providerName="System.Data.OleDb" />
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
</configuration>
这是我的Form1加载(根据错误消息发生空指针):
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
constring = ConfigurationManager.ConnectionStrings("connString").ConnectionString()
Dim sql As String = "SELECT * FROM duragadget ORDER BY skuNo ASC"
Dim connection As New OleDbConnection(constring)
Dim dataadapter As New OleDbDataAdapter(sql, connection)
Dim ds As New DataSet()
connection.Open()
dataadapter.Fill(ds, "dura")
connection.Close()
DataGridView1.DataSource = ds
DataGridView1.DataMember = "dura"
DataGridView1.Columns(1).Width = 125
DataGridView1.Columns(2).Width = 125
DataGridView1.Columns(3).Width = 125
DataGridView1.Columns(4).Width = 125
DataGridView1.Columns(5).Width = 5000
End Sub
以下是目标计算机上错误消息框对话框中显示的错误消息:
有关调用的详细信息,请参阅此消息的结尾 实时(JIT)调试而不是此对话框。
** * ** 异常文字 的 ** * **** System.NullReferenceException:未将对象引用设置为对象的实例。 在DuraGadget.Form1.Form1_Load(对象发送者,EventArgs e) 在System.EventHandler.Invoke(Object sender,EventArgs e) 在System.Windows.Forms.Form.OnLoad(EventArgs e) 在System.Windows.Forms.Form.OnCreateControl() 在System.Windows.Forms.Control.CreateControl(Boolean fIgnoreVisible) 在System.Windows.Forms.Control.CreateControl() 在System.Windows.Forms.Control.WmShowWindow(消息&amp; m) 在System.Windows.Forms.Control.WndProc(消息&amp; m) 在System.Windows.Forms.ScrollableControl.WndProc(消息&amp; m) 在System.Windows.Forms.Form.WmShowWindow(消息&amp; m) 在System.Windows.Forms.Form.WndProc(消息&amp; m) 在System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message&amp; m) 在System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message&amp; m) 在System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd,Int32 msg,IntPtr wparam,IntPtr lparam)
** * ** 已加载的程序集 的 ** * **** mscorlib程序 汇编版本:4.0.0.0 Win32版本:4.0.30319.296(RTMGDR.030319-2900)
DuraGadget 汇编版本:1.0.0.0 Win32版本:1.0.0.0
Microsoft.VisualBasic程序 汇编版本:10.0.0.0 Win32版本:10.0.30319.1由:RTMRel
构建系统 汇编版本:4.0.0.0 Win32版本:4.0.30319.1001建立者:RTMGDR
System.Core程序 汇编版本:4.0.0.0 Win32版本:4.0.30319.1构建者:RTMRel
System.Windows.Forms的 汇编版本:4.0.0.0 Win32版本:4.0.30319.1002建立者:RTMGDR
System.Drawing中 汇编版本:4.0.0.0 Win32版本:4.0.30319.1001建立者:RTMGDR
System.Runtime.Remoting 汇编版本:4.0.0.0 Win32版本:4.0.30319.1(RTMRel.030319-0100)
System.Data 汇编版本:4.0.0.0 Win32版本:4.0.30319.1(RTMRel.030319-0100)
System.Configuration 汇编版本:4.0.0.0 Win32版本:4.0.30319.1(RTMRel.030319-0100)
的System.Xml 汇编版本:4.0.0.0 Win32版本:4.0.30319.1构建者:RTMRel
** * ** JIT调试 的 ** * **** 要启用实时(JIT)调试,请使用.config文件 应用程序或计算机(machine.config)必须具有 在system.windows.forms部分中设置的jitDebugging值。 还必须使用调试编译应用程序 启用。
例如:
启用JIT调试时,任何未处理的异常 将被发送到计算机上注册的JIT调试器 而不是由此对话框处理。
答案 0 :(得分:1)
以下是连接字符串中的来源:
Data Source=C:\Users\Dave\Documents\duraGadget.mdb
您机器上exe的路径:
C:/Program Files/Default Company Name/DSN new Upgrade/DuraGadget.exe
很可能无法打开duraGadget文件,因为指定的文件夹(在目标计算机上)中不存在,因为C:\ Users \ Dave目录根本不存在。你说它是Windows XP,XP没有C:\ Users文件夹。是的。更新连接字符串的路径。
答案 1 :(得分:0)
伙计们感谢您提出的所有建议。经过几个小时的努力,我最终破获了这个。这是事情的组合。对于处于类似情况的任何人,通过右键单击项目文件夹...属性然后通过发布向导发布一次单击部署来使用发布选项。我也在使用不同的数据库。拆分数据库给我带来麻烦,在我的情况下不需要。更改这些问题,同时在app.config中声明单个连接字符串,同时确保我的数据集连接字符串已正确设置,最后将其排序,我现在可以将其安装在XP ... Win7等上。