Comme vous l'avez noté, System.Web
est une bibliothèque non prise en charge. Pour pouvoir System.Web
vous y référer, vous devrez appeler CREATE ASSEMBLY
. Il semble que vous ayez essayé, mais comment avez-vous référencé l'emplacement de System.Web.dll
? L'avez-vous copié / collé à un autre emplacement? SQL Server essaiera de localiser les assemblys dépendants au même emplacement. En d'autres termes, si vous référencez l'emplacement de System.Web.dll
toutes les autres bibliothèques dépendantes vivant dans le même répertoire, cela devrait fonctionner correctement. Voici un exemple de travail. J'ai pu ajouter à la fois l' System.Web
assemblage et votre assemblage:
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
Vous pouvez voir dans les messages client tous les autres assemblys que SQL Server charge. Mais prenez note, SQL Server affiche l'avertissement suivant pour chacun d'eux:
que vous enregistrez n'est pas entièrement testé dans l'environnement hébergé SQL Server et n'est pas pris en charge. À l'avenir, si vous mettez à niveau ou réparez cet assembly ou le .NET Framework, votre routine d'intégration CLR peut cesser de fonctionner. Veuillez consulter la documentation en ligne de SQL Server pour plus de détails.
De même, mais en ajoutant System.Web
, jetez un œil aux assemblys suivants qui sont ajoutés:
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
Il convient de garder à l'esprit ce qui se passe réellement ici, et même si les autres assemblys supplémentaires n'ont pas de moyen pour les points d'entrée T-SQL, ils sont maintenant une dépendance. J'évaluerais les options pour voir si vous avez vraiment besoin de faire référenceSystem.Web
, ou s'il existe une autre voie pour accomplir ce que vous voulez.