shuhelohelo’s blog

Xamarin.Forms多めです.

既存の.NET Frameworkクラスライブラリを.NET Standardクラスライブラリにするには(動くとは言ってない

.NET Coreによって様々なプラットフォームでC#のプログラムが動くようになりました。 これまで.NET Framework用として作ってきた、もしくは世の中の有志たちが公開してきたライブラリなどの資産を活用しない手はありません。

そこで、既存の.NET Frameworkクラスライブラリを各プラットフォームで動作するように.NET Standardクラスライブラリに移行するということをやってみます。

手順概略

  1. まずは対象のクラスライブラリのプロジェクトをVisual Studio 2019で開きます。

  2. .NET Standardクラスライブラリの新規プロジェクトを作成します。

  3. 次にクラスライブラリのプロジェクト内のフォルダ、ファイルをすべて選択します。

  4. 選択したフォルダ、ファイルを先程作成した.NET Standardクラスライブラリプロジェクトにドラッグアンドドロップします。

  5. .NET Standardクラスライブラリプロジェクトをビルドします。

  6. エラーが出たら潰します。

やってみる

まずは.NET Frameworkクラスライブラリのプロジェクトを用意します。 自分の手元のプロジェクトのcsprojファイルをテキストエディタで開いてみると、以下のようにターゲットフレームワーク4.5.2になっていることが確認できました。

...省略

  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{A377831F-7F95-4EF8-B1B3-7CAA72628E00}</ProjectGuid>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>SentenseSeparator</RootNamespace>
    <AssemblyName>SentenseSeparator</AssemblyName>
    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
  </PropertyGroup>

...省略

ちなみに、2017年6月の代物でした。 f:id:shuhelohelo:20190427160857p:plain

さて、このプロジェクトをVS2019で開きます。 はじめはプロジェクトのプロパティからターゲットフレームワークを変更できるのかと思いましたが、そこに.NET Standardの選択肢はありません。

f:id:shuhelohelo:20190427154633p:plain

そこで.NET Standardのプロジェクトを作成し、そこにソースコードをまるっとコピーするのです。

ソリューションエクスプローラから[追加] > [新しいプロジェクト]を選択します。 f:id:shuhelohelo:20190427154719p:plain

新規作成するプロジェクトのテンプレートとして「クラスライブラリ(.NET Standard)」を選択します。 f:id:shuhelohelo:20190427154929p:plain

新しい.NET Standardクラスライブラリのプロジェクトが作成されました。 f:id:shuhelohelo:20190427155416p:plain

次に、.NET Frameworkプロジェクトでプロジェクトを構成するファイルやフォルダを選択します。 (フォルダもなくファイル1つだけなのでサンプルとしてはだめでした…。) f:id:shuhelohelo:20190427155547p:plain

これを.NET Standardプロジェクト側にコピペまるっとコピペします。 ドラッグアンドドロップでも良いですし、Ctrl+CCtrl+Vでも良いので、VS上でコピペします。 恥ずかしくもClass1.csなどというファイル名なので上書き確認されたりしました。 f:id:shuhelohelo:20190427155947p:plain

あとは、このプロジェクトをビルドして、エラーを潰せば.NET Standardなクラスライブラリの完成です。