Xamarin.Forms+.NET Standard 1.6を試す

Takashi Kawasaki
5 min readMay 30, 2017

--

.NET Standardを眺めてると、PCLとは違って、APIが標準でたくさんあって素敵じゃないですか。

見てる感じだと、UdpClientとかも普通に存在するし、.NET 4.5とかのものとは違う何かだけど、System.Timerなどというものもある(詳細がよくわからん・・・)。

PCLでコード書くと、とっても息苦しい思いするじゃないですか。嫌なんですよね。実行時にNotSupportedExceptionとか投げてくれる方がコードはずっと書きやすいと思うんです。

C++ #ifdefに慣れてると、Sharedでプロジェクトつくったり、Sharedでコード書く方が気が楽ではあるんですよね・・・PCL眺めるとね。

Disclaimer

御託はさておき、Visual Studio 2017上で、Xamarin.Forms+.NET Standard 1.6を試してみたので、自分のメモぐらいの感じでここに書き残しておきます。

普通にXamarin.Forms (PCL)でプロジェクトを作成する

Visual Studio の新規プロジェクトから普通に作る。

UWPは要らないのでこの時点で削除する

必要な人は、.NET Standardのバージョンを下げる必要があると思います。基本的には、この記事は下記の記事を参考にしているので下記を見ればいいかもしれません。

Xamarin.Forms のバージョンを確認

今回は、2.3.4.247 。

PCLのプロジェクトの csproj を書き換える

書き換えるというか、まるまる、下の内容で置き換える。クソ簡単な構造になる。

  • iOSとAndroidだけあればいいので、.NET Standard 1.6 (netstandard1.6)を使う。
  • Xamarin.Formsのバージョンを上で確認したバージョン(2.3.4.247)にする。

Duplicate ‘System.Reflection.AssemblyCompanyAttribute’ attribute

表題のようなエラーが出るが、ググったところ次のような記事を発見。

流し読みした結果、「Properties/AssemblyInfo.csを消せ」という大胆な案が。なるほど。確かにそうすればこのエラーは消えるよね。バージョン情報が消えるけど、どうせ、単なる1依存ライブラリなのでいいでしょう。

NuGetしたライブラリが.Android/.iOSのプロジェクトから認識されません:(

書き忘れてました・・・というか、別プロジェクトで同じことをして、ビルドできなくて???ってなってここに書き忘れていたことを気づきました。

最初に紹介したページには、次のような注意書きがあります。

For now, you’ll need to add the <RestoreProjectStyle>PackageReference</RestoreProjectStyle> property near the top of your iOS and Android csproj files. That tells NuGet restore to use the PackageReference mode even if you don’t have any direct packages (this is important for transitive restore). If you have any PackageReference elements in your iOS or Android csproj, then you don’t need this. For UWP, you already should have a PackageReference to the UWP meta-package (Microsoft.NETCore.UniversalWindowsPlatform version 5.3.2).

If you hit any issues with binaries not showing up in your bin directories (for your Android and iOS “head” projects), make sure that you have set CopyNuGetImplementations to true in your csproj.

要は、.Android/.iOS側のcsproj中の最初の方(最初のPropertyGroupとか)に次の2つの要素を足せということです。

場所がわかんねーよって人は、下記のサンプルなんかを参考にすればいいかと:

--

--