Como você observou, System.Web
é uma biblioteca não suportada. Para fazer referência, System.Web
você precisará fazer uma chamada para CREATE ASSEMBLY
. Parece que você tentou isso, mas como você fez referência à localização System.Web.dll
? Você copiou / colou em um local diferente? O SQL Server tentará localizar os assemblies dependentes no mesmo local. Em outras palavras, se você fizer referência à localização de System.Web.dll
todas as outras bibliotecas dependentes que vivem no mesmo diretório, ela deverá funcionar perfeitamente. Aqui está um exemplo de trabalho. Consegui adicionar tanto a System.Web
montagem quanto a sua:
create assembly [System.Web]
from 'C:\Windows\Microsoft.NET\Framework64\v4.0.30319\System.Web.dll'
with permission_set = unsafe;
go
create assembly SystemWebTest
from 'c:\SqlServer\SystemWebTest.dll'
with permission_set = safe;
go
Você pode ver nas mensagens do cliente todos os outros assemblies que o SQL Server carrega. Mas observe, o SQL Server exibe o seguinte aviso para cada um deles:
você está se registrando não é totalmente testado no ambiente hospedado do SQL Server e não é suportado. No futuro, se você atualizar ou reparar esse assembly ou o .NET Framework, sua rotina de integração do CLR poderá parar de funcionar. Consulte os Manuais Online do SQL Server para obter mais detalhes.
Da mesma forma, mas adicionando System.Web
, dê uma olhada nos seguintes assemblies adicionados:
select
name,
permission_set_desc,
is_visible
from sys.assemblies
where is_user_defined = 1
order by is_visible desc;
name permission_set_desc is_visible
System.Web UNSAFE_ACCESS 1
SystemWebTest SAFE_ACCESS 1
Microsoft.Build.Framework UNSAFE_ACCESS 0
System.Xaml UNSAFE_ACCESS 0
System.ComponentModel.DataAnnotations UNSAFE_ACCESS 0
System.Runtime.Caching UNSAFE_ACCESS 0
System.Web.ApplicationServices UNSAFE_ACCESS 0
System.Drawing UNSAFE_ACCESS 0
Microsoft.Build.Utilities.v4.0 UNSAFE_ACCESS 0
System.DirectoryServices UNSAFE_ACCESS 0
System.DirectoryServices.Protocols UNSAFE_ACCESS 0
System.EnterpriseServices UNSAFE_ACCESS 0
System.Runtime.Remoting UNSAFE_ACCESS 0
System.Runtime.Serialization.Formatters.Soap UNSAFE_ACCESS 0
System.Design UNSAFE_ACCESS 0
System.Windows.Forms UNSAFE_ACCESS 0
Accessibility UNSAFE_ACCESS 0
System.Drawing.Design UNSAFE_ACCESS 0
System.Web.RegularExpressions UNSAFE_ACCESS 0
Microsoft.Build.Tasks.v4.0 UNSAFE_ACCESS 0
System.ServiceProcess UNSAFE_ACCESS 0
System.Configuration.Install UNSAFE_ACCESS 0
System.Runtime.Serialization UNSAFE_ACCESS 0
System.ServiceModel.Internals UNSAFE_ACCESS 0
SMDiagnostics UNSAFE_ACCESS 0
Vale a pena ficar atento ao que realmente está acontecendo aqui, e mesmo que os outros assemblies adicionais não possuam formas para os pontos de entrada do T-SQL, eles agora são uma dependência. Eu ponderaria as opções para ver se você realmente precisa fazer referênciaSystem.Web
ou se há outra rota para realizar o que deseja.