2016-08-17 7 views
8

Visual Studioで出力タイプとしてConsole Applicationを持つC#プロジェクトがあります。コンソールとDLLと同じプロジェクトを作成

しかし、私はまた別の解決策のためにこれらのプロジェクトのClass Libraryが必要です。

今は出力タイプを毎回切り替える必要がありますが、exedllを同じbuild-eventに生成することは可能でしょうか?

これにはpost-build-eventがありますか?

+0

_Compiler Options_を探すチャンスが見つかりましたか? – uTeisT

答えて

9

私の知る限り、コンパイル後に出力タイプを変更する可能性はありません。つまり、の2つのプロジェクトが同じソースコードファイルを使用しますが、出力タイプが異なるソリューションのライブラリライブラリにある場合は可能です。そうすれば、コードの重複を避けることができます。

+2

コーダーとドルクが正しいです。あなたのソリューションでは、クラスライブラリプロジェクトを追加し、ほぼすべてをそこに配置します。コンソールプロジェクトはdllを呼び出します。 –

+1

私は同じことをするでしょう...私には正解です。 – Rahul

+1

共通のコードをコンソールアプリケーションから共通のDLLに持ち出すためのリファクタリング –

2

コンソールアプリケーションは、プロジェクトの種類です。それを変更することはできません。

可能なことは、あなたのロジックをクラスライブラリプロジェクトに持ち込み、必要なあらゆるタイプのプロジェクトからクラスライブラリを使用することです。

+1

もちろん可能です。タブの「アプリケーション」の下にあるソリューション設定を見てください。出力タイプのコンボボックスがあります。 – Smartis

+0

@Smartis、それは私がそれに気付かなかったのは奇妙です。たぶん私はそれを必要としなかったので。なぜあなたはそのような機能を正確に必要としますか?ビルド中に何を得るか(dllまたはexe)を決定する理由は何ですか?多分私が知っていれば私は助けることができる。ところで、ピーター・Iのソリューションは機能しますが、ロジックとUIを別々のプロジェクトに分ける方がいいです。 – Doruk

4

.net exeアセンブリは、通常、クラスライブラリと同じように参照できます。

これで、exeファイルを作成し、他のプロジェクトでexe(奇妙なことは聞こえるが動作する)を参照するだけでいいです。

これは参照を参照するためのダイアログです。表示されるように、exeファイルを選択することができます。 Browse for Reference Dialog

しかし、コメントされているように、それは本当にあなたのusecaseが何であるかによって異なります。 私は、顧客がexeを発見しないことを希望するエントリポイントを持つexeを出荷することはお勧めしません。しかし、それについては、エントリーポイントを条件付きでコンパイルすることができます。例えば

class Program { 
    // This is the entry point of the EXE 
    public static void Main() { 
#if DEBUG 
    // Start Debug Application 
    ... 
#else 
    // Shipped to client - Entry point disabled 
    return; 
#endif 
    } 
} 

出荷exeファイルと出荷クラスライブラリを持って、関連する理由がある場合、私はこのようなソリューションをリファクタリングします:

  • (A)完全なアプリケーション( slnファイル)
    • (B)コンソールアプリケーション(.csproj)(C)への参照を有する
    • (C)クラスライブラリプロジェクト(.csproj)、ライブラリとライブラリ自体を使用するアプリケーションがあることを他の人に完全に透明であることで

+1

しかし、一般的にあなたのクライアントにexeを出荷しないので、動作しますが、推奨されません。むしろパッケージを一緒に使うか消耗品のDLLだけ – Rahul

+1

これは正しい答えだと思います。 exeは、ある時点でエントリポイントを持つアセンブリです。 – stijn

+0

私は誤解されるかもしれませんが、実行可能ファイルの拡張子をdllに変更してクライアントを賢明にすることはできませんでしたか?それはちょうどdllのように見えるでしょうが、エントリポイントを持っています(エントリポイントはただちに戻ります)。 – KDecker

0

人々はそれは不可能だと思うが、それは実際に、なぜ私は本当にわかりません。

最も簡単な方法は、exedllに改名することです。しかし、それは多くの場合に機能します。また、 "Peter I"は、.NET exeを他のプロジェクトのアセンブリとしてインポートできると述べています。とにかく実際にはdllが必要ないかもしれません。ここに述べたように別の方法がC# command lineを使用することでしょう

/out (C# Compiler Options)

あなたはこのための通常の解決策は、2つのプロジェクトとソリューションを使用しているイベントPre-build Event/Post-build Event Command Line Dialog Box

0

を構築プリ/ポストコマンドのコマンドラインオプションを使用することができます。

  • (DLLにビルド)すべてのコードとクラスライブラリ
  • リチウムを参照するコンソールアプリケーションブラジャーのMainはちょうどいくつかの機能を呼びます。

詳細については、MSDN page on Solutionsを参照してください。

Codorは手動でファイルをConsoleプロジェクトに追加することを推奨しますが、どちらのバージョンでもビルド設定が共有されないという欠点があります。

関連する問題