【发布时间】: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