Почему не удается создать CREATE ASSEMBLY с ошибкой «Не удается разрешить токен»? - PullRequest
0 голосов
/ 30 июля 2010

Я работаю с кодом SQL 2005 CLR, написанным на C #.Недавно мы изменили некоторые функции, чтобы разрешить параметры 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.

Я обнаружил эту ошибку, но не могукажется, найти что-нибудь разумное.В сделанных нами изменениях не было новых или измененных ссылок, и поэтому я не верю, что это связано с отсутствием чего-либо на сервере, код ранее работал там довольно давно.Кто-нибудь знает, что здесь происходит?

Ответы [ 2 ]

0 голосов
/ 12 июня 2015

Я столкнулся с аналогичной необъяснимой ошибкой, связанной с «Невозможно разрешить токен» для метода, присутствующего в моей сборке. Только изменив целевую платформу с .NET 4.5 на .NET 4.0, я смог заставить ее работать. Некоторое длинное объяснение того, почему это могло сработать, в этом блоге msdn .

0 голосов
/ 30 июля 2010

Это не ответ на мой собственный вопрос, но он дает подсказку о том, что происходит, и - очень полезно - это обходной путь, и поэтому он может помочь кому-то в подобной ситуации.

Сценарий развертывания, на который я ссылался выше, был создан с помощью сценариев объектов базы данных разработки.Вместо этого я обнаружил, что если я:

  1. Запускаю SQL Profiler, получая операторы SQL, выполняемые для моей базы данных разработки.
  2. Используйте функцию «Развернуть» в Visual Studio, чтобыразверните проект на моем SQL Server.
  3. Выберите пункт меню «Файл профиля SQL» -> «Экспорт» -> «Извлечь события SQL Server» -> «Извлечь события Transact-SQL», чтобы сохранить захваченный SQL-запрос депо в файл.
  4. Немного очистите файл с помощью текстового редактора.
  5. Запустите захваченный SQL на рабочем сервере.

Тогда все заработает: -)

Поэтому между сценарием, который я создаю, ПОСЛЕ развёртывания объектов должно быть некоторое различие по сравнению со сценарием развертывания, который генерирует Visual Studio.

Это не объясняет проблему «Невозможно разрешить токен» как таковую, но это, возможно, дает нам ключ к пониманию того, что происходит, и, что более важно, способ обойти это.

Тем не менее, я все еще хочу понять, что означает ошибка "Невозможно разрешить токен" ...

...