web-dev-qa-db-ja.com

同じサーバー上の複数のバージョンの.NET

そのため、1台のコンピューター(クライアントまたはサーバー)で複数のバージョンの.NETフレームワークを実行しても問題ないことを常に知っています。 この質問 は少し古いですが、これについて話します。

しばらく前に、私は新しいASP.NETアプリケーションの作成を任され、完全な.NETフレームワークを使用するか.NET Coreを使用するかを決定しようとしていました この記事 マイクロソフトから。この記事では、フレームワークをサイドバイサイドでインストールする必要がある場合は、.NET Coreを使用する必要があると述べています。ここに完全な引用があります:

.NETの異なるバージョンに依存するアプリケーションをインストールするには、.NET Coreをお勧めします。 。NET Coreは、同じマシンに異なるバージョンの.NET Coreランタイムをサイドバイサイドインストールします。このサイドバイサイドインストールにより、同じサーバー上の複数のサービス。それぞれが独自のバージョンの.NET Core上にあります。

しかし、.NET Coreがなくても、Frameworkのサイドバイサイドインストールはすでに可能だと思いましたか?何が欠けていますか?

私が尋ねる理由は、現在.NET Framework 2.0を使用する古いASP.NETアプリケーションがあり、現在.NET Coreを使用するものに取り組んでいるためです。 .NET Coreアプリを完全な.NET Framework 4.6に切り替えることを検討するいくつかの問題に遭遇しましたが、そのMicrosoftの記事は少し混乱しました。

問題は、同じWindows 2008 R2サーバーで問題なく両方のアプリ(.NET Framework 2.0および4.6)を実行できるかどうかです。もしそうなら、その記事は何を参照していますか?

最後に、私のアプリ(古いものと新しいもの)の両方でCrystal Reportsを使用しています。新しいアプリでは、古いアプリよりも新しいバージョンのCrystal Reportsが必要になる可能性があります。このような異なるバージョンのCrystal Reportsを同じサーバーで実行できますか?これは、Microsoftの記事にあるように、.NET Coreが必要になる状況ですか?

ありがとうございました

13
CJ Alpha

フレームワークの並列インストールは可能であるだけでなく、事実です。 NET 1.0、2.0、および4.0以降はすべて個別にインストールされています。しかしながら:

  • .NET 3.0と3.5はどちらも2.0ランタイムを使用するため、完全に独立しているわけではありません。
  • 同様に、.NET 4.5以降のすべてのバージョンは4.0ランタイムを使用するため、相互に分離されていません。さらに複雑なことに、新しいバージョンをインストールすると、ベース4.0ランタイムが実際にアップグレードされます。
  • 最後に重要なこととして、アプリケーションを実行するために選択されるフレームワークのバージョンが.NET 4.0で変更されました。このルールはかなり複雑で、インストールされているバージョンとアプリケーション構成の両方に依存します。完全な議論については この記事 を参照してください。

あなたの質問に、それから:

同じWindows 2008 R2サーバーで問題なく両方のアプリ(.NET Framework 2.0および4.6)を実行できますか?

.NET Framework 2.0と4.6の両方がインストールされている場合は、はい。特別な構成設定がない場合、2.0アプリケーションは2.0フレームワークで実行されますが、4.6フレームワーク(それ自体が4.0ランタイムとして表示されます)を使用するように構成することもできます。

もしそうなら、その記事は何を参照していますか?

この記事は、.NET Coreが2倍になった一方で、完全な.NET Frameworkがマイナーバージョン(場合によってはメジャーバージョン)を分離することなく、完全に分離したサイドバイサイドインストールの考えを徐々に放棄してきたことを言及しています自己完結型の展開を可能にすることによるアイデア。つまり、.NET Framework 1.0アプリケーションと.NET Core 2.0アプリケーションが共存できるのは、.NET Framework 2.0と3.5アプリケーションのように依存関係を共有するリスクがなく、2つの.NET Core 1.0アプリケーションでも共存できます。依存関係の共有。これは、完全な.NET Frameworkアプリケーションでは不可能です。 (たとえば)パッチが.NET 2.0にインストールされている場合、少なくともバイナリレベルで、すべての.NET 2.0、3.0、および3.5アプリケーションに影響します。一部のアプリケーションをパッチの影響を受け、他のアプリケーションは影響を受けないようにすることはできません(ただし、互換性を損なう動作のために、通常、構成スイッチが追加されます)。

最後に、私のアプリ(古いものと新しいもの)の両方でCrystal Reportsを使用しています。新しいアプリでは、古いアプリよりも新しいバージョンのCrystal Reportsが必要になる可能性があります。このような異なるバージョンのCrystal Reportsを同じサーバーで実行できますか?これは、Microsoftの記事にあるように、.NET Coreが必要になる状況ですか?

これはフレームワークに依存せず、Crystal Reports自体がバージョン管理を処理する方法に依存します。 メーカーによると 、答えは「はい」です。メジャーリリースではマイナーアップデートではありません。

メジャーリリースバージョンごとに異なるディレクトリにソフトウェアをインストールするため、Crystal Reports 9以降、Crystal Reports Designerの異なるメジャーリリースバージョンのサイドバイサイドインストールがサポートされています。

異なるアセンブリバージョンのサイドバイサイドインストールを可能にするために.NET Coreは必要ありません。さらに、.NET Coreアプリケーションの自己完結型の展開を使用した場合でも、それはおそらくマシン上のCrystal Reportsの共有インストールを参照するのであって、Crystal Reportsの自己完結型の展開ではない(私はそのようなことが存在すると思います。CrystalReportsが現在.NET Coreでサポートされているかどうかさえわかりません)。

最後になりましたが、.NETの一部のバージョンは 正式にはサポートされなくなりました であることに注意してください。これには.NET 4.6が含まれます-正式にサポートされている最も低いバージョンは.NET 4.6.2です Windows Server 2008 R2 SP1が必要です 。 .NET 4.6には、非常に厄介なJITコンパイラーのバグがいくつかあるため、公式サポートの有無に関わらず、実際に使用したくありません。サーバーに2.0以前のバージョンの.NETがまだインストールされていない場合は、最新バージョン(執筆時点では.NET 4.7.1)に直接ジャンプすることもできます。

12
Jeroen Mostert