La réponse acceptée, tout en semblant résoudre le problème de l'OP, est partiellement correcte et présente une explication trop simpliste du sous-jacent cause, ce qui pourrait conduire d'autres personnes ayant un problème similaire dans la mauvaise direction.
Le problème avec la réponse acceptée est une mauvaise compréhension de l'environnement .NET, et ce même malentendu peut également être vu dans la question elle-même. Au sein de .NET, le CLR et le Framework sont deux choses distinctes, chacune avec leurs propres versions.
Le CLR (Common Language Runtime) est ce qui exécute le code managé. Ce n'est pas mis à jour presque aussi souvent que le cadre. Le .NET Framework est une collection de bibliothèques qui fournissent les moyens d'interaction avec une version particulière du CLR.
Une version unique du CLR comporte généralement plusieurs versions du Framework avec lequel il fonctionne. Une version unique du Framework ne fonctionne cependant qu'avec une version spécifique du CLR. Par exemple, CLR version 2.0 fonctionne avec Framework version 2.0, 3.0 et 3.5, tandis que CLR version 4.0 fonctionne avec toutes les versions 4.x du .NET Framework (par exemple 4.0, 4.5, 4.5.1, 4.5.2, 4.6 , etc). Pour voir le graphique de la version CLR vers les relations de la version Framework, consultez la page MSDN pour .NET Framework Versions and Dependencies.
En ce qui concerne le code SQLCLR, SQL Server ne fonctionne qu'avec une seule version du CLR et la version spécifique dépend de la version de SQL Server. SQL Server 2005, 2008 et 2008 R2 fonctionnent uniquement avec CLR version 2. Puisque CLR version 2 fonctionne uniquement avec .NET Framework versions 2.0, 3.0 et 3.5, cela signifie que SQL Server 2005, 2008 et 2008 R2 fonctionnent uniquement avec. NET Framework versions 2.0, 3.0 et 3.5. Bien sûr, SQL Server 2005 incluait uniquement .NET Framework version 2.0, de sorte qu'il existe quelques bibliothèques plus récentes dans .NET Framework version 3.0 et 3.5 qui ne fonctionnent pas dans SQL Server 2005 sans les importer manuellement (par exemple, System.Core et System.Xml.Linq). Dans le même ordre d'idées, SQL Server 2012, 2014 et 2016 sont liés statiquement à CLR version 4, qui fonctionne avec .NET Framework versions 4.0, 4.5, 4.5.1, 4.5.2, 4.6.
En ce qui concerne les informations retournées à la fois System.Environment.Version
(dans la question) et sys.dm_clr_properties.version
(dans la réponse acceptée), ils signalent la CLR version pas Framework Version. Veillez donc à ne pas confondre ces deux choses rapportant 2.0 ou 4.0, ce qui signifie que vous ne pouvez utiliser que Framework version 2.0 ou 4.0. Heureusement, grâce à la rétrocompatibilité, le code compilé avec les versions de CLR 2 Framework (2.0, 3.0 et 3.5) fonctionnera sans avoir besoin d'être recompilé dans SQL Server 2012 et plus récent, même s'ils sont sur la version 4 de CLR. Donc, vous ne pouvez généralement pas vous tromper avec l'utilisation d'une version 2.0 de Framework Framework, mais vous pouvez très certainement utiliser les versions de Framework au-delà de 2.0.
Pour une analyse plus approfondie regard sur le développement de code SQLCLR, consultez l'article suivant (et la série en général), que j'ai écrit:
Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)
J'ai le même problème, mais cette fois, pour System.Xaml. Comment est-ce que j'ai résolu ceci? CREATE ASSEMBLY pour l'assembly 'System.Xaml' a échoué car l'assembly 'System.Xaml' a échoué à la vérification. Vérifiez si les assemblys référencés sont à jour et fiables (pour external_access ou dangereux) à exécuter dans la base de données. Messages d'erreur CLR Verifier, le cas échéant, suivront ce message [: System.Windows.Markup.ValueSerializer :: CanConvertToString] [mdToken = 0x6000002] [offset 0x00000000] La taille du code est zéro. –
pas sûr de celui-là. On dirait que ça pourrait être le même problème. Y at-il un moyen de vérifier la version de .net votre System.Xaml a été construit sous? Si c'est différent, cela pourrait causer le problème. – horace
Bien que cela fonctionne, l'explication n'est pas entièrement correcte. S'il vous plaît voir ma [réponse] (http://stackoverflow.com/a/32334611/577765) pour plus de détails (qui étaient trop pour mettre dans un commentaire). –