接受的答案,而似乎解決了OP的問題,只是部分正確的,並提出了基本的過於簡單化的解釋這可能會導致其他人在錯誤的方向上出現類似的問題。
接受答案的問題是對.NET環境的誤解,同樣的問題本身也可能會出現同樣的誤解。在.NET中,CLR和框架是兩個獨立的東西,每個都有自己的版本。
CLR(公共語言運行時)是什麼執行託管代碼。這不會像框架那樣經常更新。 .NET Framework是一組庫,提供與特定版本的CLR進行交互的基本手段。
單一版本的CLR通常具有多個版本的Framework,它可以使用。然而,單一版本的框架只適用於CLR的一個特定版本。例如,CLR 2.0版與Framework 2.0,3.0和3.5版一起工作,而CLR 4.0版與.NET Framework的所有4.x版(即4.0,4.5,4.5.1,4.5.2,4.6等)。要查看CLR版本的圖表以瞭解Framework版本關係,請參閱.NET Framework Versions and Dependencies的MSDN頁面。
關於SQLCLR代碼,SQL Server僅適用於單一版本的CLR,具體版本取決於SQL Server的版本。 SQL Server 2005,2008和2008 R2僅適用於CLR版本2.由於CLR版本2僅適用於.NET Framework版本2.0,3.0和3.5,這意味着SQL Server 2005,2008和2008 R2僅適用於。 NET Framework版本2.0,3.0和3.5。當然,SQL Server 2005只包含.NET Framework 2.0版本,因此.NET Framework 3.0和3.5版本中有一些更新的庫,在SQL Server 2005中無法手動導入它們(例如System.Core和System.Xml.Linq)。沿着同樣的路線,SQL Server 2012,2014和2016靜態鏈接到CLR版本4,該版本與.NET Framework版本4.0,4.5,4.5.1,4.5.2,4.6一起使用。
至於,他們所報告的CLR版本(在接受的答案)來自System.Environment.Version
(在問題)和sys.dm_clr_properties.version
返回的信息,不的框架版本。所以要小心,不要混淆報告2.0或4.0這兩個東西,因爲您只能使用Framework 2.0或4.0版本。
幸運的是,由於向後兼容性,針對CLR 2 Framework版本(2.0,3.0和3.5)編譯的代碼將無需在SQL Server 2012及更新版本中重新編譯即可運行,即使它們在CLR版本4上
因此,使用2.0版的目標框架版本時通常不會出錯,但您絕對可以使用2.0以後的Framework版本。
要更深入地瞭解開發SQLCLR代碼,請查看下面的文章(和一般的系列),我寫道:
Stairway to SQLCLR Level 5: Development (Using .NET within SQL Server)
我有同樣的問題,但這一次,它爲System.Xaml。我如何解決這個問題?組件'System.Xaml'的CREATE ASSEMBLY失敗,因爲組件'System.Xaml'驗證失敗。檢查引用的程序集是否在數據庫中執行最新和可信(用於external_access或unsafe)。 CLR驗證錯誤消息,如果任何將遵循此消息 [:System.Windows.Markup.ValueSerializer :: CanConvertToString] [mdToken = 0x6000002] [偏移00000000]代碼大小爲零。 –
不確定。聽起來可能是同一個問題。有沒有什麼辦法來驗證你的System.Xaml內建的.net版本?如果不同,這可能會導致問題。 – horace
儘管這有效,但解釋並不完全正確。有關詳細信息,請參閱我的[回覆](http://stackoverflow.com/a/32334611/577765)(這些內容太多以至於無法發表評論)。 –