SQL 服务器 CLR 项目版本号递增

SQL Server CLR project version number increment

希望有人能帮我解决这个问题。

问题:我在 visual studio 2013 年有一个 sql CLR 项目。似乎一切正常,因为我可以在 SQLServer 上安装该项目并调用其存储过程等。但是我不知道安装时如何控制此程序集的版本号。当我 运行 跟随命令

select * from sys.assemblies

结果如下

name                principal_id    assembly_id  clr_name
MyTestSqlClrProject 1               65612        mytestsqlclrproject, ***version=0.0.0.0***, culture=neutral, publickeytoken=null, processorarchitecture=msil

我想知道的是我需要做什么来控制版本号

version=0.0.0.0

这样我就可以在构建成功时手动增加或自动增加它.. 我试图更改项目>属性>项目设置>在显示的屏幕上单击 Advance 显示另一个对话框(数据层应用程序)这有一个字段版本,但显然更改此值对版本没有任何影响当我从数据库中得到这个结果时的属性。 谢谢

VersionNumber 是一个程序集 属性。它是 [assembly: AssemblyVersion("x.x.x.x")] 属性,通常存储在项目的 \Properties\AssemblyInfo.cs 文件中。

您可以直接编辑该文件,也可以转到:

项目(菜单)-> 项目属性(菜单项)-> SQLCLR (选项卡)-> 程序集信息...(按钮)-> 程序集版本(字段)

如果您还没有 \Properties\AssemblyInfo.cs 文件,请在 Assembly Information 弹出窗口中输入任何信息将在单击 确定 按钮后创建该文件。

请注意 SQL 服务器中存在一个错误,如果程序集 不是 [=68],该错误会阻止版本号显示在 sys.assemblies 系统目录视图中=] 签名:

"version" incorrectly showing as 0.0.0.0 in sys.assemblies and ASSEMBLYPROPERTY(name, 'CLRName') for unsigned SQLCLR Assemblies

签名的程序集将在 sys.assemblies 中显示正确的版本号。在 SQL Server Management Studio (SSMS) 或 Visual Studio 中使用对象资源管理器查看程序集属性时,即使程序集尚未签名,也会显示正确的版本号。尽管如此,通常最好还是对程序集进行签名,所以只需对它们进行签名,您就不会有任何问题(特别是因为 MS 可能永远不会修复它;我确实在 2016-01-28 报告了该错误)。

就auto-incrementing版本号而言,您可以在最后位置使用*来做到这一点。例如:

[assembly: AssemblyVersion("1.2.3.*")]

或:

[assembly: AssemblyVersion("1.2.*")]

除了对程序集进行签名之外,您还应该注意从 SQL Server 2017 开始将程序集加载到 SQL 服务器的复杂性。SQL Server 2017 引入了一项新的安全功能( "CLR strict security",一个高级选项)默认情况下启用并要求所有程序集,即使是标记为 SAFE 的程序集,都使用非对称密钥(即强名称)或证书进行签名并具有登录名(基于用于签署大会的任何内容)具有 UNSAFE ASSEMBLY 权限。有关如何使用或不使用 Visual Studio / SSDT 的详细信息,请参阅我的以下两篇文章:

请避免使用新的 Trusted Assemblies "feature",因为它的缺陷多于好处,更不用说它一开始就完全没有必要,因为现有功能已经解决了 "Trusted Assemblies" 是意在解决。有关这方面的完整详细信息以及处理现有未签名程序集的正确方法的演示,请参阅:SQLCLR vs. SQL Server 2017, Part 4: “Trusted Assemblies” – The Disappointment.