web-dev-qa-db-ja.com

VS2017でcsprojファイルをアップグレードする方法

VS2017はこれまでいくつかのproject.json/.xprojベースのプロジェクトから新しい.csproj フォーマット。

また、新しい.csproj古い形式の.csproj以前は.NET Frameworkのみをターゲットとしていたプロジェクト(つまり、dnx/dotnet CLIでは動作しませんでした)。

プロジェクトが.NET Frameworkのみをターゲットとする場合でも、<PackageReference>および簡単に編集可能な.csprojファイルは、(できればあまり大きくない)トラブルに見合う価値があるようです。

これはVisual Studio 2017で直接行うことは可能ですか?

そうでない場合、どのような手動手順が必要ですか?

30
Drew Noakes

.csprojファイルをアップグレードする必要がないことを明確にするために、回答を編集しています。ドリューが以下にコメントしたように、そうすることには利点があります。ただし、VS2017は引き続き従来のcsprojファイルで問題なく動作します。さらに、VS2017にはアップグレードを実行するものは何もありません。新しい形式を利用したい場合は、以下の手順が役立ちます。

.csprojファイルを新しいVisual Studio 2017形式にアップグレードすることは、単純なクラスライブラリまたはコンソールプロジェクトにとって簡単です。

バージョン管理を使用していない場合は、開始する前に、必ずcsprojファイル、およびProperties/AssemblyInfo.cspackages.configの両方をバックアップしてください。新しいcsprojファイルは素晴らしいです。多くのプロジェクトで、数百行のコードを数十行に置き換えました。ただし、Visual Studio 2017は以前のcsprojファイルを引き続きサポートしているため、これは時期尚早な最適化の場合があります。多数のプロジェクト、多くのNuGetパッケージ、およびcsprojのカスタマイズを含むソリューションがある場合、不必要なmake workプロジェクトを実行している可能性があります。

次のように、.csprojファイルの内容全体を適切なコードに置き換えます。

クラスライブラリ

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net462</TargetFramework>
  </PropertyGroup>
</Project>

コンソールアプリケーション

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net462</TargetFramework>
  </PropertyGroup>
</Project>

<TargetFramework>attributeを、net452、net46、net461などの必要な.NETバージョンに変更します。

デフォルトでは、プロジェクトフォルダー内のすべてのコードがコンパイラーによって選択されます。プロジェクトフォルダーの外部にコードがある場合は、以前のバージョンのVisual Studioおよびcsprojと同じ方法で明示的に参照する必要があります。

上記の変更を行った後、ソリューションをVisual Studio 2017にロードします。この時点で、最も基本的なプロジェクトをビルドする必要があります。そうでない場合は、欠落しているアセンブリまたはプロジェクト参照を追加する必要があります。参照の追加は、以前のバージョンのVisual Studioでの参照の追加と非常に似ています。ソリューションエクスプローラーでプロジェクトを選択し、Dependenciesを右クリックして、Add Referenceを選択します。不足しているフレームワークまたはプロジェクトの参照を追加します。

ソリューション/プロジェクトを再度ビルドしてみてください。属性の重複に関するエラーが表示される場合があります。このエラーは、以前にAssemblyInfo.csで定義された属性がcsprojファイルに移動されたためです。 Propertiesフォルダーの下にあるAssemblyInfo.csファイルを削除すると、これらのエラーが解決するはずです。 AssemblyInfo.csを削除する前に、定義したデータを移動する必要があります。ほとんどの属性は、プロジェクトファイルのパッケージ情報セクションに入力できます。プロジェクト名を右クリックし、[パッケージ]ページを選択して、AssemblyInfo.csファイルで以前に定義したデータを入力します。これには、アセンブリバージョン、作成者、著作権などの項目が含まれます。

以下は、前のステップを示すスクリーンショットです。

enter image description here

プロジェクトでNuGetパッケージを使用している場合は、それらも新しい形式に移動する必要があります。 Visual Studio 2017より前NuGetは、csprojの参照に加えて、プロジェクトのルートにあるPackages.configという名前のファイルに依存していました。 NuGetパッケージ参照を移行するには、ソリューションを右クリックしてNuget Package Managerをロードします。右上隅に読み込まれたら、歯車をクリックすると、NuGetパッケージマネージャーオプションが読み込まれます。 Generalを選択します。 [パッケージ管理]で、オプションDefault package management formatをPackageReferenceに変更します。この時点で、すべてのNuGetパッケージをソリューションに手動で追加する必要があります。すべてのパッケージは、プロジェクトのルートフォルダーにあるpackages.configファイルにあります。すべてのパッケージを追加し直したら、packages.configファイルを削除できます。

32
Mark

私はcsprojファイルで動作するこのためのツールを作成しました: https://github.com/hvanbakel/CsprojToVs2017

Csprojで実行するだけで、ファイルが変換され、古いバックアップが作成されます。

18
thekip

更新:以下のツールリンクは機能していませんが、VS2017 15.7では、この機能は Visual Studioに組み込まれています

注:これは、NuGet参照メカニズムのみを更新します。新しいcsprojタイプには変更されません。


Packages.configまたはproject.jsonを使用しているプロジェクトをPackageReferenceに自動的に変換する素晴らしいツールがあります。

https://marketplace.visualstudio.com/items?itemName=TaylorSouthwickMSFT.NuGetPackagetoProjectjsonConverter

  1. Visual Studioにインストールし、ソリューションを右クリックします

  2. 拡張機能をインストールした後、ソリューションを開き、ソリューションエクスプローラーでソリューションを右クリックし、[パッケージ参照へのアップグレード]をクリックします

  3. それを選択すると、プロジェクトは次のように変換されます。ソース管理が有効なディレクトリでこれを実行することを強くお勧めします。これにより、何か問題が発生した場合に簡単に元に戻すことができます。

enter image description here

2
Alper Ebicoglu