在 Visual Studio 中部署 SQLCLR -- 如何覆盖生成的发布脚本

Posted

技术标签:

【中文标题】在 Visual Studio 中部署 SQLCLR -- 如何覆盖生成的发布脚本【英文标题】:Deploying SQLCLR in Visual Studio -- How to override the generated publish script 【发布时间】:2021-11-23 13:47:01 【问题描述】:

Microsoft SQL Server 2019 15.0.2000.5 Microsoft Visual Studio Community 2019 版本 16.11.2 Microsoft .NET Framework 版本 4.8.04084 SQL Server 数据工具 16.0.62107.28140

在使用 Visual Studio 发布 C# CLR 代码时,我想提供自己的脚本来创建一些程序集。在构建操作中,我看到了“部署前”(我已成功使用)和“部署后”的选项,但没有一个仅用于“部署”的选项。相反,VS 会生成自己的程序集创建脚本,但该脚本会失败。因为我已经写了一个成功的,我想:

获取它以使用我自己编写的脚本或 关闭此脚本的生成,只使用预部署脚本

我觉得这应该很明显,但如果是这样,我还没有想出正确的搜索词。

通过 VS 而不是 SSMS 进行部署的原因是我可以调试代码。我从函数返回的结果集有时会爆炸。我从 MS 文档中了解到,只有通过 VS 部署才能调试。

【问题讨论】:

那么为什么首先使用 Visual Studio / SSDT,至少对于这个特定的项目?如果您已经拥有程序集和关联的 T-SQL 包装器对象的部署脚本,那么听起来您已经拥有了所需的一切。 VS / SSDT 在这一点上提供什么好处? 我想调试代码,因为我从函数返回的结果集有时会爆炸。我从 MS 文档中了解到,只有通过 VS 部署才能进行调试。我将在问题中添加此说明。 我很好奇调试能力与 VS 部署相关联的推理/理由。我已经看到使用调试信息部署的程序集。但是一旦这些都在那里,我猜 VS 有足够的能力来进行调试。您可以使用“更改程序集...添加文件”将调试信息添加到程序集。 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 【参考方案1】:

由于误解了流程,我错误地描述了我的问题。我正在尝试的是两件不同的事情,都不正确。 使用我的预部署脚本,我会: a) 创建非对称密钥 b) 创建登录 c) 创建用户 d) 授予登录权限 e) 创建程序集 我怀疑这可能没问题,如果我没有在我的脚本中为程序集名称添加 CLR 前缀。当生成的脚本随后尝试创建程序集时,它会根据现有程序集(但名称不同)出现错误,而不是覆盖它。我曾想过也许我需要告诉生成的脚本使用其他名称(或禁止生成脚本)。

然后我尝试删除所有内容并运行部署。我的错误假设是生成的部署将/可以/应该写入密钥、登录名、用户,因为它在项目中有 SNK 信息。当然,它没有这样做。

当然,我的解决方案是从我的预部署脚本中删除程序集创建步骤,同时保留密钥、登录名、用户的创建。然后它成功地创建了程序集。

【讨论】:

以上是关于在 Visual Studio 中部署 SQLCLR -- 如何覆盖生成的发布脚本的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio项目需要部署后才能启动

Visual Studio 2012 中缺少部署项目类型

如何在 Visual Studio 2010 中部署基于 OpenCV 的独立项目?

在 Visual Studio 2008 中部署 ASP.NET MVC 应用程序

如何在没有 ftpServer 标签的 Visual Studio 2010 中构建部署包?

Visual Studio 2008 数据库项目部署基线