VS2017はこれまでいくつかのproject.json
/.xproj
ベースのプロジェクトから新しい.csproj
フォーマット。
また、新しい.csproj
古い形式の.csproj
以前は.NET Frameworkのみをターゲットとしていたプロジェクト(つまり、dnx/dotnet CLIでは動作しませんでした)。
プロジェクトが.NET Frameworkのみをターゲットとする場合でも、<PackageReference>
および簡単に編集可能な.csproj
ファイルは、(できればあまり大きくない)トラブルに見合う価値があるようです。
これはVisual Studio 2017で直接行うことは可能ですか?
そうでない場合、どのような手動手順が必要ですか?
.csproj
ファイルをアップグレードする必要がないことを明確にするために、回答を編集しています。ドリューが以下にコメントしたように、そうすることには利点があります。ただし、VS2017は引き続き従来のcsproj
ファイルで問題なく動作します。さらに、VS2017にはアップグレードを実行するものは何もありません。新しい形式を利用したい場合は、以下の手順が役立ちます。
.csproj
ファイルを新しいVisual Studio 2017形式にアップグレードすることは、単純なクラスライブラリまたはコンソールプロジェクトにとって簡単です。
バージョン管理を使用していない場合は、開始する前に、必ずcsproj
ファイル、およびProperties/AssemblyInfo.cs
とpackages.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
ファイルで以前に定義したデータを入力します。これには、アセンブリバージョン、作成者、著作権などの項目が含まれます。
以下は、前のステップを示すスクリーンショットです。
プロジェクトでNuGetパッケージを使用している場合は、それらも新しい形式に移動する必要があります。 Visual Studio 2017より前NuGetは、csproj
の参照に加えて、プロジェクトのルートにあるPackages.config
という名前のファイルに依存していました。 NuGetパッケージ参照を移行するには、ソリューションを右クリックしてNuget Package Managerをロードします。右上隅に読み込まれたら、歯車をクリックすると、NuGetパッケージマネージャーオプションが読み込まれます。 General
を選択します。 [パッケージ管理]で、オプションDefault package management format
をPackageReferenceに変更します。この時点で、すべてのNuGetパッケージをソリューションに手動で追加する必要があります。すべてのパッケージは、プロジェクトのルートフォルダーにあるpackages.config
ファイルにあります。すべてのパッケージを追加し直したら、packages.config
ファイルを削除できます。
私はcsprojファイルで動作するこのためのツールを作成しました: https://github.com/hvanbakel/CsprojToVs2017
Csprojで実行するだけで、ファイルが変換され、古いバックアップが作成されます。
更新:以下のツールリンクは機能していませんが、VS2017 15.7では、この機能は Visual Studioに組み込まれています 。
注:これは、NuGet参照メカニズムのみを更新します。新しいcsprojタイプには変更されません。
Packages.configまたはproject.jsonを使用しているプロジェクトをPackageReferenceに自動的に変換する素晴らしいツールがあります。
Visual Studioにインストールし、ソリューションを右クリックします
拡張機能をインストールした後、ソリューションを開き、ソリューションエクスプローラーでソリューションを右クリックし、[パッケージ参照へのアップグレード]をクリックします