我有一个面向 .NET Standard 1.5 的项目,该项目在 NuGet 上部署为多个 DLL。该项目是从 Java 移植的。项目内部的一些类是静态的Main()
应该从命令行运行的方法。
在.NET Core中似乎有编译DLL的2种方法 https://learn.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj#emitEntrypoint:
-
<OutputType>Exe</OutputType>
- 编译成可执行控制台应用程序(DLL)
-
<OutputType>Library</OutputType>
(默认)- 编译成类库 (DLL)
我想知道有没有办法编译DLL以便可以使用它无论哪种方式没有 2 个独立的(令人困惑的)DLL?
基本上,我试图获得与 Java 中类似的功能,其中应用程序可以引用包or在命令行上运行(并在命令行中指定进入目标 https://stackoverflow.com/q/44829928/181087).
Example
例如,在 Java 中,有些文件都是包的一部分and包含静态Main(object[] args)
method.
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]
无需下载或安装任何额外的东西。毕竟,如果用户想要运行命令的组件在那里,那么所有依赖项也在那里。
理想情况下,我可以使用dotnet core 中的类似功能 https://stackoverflow.com/a/39155842/181087...
dotnet <assembly>.dll <namespace>.SomeClass [args]
这比必须围绕整个事情创建一个单独的包装器 DLL 更好,或者创建一个必须选择所有依赖项的单独项目SomeClass
所以它们都被编译成一个程序集(控制台应用程序)。
此外,还有一些静态的Main()
每个包的方法,这似乎已经在 .NET Core 早期支持,这就是我的其他问题 https://stackoverflow.com/q/44829928/181087是关于。