.NET Standardで旧来のWindows向け.NET DLLを使う

.NET Standardで、VisualStudio 2015以前で作成した.NET FrameworkのDLLを使う方法です。

が、なぜかdotnet runできないので、ビルドするところまでです。実行はできません

■まえおき

.NET Coreでは、標準ライブラリがBCL (Base Class Library)から整理し直したCore Library、別名CoreFXに変わりました。
BCLとCoreFXは、APIは同じですが、参照するライブラリが違うため、そのまま流用することはできません。
例えば、System.ObjectはBCLではmscorlib.dll、CoreFXではSystem.Runtime.dllを参照するため、C#からHello Worldすることすらできません。
一方、.NET Standardが登場し、将来的にBCLとCoreFXはPCL (Portable Class Library)に統合されることになったため、この問題は将来的に解決される見込みです。
しかし将来ではなく、今、この問題を解決するための方法も用意されているので、ここに記録しておきます。

■プロファイルの互換性

Microsoftのドキュメントに一覧が用意されています。
例えば、.NET Framework 4.5.1は.NET Standard 1.2と互換性があります。
.NET Framework 4.5未満と互換性のある.NET Standradはありません。
現在のところ.NET Frameworkと.NET Coreは互換性がありませんが、PCL 2.0から統合される予定だそうです。

■プロジェクトの編集

ここでは.NET Core SDK 1.0.1 Preview 3を使います。
リンクが切れたときはここから探してください
現在最新のSDKは1.1ですが、プロジェクトファイルがcsprojではなく廃止予定のproject.jsonにしか対応しておらず、project.jsonでNuGetに登録されていないライブラリをNuGetパッケージマネージャーに登録せずに参照する方法が分からなかった(どうやら出来ないらしい?)ので避けています。
project.jsonの場合の編集方法は英語のMSDNブログに書かれています。

“dotnet new”すると生成されるcsprojに、以下のような要素が含まれていると思います。

<TargetFramework>netcoreapp1.0</TargetFramework>

<ItemGroup>
<PackageReference Include=”Microsoft.NETCore.App”>
<Version>1.0.1</Version>
</PackageReference>
<PackageReference Include=”Microsoft.NET.Sdk”>
<Version>1.0.0-alpha-20161104-2</Version>
<PrivateAssets>All</PrivateAssets>
</PackageReference>
</ItemGroup>

TargetFrameworkを互換性のある.NET Standardプロファイル(netcoreapp1.0など)に変更します。
そして、PackageRefernceのうち.NET Core用である”Microsoft.NETCore.App”を削除して、次のように置き換えます。

<PackageReference Include=”Microsoft.NETCore.Portable.Compatibility”>
<Version>1.0.*</Version>
</PackageReference>
<PackageReference Include=”NETStandard.Library”>
<Version>1.6.*</Version>
</PackageReference>

保存してから、”dotnet restore”で参照するDLLをNuGetからインストールします。

そして、.NET Frameworkで作られたDLLを参照に追加します。

<Reference Include=”HogeLib”>
<HintPath>../HogeLib/bin/Debug/HogeLib.dll</HintPath>
</Reference>

“dotnet build”すると、ビルドできるはずです。

■実行

なぜかできません。
“dotnet run”すると”Unable to run your project.”と言われます。
exe直叩きでも実行できませんでした。
方法が分かれば追記します。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中