.NET 4.0プロジェクトで.NET 2.0混合モードアセンブリを参照するには、どの「追加構成」が必要ですか?


526

.NET 4.0機能の一部を使用したいプロジェクトがありますが、コア要件は、2.Xに対してコンパイルされたSystem.Data.SQLiteフレームワークを使用できることです。ここで受け入れられた回答など、これが可能であることに言及していますが、実際にこれを達成する方法はわかりません。

2.Xアセンブリを参照しながら4.0プロジェクトを実行しようとすると、次のようになります。

混合モードアセンブリは、ランタイムのバージョン 'v2.0.50727'に対してビルドされ、追加の構成情報がないと4.0ランタイムにロードできません。

どのような「追加構成」が必要ですか?



それを試してみてください !http://social.msdn.microsoft.com/Forums/en/clr/thread/58271e39-beca-49ac-90f9-e116fa3dd3c0ありがとう。楽しんで。

重要:エラーが「ファイル」というエラー列で発生する場合、SGEN修正はのsgen.exe.config横のファイルにある必要がありますsgen.exe。たとえば、VS 2015の場合、を作成しますC:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\sgen.exe.config。出典: SGEN混合モードアセンブリ 最小ファイル内容:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>
ToolmakerSteve

回答:


686

CLR 2.0 混合モードアセンブリを使用するには、App.Configファイルを変更して以下を含める必要があります。

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

キーはuseLegacyV2RuntimeActivationPolicyフラグです。これにより、CLRは最新バージョン(4.0)を使用して混合モードアセンブリをロードします。これがないと機能しません。

これは混合モード(C ++ / CLI)アセンブリの場合にのみ重要であることに注意してください。でこれを指定せずに、すべてのマネージCLR 2アセンブリを読み込むことができますapp.config


@リード私はあなたの提案を試みましたが、例外はまだポップアップします。EXEフォルダーにコピーされるapp.configを再確認しましたが、それでも機能しません。log4netを使用すると表示されます。私はこのエラーre:log4netについて何も見つけることができません。ただし、ここではstackoverflow.com/questions/1866735/log4net-and-net-4-0を除きますが、それはあまり言いません。特定の問題に関する詳細情報を取得する方法に関するアイデアはありますか?
Dave、

@Dave:これは、.NET 4ネイティブバージョンのlog4netを使用できることを示唆しています。これが最良のオプションのようです。.NET 4バージョンがある場合は、それを使用してください...
Reed Copsey、2015年

@リードはありません。私は実際にその答えを解釈し、log4netを自分でコンパイルする必要があることを意味します。私はそれができると思いますが、私はむしろそれらのプリコンパイルされたバイナリを取り、私のプロジェクトからそれを参照したいだけです。もう少し調べます。しかし、なぜapp.configを変更しても機能しないのでしょうか。多分、programname.exe.configを使用する必要があると思いましたが、それも試してみましたが、機能しませんでした。私の限られた経験では、どちらのファイル名でも同じことを行います。
Daveは

19
NUnitの構成ファイルに次行を追加するのに役立ちました:<startup useLegacyV2RuntimeActivationPolicy = "true"> <supportedRuntime version = "v4.0" /> <requiredRuntime version = "v4.0.20506" /> </ startup>
Filip Zawada

76
Microsoftは例外ダイアログにボタンを作成する必要があります:「この例外メッセージをstackoverflowで検索」
Davi Fiamenghi 2013年

35

このフォーラムは.NET Frameworkデベロッパーセンターに投稿されています。それはいくつかの洞察を提供するかもしれません。

(アプリの構成ファイルに追加します。)

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

2
このアプリ構成をNANTビルドにどのように使用する必要がありますか?
sagar 2013

14

対象とするフレームワークのバージョンによっては、ここを参照して正しい文字列を取得することをお勧めします。

http://msdn.microsoft.com/en-us/library/ee517334.aspx

.Net 4.0クライアントを対象とするリリースでフルバージョンが必要な理由を理解するために何時間も無駄にしました。最後にこれを使用しました:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0.30319" 
               sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

11

あなたが設定した後のapp.configのファイルを、Visual Studioは、名前のbinフォルダにコピーを生成しますApp.exe.config。これをデプロイメント時にアプリケーションディレクトリにコピーします。当たり前のように聞こえますが、驚くべきことに、多くの人がこのステップを逃しています。WinForms開発者はファイルの設定に慣れていません:)。


もう一つの方法は、App.configファイルを削除してから、プロジェクト- >追加- >新しい項目から新しいものを追加し、(ちょうどapp.configを呼ばれるテキストファイルを作成するのと同じではありません)一般- >アプリケーション構成ファイルを選択することです
スマイルキングマン

8

2.0と4.0のアセンブリを一緒に使用するのは簡単ではありません。

app.configでサポートされているフレームワーク宣言のORDERは、実際には、混合モードがスローされるという例外に影響します。宣言の順序を逆にすると、混合モードエラーが発生します。これがこの回答の目的です。

したがって、Windowsフォームアプリでエラーが発生した場合は、これを試してください。ほとんどがWindowsフォームアプリです。

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

または、プロジェクトがWindowsフォームでない場合。Webプロジェクトで、これをweb.configファイルに追加します。

  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"></supportedRuntime>
  </startup>

7

「useLegacyV2RuntimeActivationPolicy」属性が設定された「startup」要素を追加することで問題を解決できました。

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
    <supportedRuntime version="v2.0.50727"/>
</startup>

ただし、それを有効にするには、App.configの構成タグの最初の子要素として配置する必要がありました

<?xml version="1.0"?>
  <configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
      <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
      <supportedRuntime version="v2.0.50727"/>
    </startup>
  ......
....

1
どうしたのversion="v2.0"
SamB、2015年

1
ビルド番号は2.0では必須ですが4.0では必須ではないため、トップバージョンは正しくありません。ボトムは正しいです。
ickydime 2016年

5

上記は私にとってはうまくいきませんでした(私はWebアプリで作業しています)-これはうまくいきました...

フォルダー内のsgen.exe.configファイルを編集します(最初に作成する必要がありました)。C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v8.0A \ bin \ NETFX 4.0 Tools(v7.0フォルダーにも1つありますが、変更する必要はありません。VS2012を使用しています)

XMLの内容は次のようになります(以前の回答と同じ)。

<?xml version ="1.0"?>
<configuration>
    <startup useLegacyV2RuntimeActivationPolicy="true">
        <requiredRuntime safemode="true" imageVersion="v4.0.30319" version="v4.0.30319"/>
    </startup>
</configuration>

5

Webサービスで作業していて、v2.0アセンブリがWcfSvcHost.exeによって読み込まれた依存関係である場合は、次を含める必要があります。

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

.. \ Microsoft Visual Studio 10.0 \ Common7 \ IDE \ WcfSvcHost.exe.configファイル

これにより、Visual Studioは実行時にローダーを介して適切な情報を送信できるようになります。


4

Visual Studio 2015に変更したときにこの問題に遭遇しました。上記の答えはどれもうまくいきませんでした。最後に、次の構成ファイルをマシン上のすべてのsgen.exe実行可能ファイルに追加することにより、それを機能させました

<?xml version ="1.0"?>
    <configuration>
        <startup useLegacyV2RuntimeActivationPolicy="true">
            <supportedRuntime version="v4.0" />
        </startup>    
</configuration>

特にこの場所では、.NET 4.0を対象としていた場合でも、次のようになります。

C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools


もっと具体的にできますか?この構成オプションを既存のすべての* .configファイルに追加したのですか、それともsgen.exeの.configファイルを作成したのですか?
Adam Spicer 2015

私にとっては、Visual Studio 2015テストプロジェクトでこの問題が発生していました。この投稿は私に役立ちました。devbraindump.wordpress.com/2015/07/29/hello-world
Adam Spicer

1
@AdamSpicerすべてのsgen.exeのすべての.configファイルにこれを追加しました。存在しない場合は作成しました。
CMDを実行する

3

私はこの構成を使用しました:

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

私のために働いた


3
v2.0.50727である必要があります
。v2.0の

1

Visual Studio 2015にアップグレードするときにこの問題が発生しました。ここに掲載されているソリューションはどれも違いはありませんが、変更の場所は適切ではありません。この構成を追加して、この問題を修正しました。

<startup useLegacyV2RuntimeActivationPolicy="true">
</startup>

To:C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ CommonExtensions \ Microsoft \ TestWindow \ TE.ProcessHost.Managed.exe.config

その後、Visual Studioを再起動しました。


0

3〜4時間のグーグル操作の後、この問題を回避する方法を見つけました。以下を追加しました

<startup selegacyv2runtimeactivationpolicy="true">
  <supportedruntime version="v4.0" sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>

これで問題が解決しない場合は、-> Right Click on DLLエラーが発生するプロジェクト参照-> Select Properties-> Check the Run-time Version-> 問題が解決する場合はv2.0.50727、問題を認識しています。問題は次のとおりです2.0 Version of respective DLL. 。-解決策は次のとおりですdelete the respective DLL。-プロジェクト参照download the latest version of DLL'sから、対応するWebサイトから、最新バージョンのDLL参照の参照を追加すると、機能します。


1
DLLの最新バージョンが新しいバージョンの.NETに対してコンパイルされていると想定しているので、これはそれを修正しますか?
Lucas 14

0

私はこれと同じエラーを経験し、提案された起動ステートメントをソリューションのさまざまな構成ファイルに永久に追加し、フレームワークの不一致を特定しようとしました。何もうまくいきませんでした。また、XMLスキーマに起動情報を追加しました。それも助けにはならなかった。問題の原因となっている実際のファイル(「移動または削除された」とだけ言う)を見ると、それは実際にはライセンスコンパイラ(LC)であることがわかりました。

問題のあるlicenses.licxファイルを削除すると、問題が解決したようです。


0

一部のコードをVS 2008からVS 2010に移行しているときに同様の問題に直面していましたが、App.configファイルに変更を加えると問題が解決しました。

<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"
         sku=".NETFramework,Version=v4.0,Profile=Client" />
</startup>
</configuration>

0

この場所に次を追加しますC:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools \ x64 FileName:sgen.exe.config(このファイルが見つからない場合は、作成して追加してください)

 <?xml version ="1.0"?>

<configuration>
 <runtime>        
        <generatePublisherEvidence enabled="false"/>    
    </runtime>

    <startup useLegacyV2RuntimeActivationPolicy="true">

                <supportedRuntime version="v4.0" />

    </startup>    

</configuration>

これで問題は解決しました


0

私が使う

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

動作しますが、de </configuration>tagの直前にあると、起動タグが正しく動作しません。


-1

また、クラスライブラリにこの問題がありました。メインアプリケーションに追加されたクラスライブラリに問題がある場合。追加するだけ

<startup useLegacyV2RuntimeActivationPolicy="true">

クラスライブラリによって選択されるメインアプリケーションに。


これは不完全なソリューションです。設定内の名前は大文字と小文字が区別され、あなたはU.忘れてしまった
チャック・ディー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.