我正在使用一些用C#编写的SQL 2005 CLR代码。我们最近改变了一些函数以允许NULL参数。我们通过将参数从“double”更改为“SqlDecimal”类型来完成此操作。我们成功测试了开发中的更改,并已将更新部署到生产服务器。我们使用SQL脚本从服务器中删除现有代码,然后创建更新的程序集和相关对象。我们在开发和测试中使用的SQL脚本已经部署到生产服务器而没有任何更改,但是当我们运行它时,我们看到一个错误:
Creating CLR assemblies
Msg 6218, Level 16, State 2, Line 2
CREATE ASSEMBLY for assembly 'Company.Db.CLRStoredProcedures' failed because assembly 'Company.Db.CLRStoredProcedures' failed verification. Check if the referenced assemblies are up-to-date and trusted (for external_access or unsafe) to execute in the database. CLR Verifier error messages if any will follow this message
[ : StoredProcedures::clrproc_OSGBtoWGS84][mdToken=0x600002e][offset 0x0000002C] Unable to resolve token.
我用Google搜索了这个错误,但似乎找不到任何合理的错误。在我们所做的更改中,没有新的或更改的引用,所以我不相信它与服务器中遗漏的任何内容有关,代码之前已在那里工作了很长一段时间。有谁知道这里发生了什么?
答案 0 :(得分:0)
这不是我自己的问题的答案,但它确实提供了一个线索,并且 - 非常有用 - 是一种解决方案,因此它可以帮助处于类似情况的人。
我上面提到的部署脚本是通过编写开发数据库对象的脚本来创建的。而不是这样做,我发现如果我:
然后它起作用: - )
因此,与Visual Studio生成的部署脚本相比,我在部署对象后创建的脚本之间必定存在一些差异。
这并不能解释“无法解决令牌”问题,但它确实可以让我们知道正在发生的事情,更重要的是,它可以解决这个问题。
那就是说,我仍然很想知道“无法解决令牌”的错误意味着......
答案 1 :(得分:0)
我遇到了一个类似的莫名其妙的错误,关于"无法解析令牌"对于我的程序集中存在的方法。只有将目标平台从.NET 4.5更改为.NET 4.0才能让它工作。关于为什么可能有效的一些长期解释是in this msdn blog。