【问题标题】:SQL Server CLR project version number incrementSQL Server CLR 项目版本号增量
【发布时间】:2018-08-22 01:15:06
【问题描述】:

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

问题:我在 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

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

【问题讨论】:

    标签: sql-server visual-studio .net-assembly sql-server-data-tools sqlclr


    【解决方案1】:

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

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

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

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

    请注意,如果程序集签名,SQL Server 中存在一个错误,该错误会阻止版本号显示在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 报告了该错误)。

    就版本号自动递增而言,您可以在最后一个位置使用* 来执行此操作。例如:

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

    或:

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

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

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

    【讨论】:

    • 完美,但是,您能详细说明一下这个程序集在签名后的行为吗?他们在资源访问行为上有什么不同吗?
    • 不,由于签署了一个程序集,应该没有性能差异(至少我不知道)。此外,我添加了一些与使用 SQL Server 2017 相关的详细信息和链接。此外,签署程序集不会访问任何内容。它是包含的附加安全信息,可以使用,但不一定会使用。
    • 非常感谢......每当我们迁移到 SQL 2017 时,我都会牢记在心
    • 只是想知道你会不会碰巧知道如何自动增加这个版本号?
    • 我刚刚再次更新了一个我似乎记得在过去看到过的建议。试试看……
    猜你喜欢
    • 1970-01-01
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2018-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多