2

ここで何度も質問されたり、あちこちでブログに取り上げられたりする質問をするのは嫌いですが、アップグレードしたプロジェクトを機能させることはできません。

私のアプリケーションは元々VS2008で書かれており、.NET3.5SP1を対象としています。VS2010にアップグレードしたばかりで、新しい言語機能と統合されたMEFを利用しようと考えたので、すべてのプロジェクトを.NET4.0をターゲットに変更しました。すべて(ビルド後のイベント、MEF参照など)を適切にセットアップして適切にコンパイルした後、アプリケーションを実行すると、これまでにない有名なエラーが発生しました。

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

次に、次の属性を<startup>要素に追加しましたapp.config

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

しかし、アプリケーションを実行しても、同じエラーが発生します。この問題をさらにデバッグするためにできることはありますか?私は文字通り他に何を試すべきか分かりません。混合モードアセンブリとそれらがCLRと対話する方法についてできるだけ多くの情報を見つけようとしていますが、この分野での私の背景知識はせいぜい限られています。

また、log4netのソースをターゲットの.NET 4.0に再コンパイルすることで問題を回避しようとしましたが、期待どおりに機能しませんでした。コンパイル後、次のエラーが発生しました。

メンバーのオーバーライド中に継承セキュリティルールに違反しました:'log4net.Util.ReadOnlyPropertiesDictionary.GetObjectData(System.Runtime.Serialization.SerializationInfo、System.Runtime.Serialization.StreamingContext)'。オーバーライドするメソッドのセキュリティアクセシビリティは、オーバーライドされるメソッドのセキュリティアクセシビリティと一致する必要があります。

そこで、AssemblyInfo.csに次の行を追加することを推奨する投稿を見つけました。

[assembly: System.Security.SecurityRules(System.Security.SecurityRuleSet.Level1)]

そしてそれをしたとき、私は始めたところに戻って終わりました!(混合モードアセンブリエラーあり)。

うーん。

4

1 に答える 1

0

.NET 4.0をターゲットにして、ソースを再コンパイルした後、すべてが機能するようになりました。誰もがそれがうまくいくはずだと言っているので、私はまだこれが好きではありません。アプリケーションを最終的に実行するために私がしなければならなかったことの1つは、.NET 4.0に組み込まれているものではなく、 CodePlexのMEF2を使用することでした。これら2つのことが関連している理由はわかりませんが、戻ってlog4netをそのまま使用できるようにしてみます。終わったらここに詳細を投稿します。同じ問題が発生した他の人の助けになることを願っています。

于 2010-11-19T13:41:25.657 に答える