ささいなことですが。

Windowsアプリテスト自動化ライブラリFriendly開発者の日記です。

.NetCoreから.NetFrameworkのdllを普通に参照できた・・・

え?これって常識だったの?僕が知らんかっただけ?

きっかけはこのブログ

qiita.com
えーと、.NetCore3でWinFormsとかWPFつくるコマンドってどうだったけなー。って感じでググってたら、こんなブログがありました。サーとみてると、「.NET Frameworkライブラリの使用」ってのがありました。えええ?どういうこと?なんでそんなことできんの?だって、objectクラスの実装されているdll別々やで・・・

あ...ありのまま 今 起こった事を話すぜ

な… 何を言っているのか わからねーと思うが 
おれも 何をされたのか わからなかった…
↑書きたかっただけ。

とりあえず、WinFormsでCore3.0とFrameworkのexe作りました。

f:id:ishikawa-tatsuya:20190302164246p:plain
両方とも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);

f:id:ishikawa-tatsuya:20190302164548p:plain
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

f:id:ishikawa-tatsuya:20190302164527p:plain
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のアセンブリを参照

え?マジで?普通にできたよ。これって常識やったの?
f:id:ishikawa-tatsuya:20190302165620p:plain
これ実行したらどうなるの?
ってことで、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の方に変わった!

f:id:ishikawa-tatsuya:20190302170157p:plain

これって実質.NetStandardなのでは?

これって正式仕様なの?よくわかんないなー。