Ошибка создания сборки CLR для SQL Server 2012
У меня есть пакет CLR, созданный с использованием VB.NET в Visual Studio 2012, который я пытаюсь развернуть в базе данных SQL Server 2012. Решение имеет два проекта, один из которых будет CLR, а другой ссылается на веб-службу. Каждый раз, когда я пытаюсь выполнить развертывание в SQL, я получаю следующую ошибку
(47,1): SQL72014: поставщик данных.Net SqlClient:
Сообщение 6211, уровень 16, состояние 1, строка 1
Не удалось создать CREATE ASSEMBLY, поскольку тип "SSRSService.ReportExecutionService.ReportExecutionService" в безопасной сборке "SSRSService" имеет статическое поле "__ENCList". Атрибуты статических полей в безопасных сборках должны быть помечены только для чтения в Visual C#, ReadOnly в Visual Basic или initonly в Visual C++ и промежуточном языке.
Произошла ошибка во время выполнения пакета.
Я уже гарантировал, что проект имеет уровень разрешений UNSAFE и что TRUSTWORTHY включен для SQL Server.
Странно то, что поле, которое, как он утверждает, является проблемой, даже не существует! Проект, на который он жалуется, содержит только ссылку на веб-сервис и ничего более.
2 ответа
Я был в состоянии решить проблему. Я пропустил ни одного шага, когда сделал ссылку из проекта запуска на проект веб-службы.
Все, что мне нужно было сделать, это развернуть узел "Ссылки" в Project Explorer для запуска проекта и выбрать ссылку на проект. Оттуда перейдите в окно "Свойства" и установите для свойства " Разрешение" значение " Небезопасно".
Поиск по названию этого поля показал мне обходной путь, предоставленный Microsoft MVP Дэн Гузман: " Сборка при вставке приводит к ошибке статического поля, но у меня нет полей"
Компилятор VB.NET ссылается на внутренний вспомогательный класс со статическим полем, поэтому вы не сможете создать сборку из отладочной сборки VB.NET. Попробуйте вместо этого создать и развернуть сборку релиза (или используйте C#).
Стоит попробовать.