TokugawaTakeshi / CrossPlatformOrganizerAppplication

0 stars 0 forks source link

.Net規格相互性関連問題 #1

Closed TokugawaTakeshi closed 2 years ago

TokugawaTakeshi commented 2 years ago

ビジネスルールソリューションは .NET 6.0 ですが クライアントソリューション はレガシ NET 2.0 しか指定出来ないですね、、、下記の問題が起きた原因は.Net規格 の対立という理解で宜しいでしょうか?

例外がスローされました: 'System.IO.FileLoadException' (System.Private.CoreLib.dll の中)
型 'System.IO.FileLoadException' の例外が System.Private.CoreLib.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした
Could not load file or assembly 'System.Runtime, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
using BusinessRules.Enterprise;

using System;
using Xamarin.Forms;

namespace Client
{
  public partial class App : Application
  {
    public App()
    {

      InitializeComponent();

      Console.Write(
        new Person(
          ID: 1,
          name: "TestPerson",
          email: "test@jmail.com",
          phoneNumber: "090-1234-5678"
        )
        { Age = 18 }
      );

      MainPage = new MainPage();
    }
  }
}

もしそうしたか、どうすれば宜しいでしょうか? Xamarinで作るなら、.NET2.0を使うしかないですか? Xamarinの更新の見通しが無いでしょうか?

gummoni commented 2 years ago

.NETファミリーには深い黒歴史がありまして、 ①.Net Framework(旧:XP~) ②Mono系列(クロスプラットフォーム、Linux/MAC/Win) ③旧Net core/現.NET系列(新:Win10~)の3種類あり、 各系列の統合規格として、.Net Standardという総称が生まれました。

.Net Standard2.0は2年前くらい前のバージョンの.Netファミリーをサポートしています。 .Net standard系列は2.1を最終バージョンとなって、今後は.NET系列のバージョンで統一するようです。 https://docs.microsoft.com/ja-jp/dotnet/standard/net-standard?tabs=net-standard-2-0

Xamarinがなぜデフォルトが.Net standard2.0なのかというと、 それはMSによる買収と.NET系列への方針転換による影響があります。

ちなみにXamarin周辺ライブラリは.NET6対応は進んでいるので、 xamarin自体のバージョン上げる事は可能です。(.Net standard2.1) しかしバージョンの整合性チェックする手間が増えるため、 デフォルトのバージョンのまま利用する方が悩み少なくて良いですね。

TokugawaTakeshi commented 2 years ago

@gummoni

詳しい説明、有難う。

.NET6.Net standard 2.1 より新しい技術と言う理解で良いですか? そうだったら、将来のXamarin中心国内業者として最新技術を今の内に活用し始めたいと思ています。 Clientプロジェクトの中に.NET6に切り替える方法を教えてもらえますか?

gummoni commented 2 years ago

変更の仕方は ソリューションエクスプローラーにある各プロジェクトを右クリック→「プロパティ」を開いた中に バージョン設定の項目があります。

ちなみに.Net standard2.1は.NET6を含んでいるので 共有ライブラリ「XamarinExploring」は .Net standard 2.0または2.1が望ましいです。 (現状のXamarinはMono系列なので、.Net standardでバージョン設定する事が推奨されています)

今後AndroidやiOSのようにWindows向けのプロジェクトを作った際は Windows向けプロジェクトのバージョンを.NET6に変更可能です。

TokugawaTakeshi commented 2 years ago

@gummoni

プロジェクトは最新の.NETへ移動されました。 御支援、有難う。