代码之家  ›  专栏  ›  技术社区  ›  Elliveny

为什么创建程序集失败并出现错误“无法解析令牌”?

  •  0
  • Elliveny  · 技术社区  · 14 年前

    我正在使用一些用C#编写的sql2005clr代码。我们最近修改了一些函数以允许空参数。为此,我们将参数从“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.
    

    我在谷歌上搜索过这个错误,但似乎找不到任何有意义的东西。在我们所做的更改中,没有新的或更改的引用,因此我不认为这与服务器中丢失的任何内容有关,代码在那里已经运行了相当长的一段时间。有人知道这是怎么回事吗?

    2 回复  |  直到 14 年前
        1
  •  0
  •   Elliveny    14 年前

    这并不是对我自己问题的回答,但它确实给出了一个正在发生的事情的线索——非常有用——是一个解决办法,因此它可能会帮助处于类似情况的人。

    1. 启动SQL Profiler,捕获针对我的开发数据库执行的SQL语句。
    2. 使用VisualStudio中的“Deploy”函数将项目部署到我的SQL Server。
    3. 选择SQL事件探查器文件->导出->提取SQL Server事件->提取Transact-SQL事件菜单选项,将捕获的解聚SQL保存到文件中。
    4. 使用文本编辑器稍微清理一下文件。

    然后它工作:-)

    因此,与visualstudio生成的部署脚本相比,我在部署对象之后创建的脚本肯定有一些不同。

    这并不能解释“无法解决代币”的问题,但它也许给了我们一个线索,正在发生什么,更重要的是,一个解决它的方法。

    也就是说,我仍然渴望理解“无法解析令牌”错误的含义。。。

        2
  •  0
  •   Anssssss    10 年前

    对于程序集中存在的一个方法,我遇到了一个类似的莫名其妙的错误,即“无法解析令牌”。只有将目标平台从.NET4.5更改为.NET4.0,我才能让它工作。关于这可能起作用的原因,有一个很长的解释 in this msdn blog .