混合モードアセンブリは、ランタイムのバージョン「v2.0.50727」に対してビルドされています


163

次の例外が発生します。

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

WPFプログラムからCrystal Reportをエクスポートしようとしていたので...

私はすでにapp.configに以下を追加しています...

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<runtime>
  <NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>

専門家がお手伝いできますか????

見つけた参照:http : //www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime


1
重要:エラー列「ファイル」がでエラーが発生する場合、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

1
「C:\ Program Files(x86)\ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools \」だけでなく、その下にsgenもある「x64」ディレクトリがあることに注意してください。 exe、およびインストールされているVSのバージョンの数とバージョンに応じて、sgenのいくつかの他のコピー/バージョンはすべて異なるパスにあります。
MickeyfAgain_BeforeExitOfSO 2017年

@ToolmakerSteve賛成投票できるように、コメントとして回答を投稿してください。他の答えはどれも私を助けませんでした。
Malcolm

回答:


238

構成ノードの下のapp.configでこの正確な起動タグを使用してみてください

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

2
実際には、YourApp。** exe **。configにトリッキーな行を追加する必要があります。
AntonK、2012年

24
それはapp.configです。コンパイラーは、ビルド時に名前を変更します。
ジェフ

65
必要なのは、useLegacyV2RuntimeActivationPolicy = "true"だけです。現在のフレームワークのバージョンをそのままにすることができます。
Ben Gripka 2013

3
ベンが言ったとき、私は倍増することができます、私は追加のrequiredRuntimeを省いて、私の問題は消えました。
Mike Malter 2013

1
このリンクは、問題が何であり、解決策があなたのために何をしているかを理解するのにも役立ちます:msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane

85

例外は、一部の.NET 2.0.50727コンポーネントが.NET 4.0に含まれていたことを明確に示しています。App.configファイルでこれを使用します。

<startup useLegacyV2RuntimeActivationPolicy="true" /> 

それは私の問題を解決しました


これには終了スラッシュが必要です<startup useLegacyV2RuntimeActivationPolicy="true" />
Jonn

8

アプリケーションのapp.configファイルに属性useLegacyV2RuntimeActivationPolicy = "true"を追加してください。

古い値

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

新しい価値

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

それはあなたの問題を解決します。


それがあなたのために働いたことを知ってうれしいです。コメントありがとうございます !
Brijesh Kumar Tripathi

4

私は実際には逆のソリューションでこの同じ問題がありました。.NETプロジェクトを.NET 4.0にアップグレードしてから、.NET 3.5に戻しました。私のプロジェクトのapp.configには引き続き問題があり、上記のエラーの原因となっていました。

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

このエラーを解決するための解決策は、次のように適切な2.0参照に戻すことです。

<startup>
  <supportedRuntime version="v2.0.50727"/>
</startup>

したがって、ダウングレードで上記のエラーが発生している場合は、.NET Frameworkでサポートされているバージョンをバックアップする必要があります。


1

私にとって、これはMSTest(VS2015)で単体テストを実行したときにスローされました。追加する必要がありました

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

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

VS2015で混合モードアセンブリMSTestが失敗する


1

app.configからレガシーを有効にしてもうまくいきませんでした。不明な理由により、私のアプリケーションはV2ランタイムポリシーをアクティブ化していませんでした。ここで仕事を見つけました。

app.configからレガシーを有効にすることは推奨されるアプローチですが、一部のケースでは期待どおりに機能しません。メインアプリケーションで次のコードを使用して、レガシーV2ポリシーを強制します。

public static class RuntimePolicyHelper
{
public static bool LegacyV2RuntimeEnabledSuccessfully { get; private set; }

static RuntimePolicyHelper()
{
    ICLRRuntimeInfo clrRuntimeInfo =
        (ICLRRuntimeInfo)RuntimeEnvironment.GetRuntimeInterfaceAsObject(
            Guid.Empty, 
            typeof(ICLRRuntimeInfo).GUID);
    try
    {
        clrRuntimeInfo.BindAsLegacyV2Runtime();
        LegacyV2RuntimeEnabledSuccessfully = true;
    }
    catch (COMException)
    {
        // This occurs with an HRESULT meaning 
        // "A different runtime was already bound to the legacy CLR version 2 activation policy."
        LegacyV2RuntimeEnabledSuccessfully = false;
    }
}

[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("BD39D1D2-BA2F-486A-89B0-B4B0CB466891")]
private interface ICLRRuntimeInfo
{
    void xGetVersionString();
    void xGetRuntimeDirectory();
    void xIsLoaded();
    void xIsLoadable();
    void xLoadErrorString();
    void xLoadLibrary();
    void xGetProcAddress();
    void xGetInterface();
    void xSetDefaultStartupFlags();
    void xGetDefaultStartupFlags();

    [MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
    void BindAsLegacyV2Runtime();
}
}

1

(プロジェクトのファイルではなく)別の構成ファイルを使用して、Visual Studioを再起動してください。

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.x86.exe.config
(32-bit)

または

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\vstest.executionengine.exe.config
(64-bit)

.configアプリケーションに常駐し、通常は追加のアプリケーション構成に必要なネイティブを回避することは適切なソリューションではないため、これについて詳しく説明します。
atconway 2014年

3
単体テストの場合、実行可能ファイルはテストしているコードの親プロセスであるため、vstest.executionengine.x86.exe.configファイルで構成の変更を行う必要があります。この問題はVisual Studio 2012 SP4で修正されたと思われますが、私のマシンにはまだ存在しています。
Brandon S

(変更を有効にするためにVisual Studioを再起動する必要はありません。vstest。*プロセスのタスクを終了する必要があるだけです。これは、ユニットテストが完了した後でもハングアップするためです。)
Brandon S

これを見直して、私がこれを変更しなければならない実際の場所に私を導きました。
Janis S.

1

エラーがエラー列「ファイル」で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。最小ファイル内容:<configuration><startup useLegacyV2RuntimeActivationPolicy="true"/></configuration>

出典:SGEN混合モードアセンブリ

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.