2011-09-16 96 views
0

我遇到了一個奇怪的問題,與我託管的C++程序集。儘管我將C#項目和託管C++(DLL)項目設置爲以.NET 3.5爲目標,但在編譯託管程序集時,其「運行時版本」爲2.0。針對特定.NET版本編譯託管C++程序集(VS2008)

我想在.NET 3.5項目和.NET 4.0版本的CSScript中使用相同的程序集,並且CSScript拒絕使用.NET 2.0程序集運行(「運行時例外:混合模式程序集是針對運行時版本爲'v2.0.50727',無法在4.0運行時加載,無需其他配置信息。「)。

我設法本地化問題以下(在VS 2008中完成的所有工作):

  1. 我創建了一個C#項目目標.NET 3.5。
  2. 我在同一個解決方案中創建一個空的C++項目。
  3. 向C++項目添加一個空的.cpp文件。
  4. 更改C++項目屬性:配置類型=動態庫(.dll),通用語言運行時支持=通用語言運行時支持(/ clr),並確保將通用屬性的「目標框架」設置爲3.5
  5. 編譯C++項目並將其添加爲對C#項目的引用。

當您查看C#項目中引用的屬性時,您會看到「運行時版本」爲v2.0.50727。我的問題是,到底是什麼?

爲什麼運行時版本2.0?我將所有內容都設置爲3.5 ...如何強制託管的C++項目針對.NET 3.5進行編譯?

感謝, 馬立克

+0

在.NET 4.0項目中引用.NET 2.0混合模式程序集時需要[什麼'額外配置'?](http://stackoverflow.com/questions/2455654/what-additional-configuration-是必要的參考a-net-2-0-mixed-mode-a) –

回答

0

您的「修復」不會真正解決問題。

運行時異常:混合模式組件構建針對運行時的版本「V2.0.50727」,不能在運行時的4.0,無需額外配置信息被加載

您需要使用4.0運行時避免這種情況,即使嘗試一些神話般的「3.5」版本也沒有意義。爲此,您需要使用VC++ 2010編譯器進行編譯。由於您需要在.NET 3.5應用程序中使用它,因此這是一個非啓動器。

試着調查一下「附加配置信息」。見this questionthis one

+0

感謝您的回答。我認爲我可以使用4.0中的3.5構建的組件,而不是2.0?如果甚至彙編編譯爲3。5不會工作,那麼是的,我試圖在兩個項目中共享相同的DLL是沒有意義的。我只需要澄清一下,因爲我認爲我讀了.NET 3.5與4.0兼容的地方(如「可以運行」),但是小於3.5的東西不是...... – marco1475

+0

@marco:你錯過了一塊,使其工作。閱讀我鏈接的問題。 2.0和3.5都是一樣的,也就是說,直到你改變配置。 –

+0

重要的信息是,在.NET 4.0中,app.config文件是所有以前版本的.NET所必需的,而不僅僅是我所相信的2.0(所有的例子都是2.0,而沒有3.5)。 不幸的是,由於我無法使用CSScript中的app.config文件(一種在執行它之前編譯.NET的腳本語言),我剩下兩個版本的程序集,一個用於3.5項目,另一個用於4.0腳本。再次感謝您的答案。 – marco1475

1

運行時版本指的是虛擬機,而不是.NET類庫的版本。 .NET 3.5在與.NET 2.0相同的虛擬機上運行,​​這就是爲什麼您的參考顯示v2.0.50727。如果您想查看C++項目是否確實針對3.5版本的框架,則應該檢查該項目中的各個庫引用。

相關問題