質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.09%

Visual C# CORE2.0コンソールアプリからWindowsフォーム画面表示とWindowsフォーム画面からコンソール表示メソッド呼び出し

解決済

回答 5

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,712

dendenmushi

score 76

 前提・実現したいこと

VisualStudio2017でvisual C#のコンソールアプリを作りましたが、そこからwindowsフォームを表示し、連携したい。もしくはwindowsフォームからコンソールアプリのメインクラスを呼び出したい。

イメージ説明
アセンブリに入れようと試みましたが参照先に出てきませんでした。

 該当のソースコード

Program.cs(スタートアップに設定)

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            // Keep the console window open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    class Class1
    {
        // メンバー変数の定義 ここから↓
        private int x;
        private int y;
        // メンバー変数の定義 ここまで↑

        // メソッドの定義 ここから↓
        public int GetX()
        {
            return x;
        }

        public int GetY()
        {
            return y;
        }

        public void Set(int a, int b)
        {
            x = a;
            y = b;
        }
        // メソッドの定義 ここまで↑
    }
}

①フォームから他VisualC#のクラスのメソッドを呼ぶ方法
②コンパイルアプリのメインクラスにフォーム呼び出しがあり表示される方法

コンソールアプリを作った後でwindowsフォームを作ってもアセンブリが探せませんでしたし、その逆のフォームアプリを作ってからコンソールにあるクラスのメソッドを呼び出そうとしてもうまくできませんでした。
ふたつの混合のためどのようにして混ざり合わせて実装させればいいか混同しております。
アドバイスよろしくお願い致します。

アドバイス頂いてから試したこと

コンソールアプリのC#プロジェクトネーム上で右クリックから追加でWindowsフォームを選択
イメージ説明

アドバイス頂いてから試したこと2

(目的 追記)
目的は.NET COREコンソールアプリをどうしても使いたいという思いと、そのアプリをデスクトップにて表示というのも同時に考えております。デスクトップで入力した値をコンソールアプリ側に渡し、処理をしてからデスクトップに値を返したいです。

WPFなどでも試してみましたがうまくいきませんでした。
デスクトップにアプリとして表示できればよいので何かほかに案や打開策などあればアドバイスよろしくお願い致します。

<その1>
①コンソールアプリ(.NET CORE)プロジェクトを作成
②Windowsフォームアプリ(.NET Framework)プロジェクトを作成
③フォームアプリにコンソールアプリを参照追加
④フォームアプリのクリックイベントの中にコンソールアプリMainメソッド呼び込み実装
イメージ説明

<その2>
①コンソールアプリ(.NET CORE)プロジェクトを作成
②WPFアプリ(.NET Framework)プロジェクトを作成
③フォームアプリにコンソールアプリを参照追加
④フォームアプリのクリックイベントの中にコンソールアプリMainメソッド呼び込み実装
イメージ説明

<その3>
WPFコンソールアプリプロジェクト名で右クリックcsproj拡張子ファイルを開き、以下変更。
netcoreApp2.0→netstandard2.0
イメージ説明

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • dendenmushi

    2018/08/16 12:27

    Coreの件不足ですみませんでした。そうですね。もう少し要件詰めてみます。ありがとうございます。

    キャンセル

  • SurferOnWww

    2018/08/16 12:45

    今からでも遅くないので、表題を「Visual C# コンソールアプリからWindowsフォーム・・・」⇒「Core 2.0 コンソールアプリから .NET Framework Windowsフォーム・・・」というように一目でわかるように書き直していただけると幸いです。

    キャンセル

  • dendenmushi

    2018/08/16 12:49

    失礼しました。訂正しました。

    キャンセル

回答 5

checkベストアンサー

+1

二つのプロジェクトを一つのソリューションに追加してください。
そして「参照→プロジェクト」で参照するのが楽です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/17 00:36

    あのあとXamarin.Formsでプロジェクト追加したところ同様のnetcoreApp2.0とnetstandard2.0関連の同様のエラーで.Net Frameworkでは難しいようです。そしてUWPも行ってみたのですが、こんどはUWPにて右クリック参照追加で対象プロジェクトにチェックをして押下したところ『プロジェクト~への参照追加はできません。』と出てしまいました。すいません。XamarinというのはWPF、UWPそれ以外にも何かありますか?

    キャンセル

  • 2018/08/17 07:02

    自分では使わないので勘違いしていたかも知れません。
    Xamarin を使うまでもなく .NET Core の UWP で GUI を作った方が早いですね。

    キャンセル

  • 2018/08/18 15:53

    あのあとCoreでもなかなかうまくいかず、奥の手のCOREアプリをexeにしてフォームから引数と共に叩く妙案を思いつきできました。いろいろお世話になりありがとうございました。

    キャンセル

+1

C#では、1つのプロジェクトが1つのアセンブリ(sample.exe や test.dllといったファイル)になります。このアセンブリ同士で情報をやり取りしたり、片方からもう一方を呼び出すには、別の方の回答にあるように、

  1. ソリューションに各アセンブリのプロジェクトを用意する。
  2. プロジェクトの参照設定から、参照先として「もう一方のプロジェクト」を指定する。

これで別のアセンブリ(プロジェクト)のクラスを参照したり、使ったりできるようになります。

ただし、こういうことをやるのは大抵、1つのソリューションに入っている複数のプロジェクトで共通の処理や機能を1か所にまとめて、あちこちで同じ処理が作られるのを避けたいような場合がほとんどです。こういう用途や目的があるのなら、前述のプロジェクトを参照する方法でお望みのことは実現できます。

もし「そういう目的じゃない」のであれば、おそらく別の方法で対応したほうが良い場合のほうが多いので、何のためにそうしたいのかを書き添えていただけるともしかしたら力になれるコメントがつくかもしれませんね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/18 15:55

    根本のところで作りが違っていたので苦戦してしまっていました。回答ありがとうございました。

    キャンセル

+1

こんにちは。

直接の回答ではないですが……
.NET Coreと.Net Frameworkはプラットフォームが違います
同じC#で書けて、同じように作り始められるけれど、実はその中身は全く異なるものです。
プラットフォームの違いというのを例を挙げると、「WindowsとmacOSの違い」ってとこでしょうか。
つまり、例えると、質問者さんは「macOSのコンソールアプリから、Windowsのフォームアプリを開きたい」とか無茶を言っているわけです。
それでもやりようがないかというと、無理やりなんとかならないこともないかもしれませんが、それが本当にやりたいことなのかどうか、もう一度考えて見たほうがいいと思います。


追記

「Windowsフォーム画面で表示」から読み取れるように、「想定動作環境はWindows」であり、.NET Coreの最大のメリットでもある「クロスプラットフォーム」を活かす意図がないと読み取れるため、やりたいことを実現するなら「コンソールアプリのターゲットを.NET Frameworkにする」の一択だと思います。Windowsフォームは.NET Frameworkなので、合わせることでコンソールアプリからも呼び出し可能になります。

Windows10がターゲットならUWPを選ぶこともできますが、これもまた.NET Frameworkや.NET Coreとは異なるWindows専用プラットフォームなので、.NET Coreから呼び出すことはできません。そもそもUWPはコンソールではないのでは……

現状では.NET Coreランタイム上で動作するGUIライブラリは存在しません。あ、いや、もしかしたらするのかな……?少なくとも標準ではまだ搭載されていません。次期バージョンにてGUIライブラリを追加する計画はあるようですが、2018年中には出ないでしょうね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/17 00:38

    アドバイス感謝します。そういうことだったのですね。.NET COREであればUWPは同様かと思い参照追加しようとしたところ拒否されてしまいました。もし何か案あればよろしくお願い致します。

    キャンセル

  • 2018/08/17 07:40 編集

    回答の方に追記しました。

    キャンセル

  • 2018/08/18 16:00

    ありがとうございました。

    キャンセル

0

コンソールのexeをフォームのプロジェクトの参照に直接追加してください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/16 12:29

    回答頂きありがとうございました。

    キャンセル

0

結局、.NET COREコンソールアプリをexe化しwindowsフォームアプリから引数と共に叩いて戻り値を取る方法でなんとか連結できました。皆様いろいろとご不便おかけいたしましてすいませんでした。ありがとうございました。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.09%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • トップ
  • C#に関する質問
  • Visual C# CORE2.0コンソールアプリからWindowsフォーム画面表示とWindowsフォーム画面からコンソール表示メソッド呼び出し