Как исправить ошибку «Не удается загрузить динамически сгенерированную сборку сериализации» - PullRequest
0 голосов
/ 31 января 2019

"Невозможно загрузить динамически сгенерированную сборку сериализации."ошибка при выполнении функции clr, которая вызывает веб-службу в SQL Server 2008 R2.

У меня есть проект базы данных в Visual Studio 2017, который включает функцию clr, которая вызывает веб-службу.

Свойства проекта включают в себя следующее:

Целевая платформа параметров проекта = SQL Server 2008

Целевая платформа SQLCLR = .Net Framework 3.5

Сборка создания сериализации SQLCLR = Вкл

Сборка сериализации создается в базе данных сценарием после развертывания при публикации базы данных.Когда я публикую базу данных в экземпляре SQL Server 2008R2 на моем ПК с Windows 10, выполнение функции clr приводит к ошибке «Невозможно загрузить динамически сгенерированную сборку сериализации», однако, когда база данных публикуется в экземпляре SQL2016 на моем ПК, онаработает OK

Сценарий размещения после регистрации сборки сериализации:

CREATE ASSEMBLY [CifasEdit.XmlSerializers] FROM 'C:\tfs\CIFAS\Source\Database\Hub\CifasEdit\CifasEdit\bin\Release\CifasEdit.XmlSerializers.dll' 
WITH PERMISSION_SET = EXTERNAL_ACCESS;
GO

Полная ошибка здесь

A .NET Framework error occurred during execution of user-defined routine or aggregate "xxx": 
System.InvalidOperationException: Cannot load dynamically generated serialization assembly. In some hosting environments assembly load functionality is restricted, consider using pre-generated serializer. Please see inner exception for more information. ---> System.IO.FileLoadException: LoadFrom(), LoadFile(), Load(byte[]) and LoadModule() have been disabled by the host.
System.IO.FileLoadException: 
   at System.Reflection.Assembly.nLoadImage(Byte[] rawAssembly, Byte[] rawSymbolStore, Evidence evidence, StackCrawlMark& stackMark, Boolean fIntrospection)
   at System.Reflection.Assembly.Load(Byte[] rawAssembly, Byte[] rawSymbolStore, Evidence securityEvidence)
   at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames)
   at Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(CompilerParameters options, String[] sources)
   at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.
    ...
System.InvalidOperationException: 
   at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence)
   at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies)
   at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence)
   at System.Xml.Serialization.XmlSerializer.GetSerializersFromCache(XmlMapping[] mappings, Type type)
   at System.Xml.Serialization.XmlSerializer.FromMappings(XmlMapping[] mappings, Type type)
   at System.Web.Services.Protocols.SoapClientType..ctor(Type type)
   at System.Web.Services.Protocols.SoapHttpClientProtocol..ctor()

1 Ответ

0 голосов
/ 01 февраля 2019

Похоже, что сборка сериализации, автоматически сгенерированная VS2017, не очень хорошо работает с SQL Server 2008 R2, хотя она прекрасно работает с SQL2016.отдельный проект и сгенерировал сборку сериализации вручную, используя sgen.exe, затем зарегистрировал обе библиотеки.

Обязательно используйте версию sgen для clr2.0, на моем ПК она была расположена в

* 1006.*

Команда для создания сборки сериализации:

sgen.exe c:\YourDir\YourAssembly.dll 

Это создаст сборку с именем YourAssembly.XmlSerializers.dll. Зарегистрируйте обе сборки в SQL Server:

CREATE ASSEMBLY [YourAssembly] FROM 'c:\YourDir\YourAssembly.dll' WITH PERMISSION_SET  = EXTERNAL_ACCESS

CREATE ASSEMBLY [YourAssembly.XmlSerializers] FROM 'c:\YourDir\YourAssembly.XmlSerializers.dll' WITH PERMISSION_SET = SAFE
...