11

さまざまなブログを読んで、「マルチターゲティング」またはサイドバイサイド実行の用語についてかなり混乱しています。

  1. 一部のブログでは、並列実行とは、プロセス内の2つのバージョンのCLRを意味すると述べています。他の何人かは、.net2.0と.net3.0のアセンブリが並行して実行されていると主張しています。誰が正しいのか、誰が間違っているのかわからないことに非常に失望しています。

  2. また、Scott Hanselmanのブログなど(多くの混乱を招きます)のような多くのブログで、ターゲットフレームワークが4.0の場合、.NET4.5のどの機能も機能しないことを確認しました。私はそれに同意することができます。しかし、4.5でバグが修正された4.0の機能が、4.5を使用してビルドし、4.0でデプロイすると非表示になるという事実に同意したり、理解したりすることはできません。ここで私は「隠された」という用語を理解しておらず、実際にそれが何を意味するのかを誰もあえて説明しません。ランタイムエラーを意味しますか?コンパイル時エラーを意味しますか?これはできません。それは一貫性のない行動を意味しますか?例外 ?そうだとすれば、なぜMSがVSでの開発にこの種の柔軟性を持たせたのだろうか。それは何か目的を果たしますか?私は、最初のケースは意味があることを理解していますが、2番目のケースを理解したり同意したりしないでください。

  3. Rick / Scott Hanselmanの投稿でも、大きな変更とは、CLRを含む完全なアップグレードを意味することを確認しました。次に、3.0をメジャーアップグレードと見なす必要がありますが、まだ.NET2.0CLRを使用しているためそうではありません。では、なぜ命名用語が3.0.xx / 3.5.xxなのですか?.NET 4.0.30319.xの場合のように、CLRも新しいので、私はこれに同意します。誰が正しいのか驚いています。これらの人々またはMSDNは、どちらも原則と矛盾しています(MSDNがMajor.Minor.Build.Revisionとしてフォーマットを言うように、Hanselmanまたは他の人が言うように、MajorはCLRアップグレードを意味し、.NET 3.0にはありません)

参照:http://www.hanselman.com/blog/NETVersioningAndMultiTargetingNET45IsAnInplaceUpgradeToNET40.aspx

http://msdn.microsoft.com/en-us/library/bb822049(v=vs.110).aspx

上記の2つの質問について何か考えはありますか?

4

4 に答える 4

1

まず、マルチターゲティングとサイドバイサイド実行の違いを理解する必要があります。

  • マルチターゲティングは、CLRランタイムで実行されるアプリケーションをコンパイルする機能であり、アプリケーションの開発に使用しているものとは異なります(VS2010の場合は.NET 4.0、VS2012の場合は.NET4.5)。VSでのマルチターゲット設定により、ターゲットとするバージョンよりも新しいバージョンのCLRランタイムおよび基本クラスライブラリ(BCL)で導入されたタイプまたはメソッドがアプリケーションで使用されないことが保証されます。VSは、ターゲットにできる各ランタイムで使用されるDLLのコピーを用意することによってこれを行います。
  • サイドバイサイド実行とは、PCに複数のバージョンのCLRランタイムをインストールできることを意味します。CLR 4.0以降、正しくありません。これで、古いランタイム(CLR1.1またはCLR2.0)と一緒に同じプロセス内にCLR4をロードできるようになりました。詳細については、 http://msdn.microsoft.com/en-us/magazine/ee819091.aspx (「動作の概要」のセクション)をお読みください。

あなたの質問について:

  1. 上記のMSDN記事からのリンクをお読みください。
  2. 非表示という用語は、.NET 4.5でアプリケーションをデバッグするときに、バグ修正が適用されたバージョンのBCLがあることを意味します。このバージョンのBCLでは、バグがまだ修正されていないため、.NET4.0にデプロイした後に問題が発生する可能性があります。到達したバグのタイプに応じた方法で観察できるランタイムエラーが発生します。これは、セキュリティの問題、アプリケーションの論理エラー、またはランタイム例外である可能性があります。これらの問題をキャッチしたい場合は、.NET4.0のみがインストールされているクリーンなPCでいつでもテストできます。
  3. あなたが与える両方のリンクは、決して互いに干渉しません。スコットとMSDNはどちらも、どのバージョンの.NETにどのバージョンのCLRランタイムがインストールされているかについての説明が正しいです。
于 2013-03-22T17:13:41.323 に答える
0
  1. side-by-side 実行とは、1 つのプロセスで複数の CLR を実行することを意味します。CLRが同じであるため、.NET3.5と並んで.NET2は並んでいません。ただし、.NET2 と .NET4 はそうです。
  2. 「.NET4.5 でビルドし、.NET4.0 でデプロイする」とはどういう意味ですか?
  3. マイクロソフトのマーケティングによって決定されるものについて、明確な技術的区別を求めます。
于 2013-03-22T11:50:09.110 に答える
0

これが私の考えです。

.NET は、複数のバージョンと複数のランタイムを通じて進化してきました。.NET の新しいバージョンには、新しいランタイムがある場合とない場合があります。

.NET 1.0 にはランタイムが付属しています。.NET 1.1 は、既存のシステムに対する一連の修正と追加でした。増分アップグレードです。

そのため、1.0 を対象としたものはすべて、1.1 でシームレスに実行されます。ただし、これらの修正されたバグなどに依存しないことを前提としています。

.NET 2.0 は、まったく新しいランタイムを備えた新しいバージョンです。これで、PC に 1.1 と 2.0 の両方をインストールできます。1.1 アプリは .NET 1.1 ランタイムを使用し、2.0 ターゲット アプリは 2.0 ランタイムを使用します。

3.0 および 3.5 リリースでは、状況が少し複雑になります。それらにはいくつかの修正が含まれている可能性がありますが (私が思うに)、主に、ライブラリに多数のクラスを追加し、同じ 2.0 ランタイムを引き続き使用します。

現在、3.5 ターゲット アプリは引き続き .NET 2.0 ランタイムを使用し、機能します。彼らは 3.5 で追加された新しいクラス (例: LINQ) について知りませんし、その必要もありません。

.NET 4.0 は、まったく新しいランタイムです。2.0と3.5を並べて装着できます。また、.NET 2.0 を対象とするアプリは引き続き .NET 2.0 ランタイムを必要とし、それで実行されますが、NET 4.0 用にコンパイルされた新しいアプリは新しいランタイムを使用します。.NET 4.0 では、アセンブリを配置してランタイムに読み込む方法にいくつかの変更が導入されているため、2.0 アプリを 4.0 で動作するように単純にコンパイルすると、問題が発生する可能性があります。ただし、これらの問題を修正すると機能します (ある場合)。

さて.. .NET 4.5はまた少し違う話です。これは新しいランタイム (AFAIK) ですが、4.0 のものを置き換えています。4.0 と 4.5 を並行して実行することはできません。4.0 のターゲット アプリが 4.5 ランタイムで実行されるようになりました...いくつかの修正が適用されました。したがって、アプリが 4.0 で利用可能なこれらのバグに依存している場合、4.5 で問題が発生します。

これは迅速で汚い答えです。問題/不一致/改善の可能性がある場合は、お気軽に編集してください。

HTH

于 2013-03-22T11:40:32.040 に答える