え?これって常識だったの?僕が知らんかっただけ?
きっかけはこのブログ
qiita.com
えーと、.NetCore3でWinFormsとかWPFつくるコマンドってどうだったけなー。って感じでググってたら、こんなブログがありました。サーとみてると、「.NET Frameworkライブラリの使用」ってのがありました。えええ?どういうこと?なんでそんなことできんの?だって、objectクラスの実装されているdll別々やで・・・
あ...ありのまま 今 起こった事を話すぜ
な… 何を言っているのか わからねーと思うが
おれも 何をされたのか わからなかった…
↑書きたかっただけ。
とりあえず、WinFormsでCore3.0とFrameworkのexe作りました。
両方ともWinFormsのアプリですね。
こんなコードを入れて、objectとFormの入ってるアセンブリのパスを表示させてます。
var text = new TextBox { Multiline = true, Dock = DockStyle.Fill }; text.Text = string.Join(Environment.NewLine, new[] { typeof(object).Assembly.Location, GetType().BaseType.Assembly.Location }); Controls.Add(text);
C:\Windows\Microsoft.NET\Framework\v4.0.30319\mscorlib.dll
C:\Windows\Microsoft.Net\assembly\GAC_MSIL\System.Windows.Forms\v4.0_4.0.0.0__b77a5c561934e089\System.Windows.Forms.dll
C:\Program Files\dotnet\shared\Microsoft.NETCore.App\3.0.0-preview-27122-01\System.Private.CoreLib.dll
C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App\3.0.0-alpha-27128-4\System.Windows.Forms.dll
ここまでは、あたり前な話。.NetFrameworkはMicrosoft.NET以下、Core3.0はdotnet以下のアセンブリを参照してますね。
.NetCoreから.NetFrameworkのアセンブリを参照
え?マジで?普通にできたよ。これって常識やったの?
これ実行したらどうなるの?
ってことで、Core3.0のexeからFrameworkのFormを呼び出してみました。
//これはCore3.0のWinForms public partial class CoreForm : Form { public CoreForm() { InitializeComponent(); Text = "DotNetCore3"; var text = new TextBox { Multiline = true, Dock = DockStyle.Fill }; text.Text = string.Join(Environment.NewLine, new[] { typeof(object).Assembly.Location, GetType().BaseType.Assembly.Location }); Controls.Add(text); var button = new Button { Text = "Show Framework", Dock = DockStyle.Bottom}; button.Click += (_, __) => { //FrameworkのFormを呼び出し using (var framework = new FrameworkForm()) { framework.ShowDialog(); } }; Controls.Add(button); } }
.NetFrameworkのFormのアセンブリの参照がDotNetCoreの方に変わった!
これって実質.NetStandardなのでは?
これって正式仕様なの?よくわかんないなー。