1. ホーム
  2. .net

[解決済み】.Net 4.0から4.5へのリターゲットソリューション - NuGetパッケージを再ターゲットする方法は?

2022-04-08 02:27:03

質問

VS2010 で .NET 4.0 をターゲットにしているソリューションを VS2012 に移行し、.Net 4.5 に再ターゲットしたいのですが、どうしたらいいですか?

よくわからないのは、NuGetパッケージです。例えば、VS2010でEF4からアップデートしたEF5は、ここにあるように実際にはEF4.4であることが判明しました。

    <Reference Include="EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
      <SpecificVersion>False</SpecificVersion>
      <HintPath>..\packages\EntityFramework.5.0.0\lib\net40\EntityFramework.dll</HintPath>
    </Reference>

また、プロジェクトのpackages.configに以下のように記載されていますね。

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0" targetFramework="net40" />
</packages>

そこで質問なのですが。

現在 .NET 4.0 をターゲットとして設定されているすべての NuGet パッケージを .NET 4.5 をターゲットとして再設定するためのベスト プラクティスは何ですか?

どのように解決するのですか?

NuGet 2.1 は、これをよりシンプルにする機能を提供します。 update-package -reinstall -ignoreDependencies をパッケージマネージャーコンソールから実行します。

NuGet 2.0 は、アプリケーションの再ターゲットをうまく処理できません。 パッケージのターゲットフレームワークを変更するには、パッケージをアンインストールして再インストールする必要があります (各パッケージを再インストールできるように、インストールしたパッケージを記録しておく必要があります)。

パッケージのアンインストールと再インストールが必要な理由は、以下の通りです。

  • パッケージのインストール時に、プロジェクトのターゲットフレームワークを決定します
  • そして、パッケージの内容と照合し、適切な \lib フォルダー(および \content フォルダー)を見つけます。
  • Assembly references are added with Hint Paths that pointing to the \lib folder, with right subfolder (for example, \libnet40) パッケージの \lib folder を指す Hint Paths を追加します。
  • コンテンツファイルはパッケージの \content フォルダーからコピーされ、正しいサブフォ ルダー(例えば \content
  • パッケージのインストールに使用したtargetFrameworkをpackages.configファイル内に記録します。
  • プロジェクトのターゲットフレームワークを変更した後も、Hint Pathsはnet40を指します。
  • パッケージのアンインストール時には、packages.config に記録された targetFramework をチェックして、プロジェクトからどのターゲットフレームワークのライブラリ/コンテンツを削除するか確認します。
  • パッケージを再インストールすると、更新されたターゲットフレームワークを検出し、適切なライブラリ/コンテンツを参照/コピーします。