【问题标题】:Deploying SQLCLR in Visual Studio -- How to override the generated publish script在 Visual Studio 中部署 SQLCLR -- 如何覆盖生成的发布脚本
【发布时间】: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 有足够的能力来进行调试。您可以使用“更改程序集...添加文件”将调试信息添加到程序集。
  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: c# sql-server visual-studio publish sqlclr


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-17
    • 2011-07-02
    相关资源
    最近更新 更多