我們有一個包含約90個項目的Visual Studio解決方案。他們中的大多數都是爲DLL文件構建的,有些是用C++編寫的,有些則是用C#編寫的。這些項目通過COM進行通信。我們使用tlbexp來生成一些C#項目(在C++項目中引用的項目)的TLB文件。我們使用tlbimp來生成C++項目的interop DLL。我沒有深入討論這個話題,但我認爲,互操作文件只是定義了C++類的接口,使它們可以從其他項目中使用,對嗎?.NET框架的哪些功能可以互操作程序集引用?
現在,問題如下:爲了將整個解決方案升級到Visual Studio 2015並讓它在.NET 4.6.1上編譯,我使用JetBrains使用dotPeek檢查了生成的程序集。我可以看到,所有C#項目都正確使用.NET 4.6.1,C++ DLL本身是本地的,並且不引用任何.NET。現在,讓我感到意外的是,dotPeek告訴我,互操作DLL(源自C++項目)引用了.NET 4.0。
在嘗試讓.NET 4.6.1和大量研究成爲「精彩」的一天之後,我終於沒有找到任何方式讓interops引用.NET 4.6.1。這甚至有可能嗎?我目前的猜測是,所有生成的interop dll都像這樣引用基本的.NET 4.0,只是因爲它使用與.NET 4.6.1相同的CLR。
是嗎?應該可以在安裝了.NET Framework 4.6.1的任何系統上執行程序集,不是嗎?