【问题标题】:How to deploy an ASP.NET website with a Linq to Sql component如何使用 Linq to Sql 组件部署 ASP.NET 网站
【发布时间】:2010-12-02 17:43:21
【问题描述】:

我有一个 .NET 3.5 Web 应用程序,我最近向 dbml 文件等添加了一些 Linq to Sql 功能。在本地,它运行良好。

但是,当我尝试部署它时,我得到一个空引用异常,显然是在它试图调用上下文对象的构造函数时。

为了增加复杂性,我使用了一个 Web 部署项目,它将它编译成一个 DLL。我假设 Linq to Sql 的东西会与其他所有东西一起编译。但是,现在我想我需要将 dbml 文件与 DLL 一起向上移动。

我在 App_Code 目录中有 dbml 文件,因此我尝试在远程服务器上重新创建该目录结构。但是.NET 不会让我在预编译的应用程序上有一个 App_Code 目录。所以我只是将 dbml 文件移动到根目录中——但我仍然得到错误。

救命!

这是我遇到的错误的堆栈跟踪:

[NullReferenceException:对象引用未设置为对象的实例。] codeCS.SarcStateDataDataContext..ctor() +28 DB_Interface.SarcStateDataDB..ctor() +26 eSARC_Basic..ctor() +56 ASP.esarc_basic_aspx..ctor() +14 __ASP.FastObjectFactory_sarcwriting.Create_ASP_esarc_basic_aspx() +20 System.Web.Compilation.BuildResultCompiledType.CreateInstance() +32 System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp, Boolean noAssert) +119 System.Web.UI.PageHandlerFactory.GetHandlerHelper(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +33 System.Web.UI.PageHandlerFactory.System.Web.IHttpHandlerFactory2.GetHandler(HttpContext context, String requestType, VirtualPath virtualPath, String physicalPath) +40 System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig) +160 System.Web.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +93 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155

DB_Interface.SarcStateDataDB 是我写的一个类,它调用上下文对象的构造函数:

codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext();

我不向它发送连接字符串或连接对象,因为程序的本地版本和部署版本都使用相同的远程数据库。但这会是问题吗?本地应用程序可以访问 dbml 文件中的连接字符串,但部署的应用程序没有... ??

更新:我查看了 Reflector 中的代码,它正在从 web.config 获取连接字符串,并且在该问题上一切看起来都差不多...

【问题讨论】:

    标签: asp.net linq-to-sql web-deployment-project


    【解决方案1】:

    好的,我找到了问题!它正在寻找的连接字符串名称——SarcWritingConnectionString——显然是 Linq to Sql 在我最初通过向导设置它时添加到 web.config 中的。而且我在部署项目的时候并没有把新的web.config上移到服务器上,因为我认为它没有改变。当我向上移动它时,一切正常!

    (我使用了已经在服务器资源管理器中设置的数据连接,而不是已经在 web.config 中的连接字符串——我什至不知道该怎么做。)

    感谢您的帮助——很高兴知道我不需要上移 dbml 文件。下次会更轻松!

    【讨论】:

      【解决方案2】:

      嗨辛西娅 您不需要部署 .dbml 文件。空引用异常不是缺少 .dbml 引起的。提供的信息很难猜出问题所在,但首先要检查生产数据库和开发数据库上的数据是否相同。也许生产数据库缺少一些记录,你从那里得到空引用。还要确保使用 VS 发布向导部署项目(右键单击项目 -> 发布)。另外,如果这没有帮助,您可以发布异常的堆栈跟踪吗? 谢谢

      【讨论】:

      • 谢谢 Davita -- 我已经更新了我的帖子,提供了更多信息。由于开发和生产数据库是相同的,我认为这不是问题。
      【解决方案3】:

      我建议您在实例化类时将要使用的连接字符串传递给DB_Interface.SarcStateDataDB,然后在其codeCS.SarcStateDataDataContext context = new SarcStateDataDataContext(); 中使用它。

      然后您可以在应用程序级别管理连接字符串,大概在您的 web.config 文件中。这样,如果您曾经切换到使用与 prod 分开的 dev db,那么您可以轻松地转换到单独的连接字符串。

      【讨论】:

        猜你喜欢
        • 2011-09-29
        • 1970-01-01
        • 1970-01-01
        • 2023-04-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多