NuGetに複数のDLLとして配備された.NET Standard 1.5を対象とするプロジェクトがあります。このプロジェクトはJavaから移植されました。プロジェクトのいくつかのクラスの中には、コマンドラインから実行される静的なMain()
メソッドがあります。 .NETのコアで同じDLLをコンソールアプリケーションとNuGetの両方の依存関係にすることはできますか?
2 ways to compile a DLLがあるようだ。
<OutputType>Exe</OutputType>
- 実行可能なコンソールアプリケーション(DLL)<OutputType>Library</OutputType>
(デフォルト)にコンパイル - クラスライブラリ(DLL)
DLLをコンパイルして使用できるようにするにはどうすればいいですかいずれかの方法 2つの別々の(紛らわしい)DLLがなくてもかまいませんか?
基本的には、コマンドライン(specify the entry target on the command line)で実行されるアプリケーションまたはによってパッケージが参照されるJavaでの機能と同様の機能を実現しようとしています。
例
例えば、Java(登録商標)の両方パッケージと静的Main(object[] args)
メソッドを含むの一部であるファイルが存在します。
public class SomeClass
{
public void DoSomething(string arg1, string arg2, string arg3)
{
// implementation...
}
public static void Main(object[] args)
{
// parse args...
new SomeClass().DoSomething(arg1, arg2, arg3);
}
}
DoSomethingは、パッケージ内の他の場所で参照されます(これは、現在のNuGetパッケージの外観と同じです)。しかし、JavaでMain(object[] args)
は余分な何かをダウンロードまたはインストールすることなく、のような...
java <package>.jar <namespace>.SomeClass [args]
コマンドラインから実行することができます。結局のところ、ユーザーがコマンドを実行したいコンポーネントがあれば、すべての依存関係もそこにあります。
理想的には、私はちょうどsimilar functionality in dotnet core ...
全部の周りに別のラッパーDLLを作成することに好ましいこと、またはすべてを選択し、選択しなければならない別のプロジェクトになるだろうdotnet <assembly>.dll <namespace>.SomeClass [args]
を使用することができますSomeClass
の依存関係のため、それらはすべて1つのアセンブリ(コンソールアプリケーション)にコンパイルされます。
さらに、パッケージあたりいくつかの静的メソッドがあります。これは.NET Coreで以前サポートされているようですが、これはother questionです。
ロジックをNuGetパッケージにカプセル化し、それをコンソールアプリケーションから消費するのはなぜですか? – mason
ユーザーにとって痛みのようです。プラットフォームごとに1つのバイナリパッケージを用意するほうが、フォルダにドロップしてCLIコマンドを実行するほうが、依存関係が完全に混乱するよりはるかに好ましいでしょう。私はその問題を解決するために(ILMerge for .NET Coreに似た)[ILLink](https://github.com/mono/linker)を調べています。 – NightOwl888
実行可能アプリケーションをNuGet経由で配布していますか?これはNuGetの目的ではありません。 – mason