是否可以将同一个 DLL 放入控制台应用程序和 NuGet 依赖项中?

2024-04-21

我有一个面向 .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是关于。


对于 .Net Standard/Core,您最好的选择是拥有第二个项目,该项目可以编译为 EXE,该 EXE 具有指向库版本的简单 Main() 方法。这并不理想,但问题是 .Net core 的运行时如何工作。面向 .Net Standard 的项目可以由与该标准版本兼容的所有项目使用。针对特定 .NetCoreApp 的项目只能由其他 .NetCoreApp 引用,因此您无法获得针对该标准的好处。

对于打包/NuGet 部署,可以将控制台应用程序版本放入 NuGet 的工具文件夹中,以便最终用户可以使用它。您确实不希望通过标准 NuGet 内容文件夹部署可执行文件,因为它不会真正遵循标准并且会让您的 NuGet 用户感到困惑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以将同一个 DLL 放入控制台应用程序和 NuGet 依赖项中? 的相关文章

  • 查找c中结构元素的偏移量

    struct a struct b int i float j x struct c int k float l y z 谁能解释一下如何找到偏移量int k这样我们就可以找到地址int i Use offsetof 找到从开始处的偏移量z
  • Asp.NET WebApi 中类似文件名称的路由

    是否可以在 ASP NET Web API 路由配置中添加一条路由 以允许处理看起来有点像文件名的 URL 我尝试添加以下条目WebApiConfig Register 但这不起作用 使用 URIapi foo 0de7ebfa 3a55
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 显示UnityWebRequest的进度

    我正在尝试使用下载 assetbundle统一网络请求 https docs unity3d com ScriptReference Networking UnityWebRequest GetAssetBundle html并显示进度 根
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 如何设计以 char* 指针作为类成员变量的类?

    首先我想介绍一下我的情况 我写了一些类 将 char 指针作为私有类成员 而且这个项目有 GUI 所以当单击按钮时 某些函数可能会执行多次 这些类是设计的单班在项目中 但是其中的某些函数可以执行多次 然后我发现我的项目存在内存泄漏 所以我想
  • IEnumerable 与 IReadOnlyList

    选择有什么区别IEnumerable
  • 如何在整个 ASP .NET MVC 应用程序中需要授权

    我创建的应用程序中 除了启用登录的操作之外的每个操作都应该超出未登录用户的限制 我应该添加 Authorize 每个班级标题前的注释 像这儿 namespace WebApplication2 Controllers Authorize p
  • 如何序列化/反序列化自定义数据集

    我有一个 winforms 应用程序 它使用强类型的自定义数据集来保存数据进行处理 它由数据库中的数据填充 我有一个用户控件 它接受任何自定义数据集并在数据网格中显示内容 这用于测试和调试 为了使控件可重用 我将自定义数据集视为普通的 Sy
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • 什么时候虚拟继承是一个好的设计? [复制]

    这个问题在这里已经有答案了 EDIT3 请务必在回答之前清楚地了解我要问的内容 有 EDIT2 和很多评论 有 或曾经 有很多答案清楚地表明了对问题的误解 我知道这也是我的错 对此感到抱歉 嗨 我查看了有关虚拟继承的问题 class B p
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • Visual Studio 2010 中的数据库设计器

    我需要创建一个全新的 Sql Server 2008 数据库 并希望使用 Visual Studio 2010 Ultimate 中的数据库项目 我已经创建了该项目并在下面添加了一个表格dbo架构 桌子 sql仅以纯文本形式显示 但带有颜色
  • 向现有 TCP 和 UDP 代码添加 SSL 支持?

    这是我的问题 现在我有一个 Linux 服务器应用程序 使用 C gcc 编写 它与 Windows C 客户端应用程序 Visual Studio 9 Qt 4 5 进行通信 是什么very在不完全破坏现有协议的情况下向双方添加 SSL
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • C# 模拟VolumeMute按下

    我得到以下代码来模拟音量静音按键 DllImport coredll dll SetLastError true static extern void keybd event byte bVk byte bScan int dwFlags
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 哪种 C 数据类型可以表示 40 位二进制数?

    我需要表示一个40位的二进制数 应该使用哪种 C 数据类型来处理这个问题 如果您使用的是 C99 或 C11 兼容编译器 则使用int least64 t以获得最大的兼容性 或者 如果您想要无符号类型 uint least64 t 这些都定
  • C++ 标准是否指定了编译器的 STL 实现细节?

    在写答案时this https stackoverflow com questions 30909296 can you put a pimpl class inside a vector我遇到了一个有趣的情况 这个问题演示了这样一种情况

随机推荐