追記
Visual Studio for Mac 7.3.0.708で以下の不具合が修正されています.
注意!!!!!!
以下の手段でタイトルの件は試すことが出来ますが,現在手元のVisual Studio for Mac 7.3.0.692で,jsonファイルを開くとVisual Studio for Macの動作が不安定,またファイルを閉じようとするとクラシュする問題が発生しています.
試す方は自己責任で...
Beta Release: 15.5 Preview 1 | Xamarin Releases
つい先日 Visual Studio for Mac 7.2のStableがリリースされたばかりですが,さっそく7.3のPreviewも配信され始めました.
その中でも非常に注目なのが,Xamarin.Forms 2.4を使用し,netstandardなプロジェクトで開発できるようになったことです.
Xamarin.Forms 2.4.0 Service Release 1 - Xamarin
公式でもアナウンスされていましたが,リリースされたときから
> NET Standard support does not work completely with Visual Studio for Mac. We highly recommend waiting for an update and service release. The work to improve this support is being tracked here.
と言われてビルドをすることが出来ませんでした(xamlの埋め込みの問題でしたっけ?)
ですが,今回のアプデにより以下の Xamarin.Forms 2.4対応のコミットがマージされたことにより試すことが出来そうです.
それでは実際に試してみましょう.
あれ,実はもう7.2でもxamlファイルが見えなくなったりするバグはあれど出来そう...
やり方は概ね
id:nuitsjp さんの記事を追っていけば問題ないのですが,ここで変更点が一部あります.
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> <ItemGroup> <Compile Update="**\*.xaml.cs" DependentUpon="%(Filename)" /> <EmbeddedResource Include="**\*.xaml" SubType="Designer" Generator="MSBuild:UpdateDesignTimeXaml" /> </ItemGroup> <ItemGroup> <PackageReference Include="Xamarin.Forms" Version="2.3.5.256-pre6" /> </ItemGroup> </Project>
こう書かれているものを,
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <TargetFramework>netstandard2.0</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Xamarin.Forms" Version="2.4.0.282" /> </ItemGroup> </Project>
こう変えます,更にシンプル!!
自分で EmbeddedResource
などと記述してしまうと,もともとXamarin.Forms 2.4のビルドタスクに含まれているxaml関係のタスクとかぶってしまって,
Duplicate 'Compile' items were included. The .NET SDK includes 'Compile' items from your project directory by default. You can either remove these items from your project file, or set the 'EnableDefaultCompileItems' property to 'false' if you want to explicitly include them in your project file. For more information, see https://aka.ms/sdkimplicititems.
と出て怒られてしまうからです.
その後一度このnetstandardなライブラリのみでビルドをかけて,その後iOSやAndroidの実行などをするとうまく通ります. だめだったらcleanして試しましょう.
追記
以上の方法で現在開発しているプロジェクトを書き変えて実装を進めています. 残念なことにファイルダイアログなどを使用して,新しいxamlファイルを作成すると,csprojファイルに自動的に依存が追加されてしまってビルドが通らなくなります. 毎回自分でcsprojを編集して,embeddedの欄を消す必要があるようです...めんどい
またその方法で削除すると,UnloadしてReloadするまでそのxamlファイルがプロジェクトから見えなくなります...なんだこれは...
更に追記
それからこの問題に関するBugzillaを監視していたのですが,最近おもしろいハックが紹介されていたので紹介します.
59286 – Xamarin.Forms default MSBuild items not handled
Xamarin.Forms.AddinのContentViewとかのテンプレートファイルに対してSubType="Designer"
を加えるだけ.
実際に試してみましたが,どうも良さそうな感じでした.
以上です.