0

我正在使用一些用 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.

我已经用谷歌搜索了这个错误,但似乎找不到任何合理的东西。在我们所做的更改中,没有新的或更改的引用,因此我认为这与服务器中缺少的任何内容无关,代码之前已经在那里工作了很长一段时间。有谁知道这里发生了什么?

4

2 回答 2

0

这不是我自己问题的答案,但它确实提供了正在发生的事情的线索 - 非常有用 - 是一种解决方法,因此它可能会帮助处于类似情况的人。

我上面提到的部署脚本是通过编写开发数据库对象的脚本创建的。我没有这样做,而是发现如果我:

  1. 启动 SQL Profiler,捕获针对我的开发数据库执行的 SQL 语句。
  2. 使用 Visual Studio 中的“部署”功能将项目部署到我的 SQL Server。
  3. 选择 SQL Profiler File -> Export -> Extract SQL Server Events -> Extract Transact-SQL Events 菜单选项,将捕获的分解 SQL 保存到文件中。
  4. 使用文本编辑器稍微清理一下文件。
  5. 在生产服务器上运行捕获的 SQL。

然后它工作:-)

因此,与 Visual Studio 生成的部署脚本相比,我在部署对象之后创建的脚本之间肯定存在一些差异。

这并不能解释“无法解决令牌”问题,但它可能确实为我们提供了正在发生的事情的线索,更重要的是,提供了一种解决方法。

也就是说,我仍然很想了解“无法解析令牌”错误的含义......

于 2010-07-30T11:40:24.170 回答
0

对于我的程序集中存在的方法,我遇到了关于“无法解析令牌”的类似莫名其妙的错误。只有将目标平台从 .NET 4.5 更改为 .NET 4.0,我才能让它工作。在这个 msdn 博客中,有一些关于为什么这可能有效的详细解释。

于 2015-06-11T22:09:44.933 回答