Хост CLR SQL Server будет использовать самую высокую версию .NET Framework, установленную в системе, для той версии CLR, с которой он связан.SQL Server 2005 - 2008 R2 связан с CLR версии 2.0, поэтому они будут использовать .NET Framework версий 2.0, 3.0 и 3.5.SQL Server 2012 и новее связаны с CLR версии 4.0 и, следовательно, будут использовать .NET Framework версии 4.x.
При этом некоторые библиотеки Framework являются встроенными и не требуют добавления вручную.,Они перечислены здесь:
Поддерживаемые библиотеки .NET Framework
Если вам нужна библиотека, которой нет в этом списке, вы можете добавить ее самостоятельно, , но это не значит, что вы можете добавить просто любую библиотеку.SQL Server допускает только чистые библиотеки MSIL, а не смешанный режим (mixed = содержит как управляемый, так и неуправляемый код).Если вам требуется библиотека в смешанном режиме, то вы ничего не сможете сделать, чтобы загрузить ее в SQL Server.ТАКЖЕ, имейте в виду, что даже если сегодня библиотека является чистым MSIL, это не означает, что она не может быть преобразована в смешанный режим в будущем обновлении Framework (и да, это произошло).
Учитывая все это, следующий элемент в сообщении об ошибке:
Размер кода равен нулю.
, вероятно, указывает на то, что вы пытаетесь загрузить справочную библиотеку,Вам нужно загрузить фактическую библиотеку, а не ее эталонную версию.
Я попробовал следующее на SQL Server 2017 и смог загрузить их все, хотя не все нужно было загружатьв явном виде.Некоторые автоматически загружали другие, поскольку они находились в одной папке:
CREATE ASSEMBLY [Microsoft.CSharp]
FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.CSharp.dll'
WITH PERMISSION_SET = UNSAFE;
-- includes System.Dynamic
CREATE ASSEMBLY [System.Runtime.Serialization]
FROM 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Runtime.Serialization.dll'
WITH PERMISSION_SET = UNSAFE;
-- includes SMDiagnostics, System.ServiceModel.Internals
Затем проверьте с помощью:
SELECT * FROM sys.assemblies;
/*
Microsoft.CSharp
System.Dynamic
System.Runtime.Serialization
System.ServiceModel.Internals
SMDiagnostics
*/
Обратите внимание, что на данный момент я установил базу данных на TRUSTWORTHY ON
,Это не то, что я обычно рекомендую, и, возможно, в этом нет необходимости, но до тех пор, пока я не закончу свой пост, посвященный тому, как правильно справиться с этим и легко , TRUSTWORTHY
будет достаточно.
Iне было библиотек EntityFramework для загрузки, но ошибка, которую вы получаете, находится на первой, а операторы, которые я разместил выше, не получают эту ошибку.Если вы можете выполнить эти 2 оператора, чтобы загрузить все 5 библиотек, а затем получить ошибку на EntityFramework, мы рассмотрим конкретное сообщение об ошибке.
HOWEVER, , даже если вы можете загрузить все эти библиотеки DLL, включая две для EntityFramework, это не является гарантией того, что вы действительно сможете использовать EF.Возможно, что EF не может работать в SQLCLR.Я не могу вспомнить об EF конкретно, но я знаю, что SMO, например, включает в себя код, чтобы определить, работает ли он в SQL Server, и если это так, то возникнет исключение, указывающее, что он не разрешен для запускав SQL Server.