216

現在 VS2010 で .NET 4.0 をターゲットにしているソリューションを VS2012 に移行しましたが、今度はそれを .Net 4.5 に再ターゲットしたいと考えています。

よくわからないのは、NuGet パッケージです。たとえば、VS2010 で EF4 から更新した EF5 は、実際には EF 4.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 をターゲットに変更するためのベスト プラクティスは何ですか?

4

5 に答える 5

273

NuGet 2.1には、これをはるかに簡単にする機能が用意されていますupdate-package -reinstall -ignoreDependencies。パッケージ マネージャー コンソールから実行するだけです。

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

パッケージをアンインストールして再インストールする必要がある理由は次のとおりです。

  • パッケージをインストールするときに、プロジェクトのターゲット フレームワークを決定します
  • 次に、それをパッケージの内容と照合して、適切な \lib\ フォルダー (および \content\ フォルダー) を見つけます。
  • アセンブリ参照は、パッケージの \lib\ フォルダーを指すヒント パスと共に追加され、適切なサブフォルダー (\lib\net40 など) が含まれます。
  • コンテンツ ファイルは、packages \content\ フォルダーから、適切なサブフォルダー (\content\net40 など) とともにコピーされます。
  • パッケージのインストールに使用された targetFramework を packages.config ファイルに記録します。
  • プロジェクトのターゲット フレームワークを変更した後、ヒント パスはまだ net40 を指しています。
  • パッケージをアンインストールするとき、packages.config に記録された targetFramework をチェックして、プロジェクトから削除するターゲット フレームワークのライブラリ/コンテンツを確認します。
  • パッケージを再インストールすると、更新されたターゲット フレームワークが検出され、適切なライブラリ/コンテンツが参照/コピーされます
于 2012-08-17T20:35:44.180 に答える
42

update-package -reinstall <packagename>コマンドに問題がある場合は、次-ignoreDependenciesのようにフラグを付けて実行することを検討してください。

update-package -reinstall <packagename> -ignoreDependencies

このフラグは、パッケージの依存関係をそのままにします。そうしないと、最初に再インストールしたかったパッケージのバージョンが同じままであっても、更新されてしまう可能性があります。

詳細はこちら

于 2013-10-10T20:42:45.403 に答える