VS2017开发Web应用在Mac客户端报“Could not resolve host '(LocalDB)'”求助
问题原因与解决办法
嘿,这个问题的核心其实很清楚:LocalDB是微软专门给Windows做的轻量级SQL Server组件,Mac系统完全不支持它,所以你的应用在Mac上找不到(LocalDB)这个数据源是必然的——而且VS2017本身也没有Mac版本(现在Mac上的是Visual Studio for Mac,和Windows版不是一回事),装它也解决不了问题。
下面给你几个可行的解决方向,你可以根据自己的需求选:
1. 换用跨平台的文件型数据库(最简单省心的方案)
推荐直接换成SQLite,它是跨平台的文件型数据库,不需要单独跑数据库服务,Windows和Mac都能直接读取数据库文件。
- 操作步骤大概是这样:
- 在项目里装SQLite对应的EF驱动包(如果是用EF6的话找适配的SQLite Provider,用EF Core的话装
Microsoft.EntityFrameworkCore.Sqlite就行) - 把你现有.mdf里的数据迁移到SQLite的.db文件中
- 修改连接字符串成SQLite的格式,比如:
<add name="ShoppingWebsiteMVCEntities4" connectionString="Data Source=|DataDirectory|\ShoppingWebsiteMVC.db;" providerName="Microsoft.Data.Sqlite" />
- 在项目里装SQLite对应的EF驱动包(如果是用EF6的话找适配的SQLite Provider,用EF Core的话装
2. 在Mac上用Docker跑SQL Server(如果非要用SQL Server的话)
要是你不想换数据库,那可以在Mac上用Docker来部署SQL Server容器:
- 先在Mac上装Docker Desktop
- 拉取SQL Server的Docker镜像(选支持Mac的版本,比如
mcr.microsoft.com/mssql/server:2022-latest)并启动容器 - 把你本地.mdf里的数据迁移到Docker容器里的SQL Server实例中
- 修改连接字符串:把
data source=(LocalDB)\MSSQLLocalDB换成Docker里SQL Server的地址(一般是localhost,1433),同时把集成验证改成SQL Server账号密码登录,比如:<add name="ShoppingWebsiteMVCEntities4" connectionString="metadata=res://ShoppingWebsiteMVC/Models.ShoppingWebsiteModel.csdl|res://ShoppingWebsiteMVC/Models.ShoppingWebsiteModel.ssdl|res://ShoppingWebsiteMVC/Models.ShoppingWebsiteModel.msl;provider=System.Data.SqlClient;provider connection string="data source=localhost,1433;initial catalog=ShoppingWebsiteMVC;user id=sa;password=你的数据库密码;multipleactiveresultsets=True;connect timeout=30;application name=EntityFramework"" providerName="System.Data.EntityClient" />
3. 重要提醒:你的Web应用本身能不能在Mac上跑?
如果你的Web应用是基于.NET Framework开发的(VS2017默认的ASP.NET MVC模板大概率用的是这个),那Mac根本跑不了.NET Framework应用——因为.NET Framework是Windows专属的。这时候你得先把项目迁移到.NET Core/.NET 6+(跨平台版本的.NET),再配合上面的数据库方案,才能在Mac上正常运行。
最后补充一句:客户端Mac完全不需要安装VS2017,只要装对应版本的.NET SDK或者.NET Runtime,就能运行你的Web应用了。
内容的提问来源于stack exchange,提问作者mohsinali1317
相关产品推荐
相关产品推荐

