4

改めまして、

前回の質問に続き、C# で記述した Windows エクスプローラー拡張機能の互換性を最大限に高めようとしています。特に、.NET 4 がインストールされ、.NET 3.5 以下がインストールされていない環境で動作することを確認することに関心があります。問題はないと思うかもしれませんが、どうやらそれほど単純ではないようです...

2 つの問題があります。まず、非 .NET-4 ターゲット アセンブリは、指定されたファイルがない限り、CLR 4 で読み込まれません。それらで使用しようとしても、このファイルがないと失敗します。しかし、私の DLL は GAC に入ります。そこにファイルを取得するにはどうすればよいですか?他の人も同じことを尋ね、「まあ、代わりに静的な設定クラスを作成するだけです」という結論に達しました。明らかに私にはそれができません....config<supportedRuntime version="v4.0" />ngen.config.config

2 番目の問題: DLL を に登録regasm.exeし、レジストリを開いて書き込み内容を確認するとRuntimeVersion = v2.0.50727、CLSID エントリの下に表示されます。これにより、DLL が読み込まれなくなります。RuntimeVersion値を手動で変更した後でのみv4.0.30319、DLL がロードされます。

では、ここでインストーラーに何をさせなければならないのでしょうか? 最初のものについては、私にはわかりません。2 つ目は、レジストリの RuntimeVersion を、インストールされている .NET バージョンに手動で設定するインストーラーが必要だと思いますか? それはあまりにも奇妙に思えます...

4

1 に答える 1

0

正しく思い出せば、.Net 2.0 - 3.5 と .Net 4.0 には 2 つの異なる GAC があります。

「サイズの問題は、.NET 4 インストーラー (x86 + x64) が 54 MB で、以前のバージョンの完全なランタイム インストール パッケージが埋め込まれていないため、部分的に解決されています。」- http://en.wikipedia.org/wiki/.NET_Framework

したがって、.Net 3.5 をインストールすると、以前の .Net ランタイムが取得されます。これは、これらの以前のランタイムが含まれていない .NET 4.0 と混同する可能性があります。これは、<= .Net 3.5ランタイムをGACにインストールするには、.Net 4.0と一緒に.Net 3.5ランタイムをインストールする必要があることを意味すると思います。

また、RuntimeVersion を変更すると、.DLL が間違った GAC にインストールされることになると思います。ただし、これが機能する場合は興味深いでしょう。リアルタイム環境では信用できませんが、非常に興味深いものになるでしょう。

于 2010-12-07T05:04:15.217 に答える