2013-01-24 59 views
6

我正在使用Visual Studio 2012和.Net Framework 4.5 我有2個解決方案:1)WPF應用程序2 )類庫(dll)混合模式程序集是針對運行時版本「2.0.50727」構建的,無法在4.0運行時加載

類庫包含3個按鈕和一個控件,它必須在WindosFormsHost控件中,因爲它是爲WinForms生成的。

.NET框架之外唯一引用的程序集是用於上述winforms控件和iTextSharp。

的的WinForms控制似乎是有點老,當我把我的DLL參考我得到了同樣的錯誤作爲標題,但下面的其他SO問題/答案,我我把這個在我的配置文件:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true"> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
</configuration> 

錯誤:

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

正如我所提到的,我看過發佈這個問題的問題,並且他們確實在我的DLL項目中解決了這個問題,但是在使用該DLL的項目中,我嘗試了所有這些都無濟於事。供參考:

  1. What 'additional configuration' is necessary to reference a .NET 2.0 mixed mode assembly in a .NET 4.0 project?
  2. Mixed mode assembly is built against version ‘v2.0.50727′ of the runtime
  3. What does 'useLegacyV2RuntimeActivationPolicy' do in the .NET 4 config?
  4. Mixed mode assembly is built against version 'v2.0.50727' of the runtime and cannot be loaded in the 4.0 runtime
  5. Mixed mode assembly is built against version X and cannot be loaded in version Y of the runtime without additional configuration information

在該項目中我的配置文件具有相同的值完全相同的標籤。

另外需要說明的是,在我的WPF應用程序中,一開始我得到一個關於它無法找到指定的dll(用於winforms控件)的錯誤,最後我將該控件的dll放入了GAC。

我試着改變我的目標框架的所有可能性(4.5,4.0完整和客戶端,3.5完整和客戶端,3.0和2.0),在調試和發佈中構建我的DLL並設置「生成序列化程序集」關閉,並且將平臺目標從任何CPU更改爲x86和x64。我只嘗試每次更改一個設置的值。

這是VS2012中的問題還是我需要做些什麼來解決這個問題?

編輯:

顯示在錯誤列表設計時上述錯誤,設計者展示一個錯誤說「無法創建‘my_class’的實例」

的是內部異常一個說:「設置connectionId拋出一個異常」,這是標題消息的內部例外。

這仍然使該解決方案,將建成並在運行的應用程序,我得到基本相同,不同之處在於最裏面的異常說:

「無法加載文件或程序集「SigPlusNET,版本= 1.1 .3358.14336,Culture = neutral,PublicKeyToken = 6aef07010bb0624f'或它的一個依賴項,試圖加載一個格式不正確的程序。「

那一個是的WinForms控件的程序,在通過dotPeek檢查,它具有唯一的依賴是.NET框架的人

+0

右鍵單擊您的EXE項目,屬性,調試選項卡,取消選中「啓用Visual Studio託管過程」選項,然後重試。 –

+0

我沒有在我的問題中提到這一點,但是我在設計時將這個控件從工具箱中拖出來(程序在運行時崩潰),我將編輯我的問題並添加Exception i get在運行時 –

+2

您剛剛在編輯中發佈的第二個錯誤是因爲SigPlusNET(或其使用的東西)是錯誤的目標平臺。無論是你的應用程序是32位和SigPlusNET(或依賴項)是64位,或其他方式。 –

回答

4

使用Bling for DirectX 10.0(Codeling的Bling UI Toolkit)。我得到了錯誤,結束了我在這個頁面尋找解決方案,D3D10.example中的app.config文件包括支持的運行時版本= 4行。但它不包括版本= 2 .NET線更晚的線,使用的app.config爲:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
<startup useLegacyV2RuntimeActivationPolicy="true"> 
    <supportedRuntime version="v4.0" /> 
    <supportedRuntime version="v2.0.50727" /> 
</startup> 
</configuration> 

解決了這個問題,並在VS2012運行所有的例子,一旦配置文件被修改的代碼所示。

我不知道這個帖子是否遲到了一個答案,我只是在本月開始在Windows 7和VS2012上的圖形項目和配置更改解決了我的問題。

2

,因爲你有4.0的1個位置和4.5在另一個上這條線,這可能會導致:

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 

嘗試:

<supportedRuntime version="v4.5" sku=".NETFramework,Version=v4.5" /> 

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" /> 
+0

錯誤確實說了4.0運行時,vs2012是否使用另一個版本?我的wpf和dll都使用.net 4.5,所以這就是這些值的原因,無論如何,我只是嘗試了你所說的,並且問題依然存在。 –

+0

我沒有使用4.5,所以我不確定。我希望它能爲你解決。我想可能你有一個4.0和4.5的項目,你需要有2個「supportedRuntime」標籤,1個爲4.0,另一個爲4.5。你可以試試嗎? –

+0

我沒有嘗試過,沒有工作,四處張望,如果vs2012使用另一個運行時間,我發現這一點:http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx 請參閱下面的xml下的第三個圖像在「安全開發對於.NET 4和.NET 4.5「這個部分,它和我的 –

2

我的方法有點不同。錯誤清楚地標識了一些.NET組件2.0.50727被列入.NET 4.0 在App.config文件,而不是使用這樣的:

<startup useLegacyV2RuntimeActivationPolicy="true"> 

它解決了我的問題

+0

一樣,在這裏所有的砰砰聲之後,我都能用它來工作。這是從3.5升級到4.5。2和DTSX未能執行。 – DirtyHowi

相關問題