希望有人可以帮我解决这个问题。
问题:我在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,它显示了另一个对话框(Data Tier-Application),这里有一个字段版本,但是当我从数据库中获得此结果时,显然更改此值对版本属性没有任何影响。 感谢
答案 0 :(得分:1)
VersionNumber
是一个Assembly属性。 [assembly: AssemblyVersion("x.x.x.x")]
属性通常存储在项目的 \ Properties \ AssemblyInfo.cs 文件中。
您可以直接编辑该文件,也可以转到:
项目(菜单) - > 项目属性(菜单项) - > SQLCLR (标签) - > 装配信息...... (按钮) - > 汇编版(字段)
如果您还没有 \ Properties \ AssemblyInfo.cs 文件,则在程序集信息弹出窗口中输入任何信息将在单击确定按钮。
请注意,SQL Server中存在一个错误,如果程序集未签名,则会阻止版本号显示在sys.assemblies
系统目录视图中:
签名的程序集将在sys.assemblies
中显示正确的版本号。在SQL Server Management Studio(SSMS)或Visual Studio中使用对象资源管理器查看程序集属性时,即使尚未对程序集进行签名,也会显示正确的版本号。尽管如此,通常最好还是签署Assemblies,所以只需签署它们就可以在这里遇到任何问题(特别是因为MS可能永远无法修复它;我确实在2016-01-28报告了该错误)。
在自动递增版本号方面,您可以在最后一个位置使用*
来执行此操作。例如:
[assembly: AssemblyVersion("1.2.3.*")]
或:
[assembly: AssemblyVersion("1.2.*")]
除了签署程序集之外,您应该知道从SQL Server 2017开始将程序集加载到SQL Server中的复杂性.SQL Server 2017引入了一个新的安全功能(" CLR严格安全性",一个高级选项)默认情况下启用并要求所有程序集(甚至标记为SAFE
的程序集)都使用非对称密钥(即强名称)或证书进行签名并具有登录名(基于用于签署程序集的任何内容) )具有UNSAFE ASSEMBLY
权限。有关如何使用Visual Studio / SSDT的详细信息,请参阅以下两篇帖子:
请避免使用新的受信任程序集"功能"因为它有更多的缺陷而不是好处,更不用说它首先是完全没有必要的,因为现有的功能已经处理了这种情况" Trusted Assemblies"本来打算解决。有关该内容的完整详细信息以及处理现有未签名大会的正确方法的演示,请参阅:SQLCLR vs. SQL Server 2017, Part 4: “Trusted Assemblies” – The Disappointment。