C# 如果ASP.NET 5应用程序在Ubuntu上运行,它能否与MS SQL Server通信?

C# 如果ASP.NET 5应用程序在Ubuntu上运行,它能否与MS SQL Server通信?,c#,sql-server,visual-studio-2015,asp.net-core,dnx,C#,Sql Server,Visual Studio 2015,Asp.net Core,Dnx,我使用Visual Studio 2015中的新建应用程序向导“bitbucket上的代码”创建了一个新的ASP.NET 5 web应用程序。之后,我获得了在Ubuntu 14.04 LTS上运行的源代码,足以加载主静态html页面,而DNXWeb为我的应用程序提供服务。但是,如果我单击“注册”链接,并尝试将电子邮件和密码放入web UI端和dnx web端的“错误。处理您的请求时出错”,我会得到以下信息: error : [Microsoft.AspNet.Diagnostics.Exce

我使用Visual Studio 2015中的新建应用程序向导“bitbucket上的代码”创建了一个新的ASP.NET 5 web应用程序。之后,我获得了在Ubuntu 14.04 LTS上运行的源代码,足以加载主静态html页面,而
DNXWeb
为我的应用程序提供服务。但是,如果我单击“注册”链接,并尝试将电子邮件和密码放入web UI端和dnx web端的“错误。处理您的请求时出错”,我会得到以下信息:

error   : [Microsoft.AspNet.Diagnostics.ExceptionHandlerMiddleware] 
An unhandled exception has occurred: Could not load file or assembly 
'System.Data.SqlClient, Version=4.0.0.0, Culture=neutral, 
PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. 
The system cannot find the file specified.
...
File name: 'System.Data.SqlClient'
   at System.Runtime.Loader.AssemblyLoadContext.LoadFromAssemblyName(AssemblyName assemblyName)
   at System.Runtime.Loader.AssemblyLoadContext.Resolve(IntPtr gchManagedAssemblyLoadContext, AssemblyName assemblyName)
   at Microsoft.Data.Entity.Storage.Internal.SqlServerConnection.CreateDbConnection()
   at Microsoft.Data.Entity.Internal.LazyRef`1.get_Value()
   at Microsoft.Data.Entity.Migrations.Internal.Migrator.Migrate(String targetMigration)
   at AspNetWebApplication.Controllers.AccountController.EnsureDatabaseCreated(ApplicationDbContext context)
   at AspNetWebApplication.Controllers.AccountController.<Register>d__10.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Mvc.Controllers.ControllerActionExecutor.<CastToObject>d__8`1.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Mvc.Controllers.ControllerActionInvoker.<InvokeActionAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Mvc.Controllers.FilterActionInvoker.<InvokeActionFilterAsync>d__50.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNet.Mvc.Controllers.FilterActionInvoker.<InvokeAsync>d__41.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Mvc.Infrastructure.MvcRouteHandler.<RouteAsync>d__6.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Routing.Template.TemplateRoute.<RouteAsync>d__27.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Routing.RouteCollection.<RouteAsync>d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Builder.RouterMiddleware.<Invoke>d__4.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNet.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNet.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNet.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at Microsoft.AspNet.Authentication.AuthenticationMiddleware`1.<Invoke>d__18.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.Diagnostics.ExceptionHandlerMiddleware.<Invoke>d__5.MoveNext()
我认为System.Data.SqlClient在其nuget软件包中没有提供任何
netcoreXX
DNXCoreXX
变体文件夹,因此该软件包实际上是不可移植的,尽管不会向用户发出任何警告。因此,类加载失败的原因很简单,就是NuGet有一个同名的包,但它不包含可由ubuntu上的coreclr x64找到并加载的变体文件夹。

11月19日更新 从现在起,如果您关闭了多个活动结果集,就可以在linux上使用coreclr的System.Data.SqlClient。请参阅上的发行说明。
运行linux的ASP.NET 5可以与MS MSQL通信,但可能不使用coreclr运行时

System.Data.SqlClient
仅标记为10月14日在中完成,而beta8于10月15日发布。我不确定它是否最终被包含在beta8中,但您发布的错误与beta7的错误相同,这让我相信该库仍然没有被包含。你的调查似乎也指出了这一点

如果是这种情况,那么在linux上运行它的唯一选项就是使用mono运行时(与beta7相同)。为此,请从project.json中删除
“dnxcore50”:{}
行,并告诉
dnvm
以mono而不是coreclr为目标。这还需要在linux机器上安装mono(我认为是4.1或更高版本)


如果您不想在机箱上安装mono,a也是一个选项。

我不希望它工作或尝试使用localdb,我希望它可以通过网络与Windows上的ms sql数据库通信。我相信它实际上不会工作。但它会尝试(通过实体框架的默认连接确定逻辑)尝试localdb的连接字符串,如果它在类加载时超过失败点,或者EF7的默认localdb行为必须是有条件的,有一点我会怀疑。我知道它可以在Windows上的dnxcore50上使用beta8,所以我希望它可以在Linux机器上通过网络与ms sql对话,但不能使用localdb,因为warren正在尝试,我很确定这就是Windowsonly@Joelocaldb(或与此相关的任何连接字符串)在这种情况下不相关,因为找不到System.Data.SqlClient。我刚刚运行了一个测试,发现尝试在dnxcore50上创建MSSQL连接可以在windows上运行,但是对于beta7和beta8,在linux上抛出与上面相同的异常。这很有趣,因为在Ubuntu14.04上,1.0.0-beta8中的mono运行时似乎完全崩溃,正如这个问题所述:@WarrenP看到我关于这个问题的答案似乎是dnxcore50 linux版本中的一个bug,希望它能在RC中修复
DNXCore50      MonoTouch10  netcore50     xamarinmac20
MonoAndroid10  net46        xamarinios10