web-dev-qa-db-ja.com

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

私は、.NET 4.0の機能のいくつかを使用したいプロジェクトを持っていますが、核となる要件は、2.Xに対してコンパイルされたSystem.Data.SQLiteフレームワークを使用できることです。ここで 一般に認められている答え のように、これが可能であるという言及はありますが、実際にこれを達成する方法はわかりません。

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

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

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

513
jamone

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)アセンブリにのみ関係することに注意してください。 app.configでこれを指定しなくても、すべての管理対象CLR 2アセンブリをロードできます。

679
Reed Copsey

.NET Framework開発者センターのこの フォーラム投稿 。それはいくらかの洞察を提供するかもしれません。

(アプリの設定ファイルに追加してください。)

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

対象としているフレームワークのバージョンに応じて、正しい文字列を取得するためにここを見てください。

http://msdn.Microsoft.com/ja-jp/library/ee517334.aspx

私のリリースをターゲットとした.NET 4.0クライアントがフルバージョンを必要とする理由を解明するために何時間も無駄にしました。私は最後にこれを使用しました:

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

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

11
Raheel Khan

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>
8
Wiser Web

"startup"要素に "useLegacyV2RuntimeActivationPolicy"を追加することで問題を解決することができました - )属性セット.

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

しかし、それを有効にするためにはApp.configのconfigurationタグの最初の子要素としてそれを置かなければなりませんでした

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

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

フォルダ内のsgen.exe.configファイルを編集します(最初に作成しなければなりません)。 C:¥Program Files(x86)¥Microsoft SDKs¥Windows¥v8.0A¥bin¥NETFX 4.0ツール(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
MarkPm

あなたが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は実行時にローダーを通して正しい情報を送信することができます。

5
MrBit

私は、Visual Studio 2015に変更したときにこの問題に遭遇しました。上記の答えのどれも私達のために働きませんでした。最後に、マシン上のALL 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ツール

4
Run CMD

私はこの設定を使用しました:

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

私のために働いた

3
OmriSela

私はこの問題を抱えていましたが、Visual Studio 2015にアップグレードしたときにここに掲載されているソリューションでは何も違いはありませんでした。私はこの設定を追加することでこの問題を修正しました:

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

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

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

1

私はこれと同じエラーを経験し、私のソリューションのさまざまな設定ファイルに提案されたスタートアップステートメントを永遠に追加して、フレームワークのミスマッチを隔離することを試みました。何もうまくいきませんでした。私はまた私のXMLスキーマにスタートアップ情報を追加しました。それも助けにはならなかった。問題の原因となっている実際のファイルを見ると(これは「移動または削除された」というだけのことです)、それは実際にはLicense Compiler(LC)であることがわかりました。

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

0
mono código

この場所に次の行を追加します。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
Muheeb

私が使う

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

これは機能しますが、de </configuration>タグの直前にあると、スタートアップタグが適切に機能しません

0
RubenP5

いくつかのコードを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
Sonali.thecoder