39

私は約 2 年前にデータベース アクセス用に .NET 2.0 でクラス ライブラリを作成し、それを .NET 2.0、3.0、および 3.5 でずっと使用してきました。

私が取り組んでいる現在のプロジェクト (.NET 4.0 アプリケーション) では、古い忠実なクラス ライブラリを使用しようとしましたが、次の例外が発生しました。


System.InvalidOperationException が処理されませんでした
  Message=フォームの作成中にエラーが発生しました。詳細については、Exception.InnerException を参照してください。
    エラー: 混合モード アセンブリは、ランタイムのバージョン 'v2.0.50727' に対してビルドされています
    追加の構成情報がないと、4.0 ランタイムにロードできません。
    ソース=スクールマネージャー
  スタックトレース:
       SchoolManager.My.MyProject.MyForms.Create__Instance__[T](T インスタンス) で 17d14f5c-a337-4978-8281-53493378c1071.vb:line 190
       SchoolManager.My.MyProject.MyForms.get_frmGeneric() で
       D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\My Project\Application.Designer.vb:line 35 の SchoolManager.My.MyApplication.OnCreateMainForm() で
       Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.OnRun() で
       Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.DoApplicationModel() で
       Microsoft.VisualBasic.ApplicationServices.WindowsFormsApplicationBase.Run (文字列 [] commandLine) で
       17d14f5c-a337-4978-8281-53493378c1071.vb:line 81 の SchoolManager.My.MyApplication.Main (String [] Args) で
       System.AppDomain._nExecuteAssembly (RuntimeAssembly アセンブリ、文字列 [] 引数) で
       System.AppDomain.ExecuteAssembly (文字列 assemblyFile、証拠 assemblySecurity、文字列 [] 引数) で
       Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() で
       System.Threading.ThreadHelper.ThreadStart_Context (オブジェクトの状態) で
       System.Threading.ExecutionContext.Run (ExecutionContext executionContext、ContextCallback コールバック、オブジェクトの状態、ブール値の ignoreSyncCtx) で
       System.Threading.ExecutionContext.Run (ExecutionContext executionContext、ContextCallback コールバック、オブジェクトの状態) で
       System.Threading.ThreadHelper.ThreadStart() で
  内部例外: System.IO.FileLoadException
       Message=混合モード アセンブリは、バージョン 'v2.0.50727' に対してビルドされています
           ランタイムであり、追加なしで 4.0 ランタイムにロードすることはできません
           構成情報。
       ソース=Dinofage.Data.XpressData
       スタックトレース:
            Dinofage.Data.XpressData.ExecuteSelectInternal (文字列 selectCommand) で
            Dinofage.Data.XpressData.ExecuteSelect (文字列 selectCommand) で
            D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\Modules\Academics.vb:line 89 の SchoolManager.Academics.GetNewAdmissionCode (StringcademicYear) で
            D:\Alex\Documents\Visual Studio 2008\Projects\School Manager\SchoolManager\UserControls\StudentDetail.vb:line 20 の SchoolManager.StudentDetail..ctor() で
            D:\Alex\Documents\Visual Studio 2008\Projects\SchoolManager\SchoolManager\frmGeneric.Designer.vb:line 25 の SchoolManager.frmGeneric.InitializeComponent() で
            SchoolManager.frmGeneric..ctor() で
       内部例外:

何が間違っている可能性があり、どうすれば修正できますか?

4

7 に答える 7

74

おそらく最善の方法は、Visual Studio 2010 で .NET 4.0 用のクラス ライブラリを再コンパイルすることです (つまり、プロジェクトを開いて変換し、ターゲット フレームワークを変更します)。

それができない、またはできない場合は、.NET 4.0 アプリケーションの app.config ファイルに次を追加してみてください。

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
</startup>

すなわち。

<?xml version ="1.0"?> 
<configuration> 
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <supportedRuntime version="v4.0"/>
    </startup>
</configuration>
于 2010-07-05T11:24:06.417 に答える
23

アセンブリは混合モードであるため、アセンブリ内のアンマネージ マシン コードからマネージ コードを呼び出すことができる可能性があります。.NET 4.0 の新しいインプロセス サイド バイ サイド CLR バージョンのサポートにより、ランタイムは、それが発生したときに、どの CLR バージョンを提供する必要があるかを認識しません。app.exe.config ファイルを次のように指定する必要があります。

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>
于 2010-07-05T11:33:22.537 に答える
2

別の方法:VB 2010 Expressでは、プロジェクトを開き、[コンパイル]タブに移動してからAdvanced Compile Options....NET Framework 2.0。という名前のドロップダウンリストから選択しTarget framework (all configurations)ます。

于 2012-11-08T14:10:47.463 に答える
1

useLegacyV2RuntimeActivationPolicy="true" を指定してもうまくいかない場合は、お使いの OS と .NET のバージョンに対応したセットアップをインストールする必要がある場合があります。http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wikiで同じものを見つけることができます。

このセットアップをインストールする前に、インストールされたプログラムから SQLite をアンインストールしてください。これにより、コードにエラーが表示されます。

互換性のあるセットアップをインストールしても機能しない場合は、以前の DLL ファイルへの参照を削除し、この互換性のある DLL ファイルへの新しい参照を追加する必要があります。

互換性のある DLL ファイルへの参照を追加すると、プロジェクトをビルドするだけで、すべてのコード エラーがなくなるはずです。

于 2014-01-20T11:27:41.997 に答える
0

Visual Studio 2010 内で古い忠実なプロジェクト (クラス ライブラリ) を開いて、変換を行うことができます。

于 2010-07-05T11:19:53.113 に答える
0

他の誰かがまだこの問題に遭遇した場合、ここに私の診断があります: 間違った SQLite パッケージを使用しています。http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wikiに SQLite の多くのバージョンがあります。

たとえば、x86 プラットフォームで .net 4.5 をターゲットにしている場合は、次のファイルを使用する必要があります。

32 ビット Windows (.NET Framework 4.5) 用のプリコンパイル済み静的リンク バイナリの下

sqlite-netFx45-static-binary-bundle-Win32-2012-1.0.106.0.zip

于 2017-11-08T15:51:31.903 に答える