2014-10-20 67 views
0

我正在爲SQL Server 2008創建一個CLR程序集,該程序集僅支持.NET 2.0程序集。此外,SQL Server還需要一個強名稱密鑰,每個程序集要註冊。簽署一個未簽名的程序集並使用ilasm.exe針對.NET 2.0

我試圖創建參考json.net的.NET 2.0版(https://json.codeplex.com/)的程序集。但是,我的項目無法生成SNK文件,因爲Newtonsoft.Json.dll本身是未簽名的。 (至少,當我嘗試建立我的項目並簽名,我得到的錯誤。)

我得到解決此使用此處介紹的技巧:不過 http://buffered.io/posts/net-fu-signing-an-unsigned-assembly-without-delay-signing/

,重組Newtonsoft.Json.dll時與我的項目的SNK一樣,它必須生成一個高於.NET 2.0的目標框架的DLL。我知道這是因爲我得到SQL Server中的以下錯誤:

CREATE ASSEMBLY for assembly 'Newtonsoft.Json' failed because the assembly is built for an unsupported version of the Common Language Runtime. 

有誰知道如何使ilasm.exe生成目標框架.NET 2.0的組件?或者我可能完全錯誤地解決了這個問題 - 如果在2008年CLR程序集中使用Newtonsoft.Json更好的解決方案,我很想知道。謝謝!

+0

在SQL Server中使用的程序集中真的需要* json *嗎?如果你沒有真正使用它,只需刪除參考。 – acfrancis 2014-10-20 21:35:14

+0

@acfrancis - 我完全同意這種功能不應該在CLR中。但是,考慮到我的項目的限制,我需要能夠通過SQL存儲過程來解釋json。我知道這很醜陋,但它需要完成。除了使用Newtonsoft.Json之外,你知道更簡單的方法嗎?再次,我需要的唯一功能是能夠將JSON文檔解碼爲C#中的對象。 – cody 2014-10-20 21:59:11

回答

3

請確保您從正確的目錄運行ilasm。 .NET Framework的每個版本的工具都位於不同的目錄中。

如果您使用PATH中的一個,則可以在提示符下輸入where ilasm以查找找到的版本。

我懷疑你從鏈接的博客這個建議是導致你引入歧途

我們需要打開它在PATH環境變量中的.NET框架二進制命令提示符。最簡單的方法是打開Visual Studio命令提示符(通常位於程序菜單中的「Visual Studio 20XX」的「Visual Studio Tools」子文件夾下)。

沒有提及版本,或者.NET Framework運行時安裝了比Visual Studio安裝的更多版本的工具。

例如,我的系統上我有ILASM在

C:\ WINDOWS \ Microsoft.NET \框架\ V2.0.50727

C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

(和其他)

運行v4之一,這是我從「Visual Studio 2013 x64本地工具命令提示符」中獲得的將創建一個.NET 4兼容的程序集,運行v2創建一個.NET 2兼容的程序集。

+0

這工作 - 我使用了2.0版本的ilasm,並沒有問題。但是,我發現Newtonsoft.Json有各種各樣的靜態字段,所以我不能註冊它,除非我設置external_access = unsafe(我不能這麼做)。 – cody 2014-10-20 21:56:51

+0

雖然我們在這裏,你知道任何輕量級,簡單的庫,將解碼一個JSON文檔到一個對象嗎?這是我尋找的唯一功能,這是我的CLR所必需的。 – cody 2014-10-20 21:57:16

+0

@環境:對不起,我不使用JSON非常多,所以我不知道.NET或SQL服務器有什麼選項。 – 2014-10-20 22:25:00