c# - 带有 .NET CLI 的类库

标签 c# .net .net-core

在过去的几天里,我一直在试用新的 .NET CLI,虽然构建控制台和 Web 应用程序相当简单,但如何构建类库却一点都不明显。

我执行了以下操作:像往常一样,在命令行上我使用 dotnet new 创建了一个 project.json 文件。然后我在这个项目中编写了一个简单的类,仅此而已。

然后我使用 .NET CLI 创建了一个控制台应用程序,其中包含第一个作为对 project.json 的依赖项,并使用我在类库上构建的类来显示消息屏幕。

当我尝试运行控制台应用程序时,找到了另一个项目并且 .NET CLI 尝试构建它。类库的构建失败并显示消息:

Program does not contain a static 'Main' method suitable for an entry point.

在那种情况下,它将项目视为控制台应用程序并试图找到一个主要入口点。

我相信这是因为当我使用 dotnet new 命令创建类库时,它生成了 project.json,如下所示:

{
    "version": "1.0.0-*",
    "compilationOptions": {
    "emitEntryPoint": true
},
    "dependencies": {
        "Microsoft.NETCore.App": {
            "type": "platform",
            "version": "1.0.0-*"
        }
    },
    "frameworks": {
        "netcoreapp1.0": {}
    }    
}

我认为这可能有两个原因:其中一个是运行时是 Microsoft.NETCore.App,其次是 TFM。

我尝试将 TFM 更改为 netstandard1.5 但它没有用,给出了同样的错误。在那种情况下,我认为问题在于运行时。不知何故,我相信依赖 Microsoft.NETCore.App 意味着我们正在构建一个控制台应用程序而不是一个库,然后需要一个入口点。

那么使用.NET Core CLI 构建类库的正确方法是什么?运行时真的是问题吗?如果是,我们如何处理?

最佳答案

这里的两个问题是 "emitEntryPoint": true 和您的 dependencies 部分。

类库没有入口点(static void Main() 方法)所以 emitEntryPoint 应该设置为 false。

至于依赖项,您可以专门针对所需的依赖项

"dependencies" : {
   "System.Console": "4.0.0-*"
}

或 NETStandard.Library NuGet 包

"dependencies" : {
   "NETStandard.Library": "1.5.0-*"
}

NETStandard.Library 包在 NuGet 中尚不可用,因此在正式发布之前您需要以 MyGet 为目标。将以下内容放入项目文件夹中的 NuGet.config 文件中

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <clear />
    <add key="AspNetCI" value="https://www.myget.org/F/aspnetcirelease/api/v3/index.json" />
    <add key="NuGet.org" value="https://api.nuget.org/v3/index.json" />
  </packageSources>
</configuration>

关于c# - 带有 .NET CLI 的类库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36672586/

相关文章:

c# - 解释 SSH 输出

c# - Action <T> 用作参数

c# - 使用 System.Text.Json.Serialization 将动态对象转换为 json 时抛出异常

c# - 为什么 .net 核心不支持 TransportWithMessageCredential?

c# - 在表单之间切换(关闭一个表单,然后打开另一个表单)

c# - 通过等待每个任务异步转换 IEnumerable<Task<T>>

c# - 处理字节数组中的非 UTF-8 字符

.NET 4.0 任务 : Rethrow Exception to UI Thread in Task. 继续

c# - Azure Web App - 如何使用 Fluent API 更新 MinTlsVersion

c# - 处理具有多个子控件的用户控件的双击事件