VS2019发布数据库项目遇数据库范围凭据导入错误及部署脚本问题求助
问题分析与解决办法
1. Database Scoped Credential 导入错误(VS2019 vs VS2017)
这个问题核心是VS2019自带的SSDT(SQL Server Data Tools)版本与旧项目的固定配置不兼容导致的。
原因:
你的项目.csproj里硬指定了VisualStudioVersion为11.0(对应VS2012的SSDT版本),而VS2019的SSDT版本远高于这个。新旧版本对Database Scoped Credential这类对象的导入逻辑存在差异:VS2017对旧配置的兼容性容错性更强,而VS2019的SSDT严格遵循新规则,导致无法识别源中的Credential对象,从而抛出错误。
解决办法:
修改.csproj配置,让它自动适配当前VS的SSDT版本,而非固定死旧版本:
<PropertyGroup> <!-- 移除固定的VisualStudioVersion初始赋值,让系统自动检测当前VS版本 --> <SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists> <!-- 仅在找不到对应版本时,才 fallback 到11.0 --> <VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion> </PropertyGroup>
也可以直接手动指定VS2019对应的版本号(16.0):
<PropertyGroup> <VisualStudioVersion Condition="'$(VisualStudioVersion)' == ''">16.0</VisualStudioVersion> <SSDTExists Condition="Exists('$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\SSDT\Microsoft.Data.Tools.Schema.SqlTasks.targets')">True</SSDTExists> <VisualStudioVersion Condition="'$(SSDTExists)' == ''">11.0</VisualStudioVersion> </PropertyGroup>
修改后重新加载项目,再尝试发布即可解决Credential导入错误。
2. PostDeployment.sql 脚本不运行(VS2019更新后)
原因:
VS2019更新后的SSDT对部署脚本的识别机制做了调整,大概率是脚本命名冲突或者项目文件中脚本关联配置丢失导致的。旧命名Scripts/Script.PostDeployment.sql可能被新版本SSDT的默认规则忽略,重命名为PostDeployment1.sql后避开了冲突,因此能正常执行。
解决办法:
办法一:修复项目文件中的脚本引用
打开.csproj文件,确认是否存在以下配置段,若缺失则手动添加:
<ItemGroup> <PostDeploy Include="Scripts\Script.PostDeployment.sql" /> </ItemGroup>
确保路径和文件名与实际文件完全一致,让SSDT明确识别这是部署后脚本。
办法二:通过VS界面重新关联脚本
- 在解决方案资源管理器中右键项目 → 属性
- 切换到 部署 选项卡
- 在 部署后脚本 下拉菜单中选中你的
Script.PostDeployment.sql文件 - 保存设置后重新发布项目
办法三:保留重命名后的脚本(临时方案)
如果前两种方法无效,保留PostDeployment1.sql的命名也能正常使用,但建议优先使用标准命名,方便后续项目维护。
内容的提问来源于stack exchange,提问作者Bagzli
相关产品推荐
相关产品推荐

