2017-01-28 40 views
1

我需要在.net v2.0中構建一個DLL,作爲外部DLL(CLR程序集)從SQL Server 2008中調用。這個DLL必須在.net v2.0中才能與我們的SQL Server版本兼容,並且只能在SQL Server和.NET中的其他C#功能之間架起一座橋樑。所以我想了解.Net V4.5中的另一個DLL,但是我無法編譯它!我有休耕警告:我們可以在.Net V2.0中引入另一個內置.Net V4.5的DLL嗎?

警告MSB3258:主要參考「my_dll」無法得到解決,因爲它在.NET Framework組件的間接依賴「mscorlib程序,版本= 4.0.0.0,文化=中立, PublicKeyToken = b77a5c561934e089「,它具有比當前目標框架中的版本」2.0.0.0「更高的版本」4.0.0.0「。

我們可以忽略程序集版本的可兼容性嗎?或者我們可以有另一種解決方案來調用SQL Server 2008中.net V.4.5開發的任何函數嗎?

+2

這不能工作,因爲您的SQL Server的CLR版本也是2.0。它不能加載4.5程序集,即使該程序集根本沒有引用其他系統程序集(它當然是這樣)。重新編譯*所有*程序集涉及到目標.NET 2.0,或升級您的服務器。 –

+0

@JeroenMostert看起來像你在評論框中輸入了一個答案。 –

+0

@MartinSmith:我知道,但那是因爲我討厭給出答案「不,你不可能做到這一點」,如果沒有我熱愛問題的大腦流失,試圖非常非常難以找到某種解決方案(「也許你可以濫用COM!也許你可以在這種情況下使用程序集版本標題!也許......「關閉)。而且OP確實要求另一個解決方案,而且我知道已經有答案的問題吸引的眼睛更少。 ...我現在不再散漫了。 –

回答

0

我不確定我在回答你的問題,但回答它你只需要改變項目依賴到.NET 4.5。 .NET框架可以引用其他框架版本,但您必須考慮依賴關係的順序。如果2.0使用的是4.0庫,那麼它會失敗,因爲它沒有對組件自帶的引用。當你的項目被編譯時,它被放置在一個單獨的程序集中,並且程序集必須引用所有正在使用的成分。然而;如果你的項目是單獨的dll,聽起來像是這樣,那麼只要4.0成員沒有在程序集中公開公開就可以參考它們。然而;這意味着該DLL需要安裝4.0的環境才能運行。

爲了運行相同程序集的不同版本,您需要將assemblyBinding添加到您的項目配置中。

這是有點難以遵循,但看看這篇文章,看看它是否有助於你更好地理解如何實現這一點。

Post

0

按本answer here,可以通過暴露需要作爲COM組件以引用.NET 4.5裝配。 .Net的所有版本都以COM爲核心,因此它可以作爲「最低公分母」溝通渠道。根據您的要求,您可能還想了解使用命名管道,IPC甚至Web服務。

相關問題