You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server 2017部署CLR程序集遇System.Diagnostics.Tracing策略错误求助

SQL Server 2017 CLR程序集部署错误:System.Diagnostics.Tracing无法安装

我开发了一个C# CLR程序集,计划部署到SQL Server 2017(14.0.3048.4)环境。程序集目标框架为.NET Framework 4.8(服务器已安装版本4.8.03761,内部版本528049),开发工具使用Visual Studio 2022(17.8.3)。

执行CREATE ASSEMBLY命令部署.dll文件时,收到以下警告与错误:

警告:你正在注册的Microsoft .NET Framework程序集'system.diagnostics.tracing, version=4.2.0.0, culture=neutral, publickeytoken=b03f5f7f11d50a3a'未在SQL Server托管环境中充分测试,不受支持。未来若升级或更新该程序集或.NET Framework,CLR集成例程可能停止工作。详情请参阅SQL Server联机丛书。

Msg 6586, Level 16, State 1, Line 77
Assembly 'System.Diagnostics.Tracing' could not be installed because existing policy would keep it from being used.

我理解该警告,但不确定是否需要担忧,现在希望成功部署CLR项目,请问如何(是否应该)绕过此错误?

背景

  • 我认为自己使用的是最新版本的system.diagnostics.tracing,因此版本不符的解决方案不适用(虽尝试过不同版本)。
  • 曾考虑修改绑定重定向,但不确定是否有效,也未找到需要更新的文件。
  • 怀疑问题源于ClosedXML.Excel的使用——移除相关函数后项目可正常运行,但不确定是否确实是该程序集导致的。尝试降级到ClosedXML 0.97版本(看到有稳定性相关评论),但引发了其他问题,因此恢复到最新稳定版1.102,随即出现上述错误。
  • 尝试过将CLR项目目标框架改为.NET 4.7.2,但无济于事。另外尝试添加System.Diagnostics.Tracing引用,但该文件未出现在复制到服务器的bin/Release文件夹中。
  • 已多次添加、移除并重新添加所有能想到的.dll至GAC。

解决方案

  1. 确认SQL Server兼容的程序集版本
    SQL Server 2017的CLR托管环境默认适配.NET Framework 4.6.1及兼容的传统.NET Framework系统程序集,而你遇到的System.Diagnostics.Tracing 4.2.0.0属于.NET Standard/.NET Core相关版本,和SQL Server CLR环境存在兼容性冲突。优先使用.NET Framework版本的System.Diagnostics.Tracing(如4.0.0.0)。

  2. 调整ClosedXML依赖
    ClosedXML 1.x版本依赖的是.NET Standard生态的程序集,和SQL Server CLR不兼容,可尝试两种方案:

    • 回退到适配.NET Framework的ClosedXML版本:针对ClosedXML 0.97.x版本出现的问题,排查并修复依赖冲突或代码适配问题,该版本依赖传统.NET Framework程序集,更适合SQL Server CLR环境。
    • 强制引用兼容版本的依赖:修改项目依赖,强制引用.NET Framework版本的System.Diagnostics.Tracing,设置“复制本地”为true,确保该文件出现在bin/Release目录中,替换ClosedXML默认依赖的版本。
  3. 修改程序集版本策略(谨慎操作)
    若必须使用当前版本的ClosedXML,可尝试绕过版本限制,但存在风险:

    • 先查看服务器上的程序集策略:
      SELECT * FROM sys.assembly_policies
      
      确认是否有针对System.Diagnostics.Tracing的版本限制策略。
    • 若存在限制,删除对应的策略程序集(根据实际名称调整):
      DROP ASSEMBLY [policy.4.2.System.Diagnostics.Tracing]
      
    • 重新执行CREATE ASSEMBLY,并添加PERMISSION_SET = UNSAFE(ClosedXML通常需要较高权限):
      CREATE ASSEMBLY YourAssemblyName
      FROM 'C:\Path\To\Your\Assembly.dll'
      WITH PERMISSION_SET = UNSAFE;
      

    注意:UNSAFE权限会带来安全风险,后续.NET Framework升级可能导致CLR程序集失效,需做好测试和备份。

  4. 检查GAC中的程序集
    确认服务器GAC中存在SQL Server兼容的System.Diagnostics.Tracing版本(4.0.0.0),可查看C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Diagnostics.Tracing目录。若存在高版本程序集,需调整项目引用至兼容版本。


内容的提问来源于stack exchange,提问作者High Plains Grifter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 00:22:22