如何运行 .Net Core 的 dll?

39

我已经使用Mac上的dnu build命令构建了我的控制台应用程序。输出结果是MyApp.dll

由于它不是MyApp.exe,我该如何在Windows甚至Mac上执行它呢?

代码如下:

using System;

class Program
{
    public static void Main()
    {
        Console.WriteLine("Hello from Mac");        
    }
}

图书馆不可执行,因为它们没有入口点放在其中,对吗? - SolaGratia
@BjarneStroustrup 这是一个控制台应用程序。我为了清晰起见放置了代码。 - mehrandvd
2
https://dev59.com/3F0a5IYBdhLWcg3waH7j#30377175 - Hans Passant
@HansPassant 我明白你的意思,但是关于“甚至在Mac上”的部分怎么办呢?我该如何在Mac上运行已构建的版本?有了代码,我可以使用 dnx run 运行它。 - mehrandvd
2个回答

43

将此内容添加到您的 project.json 文件中:

 "compilationOptions": {
        "emitEntryPoint": true
 },

在Windows操作系统中生成MyApp.exe(位于bin/Debug目录下),在其他平台上则会生成可执行文件。

编辑:2017年1月30日

这已经不够了。您现在有了两种选择,即基于框架的部署和自包含式部署,如此处所述。

简写如下:

基于框架的部署(目标系统上存在.net core)

  • 使用dotnet命令行实用程序运行dll:dotnet MyApp.dll

自包含式部署(将所有组件(包括.net core运行时)包含在应用程序中)

  • 从project.json中删除"type": "platform"
  • 向project.json添加runtimes部分
  • 使用目标操作系统构建:dotnet build -r win7-x64
  • 运行生成的MyApp.exe

project.json文件:

{
    "version": "1.0.0-*",
    "buildOptions": {
        "emitEntryPoint": true
    }, 
    "frameworks": {
        "netcoreapp1.0": {
            "dependencies": {
                "Microsoft.NETCore.App": {
                    "version": "1.0.1"
                }
            }
        }
    },
    "imports": "dnxcore50",
    "runtimes": { "win7-x64": {} }
}

新项目似乎并不总是有 projects.json 文件,如果没有该文件,您可以使用发布选项来生成独立的可执行文件,并根据平台进行操作。具体请参见这里:https://dev59.com/KVcP5IYBdhLWcg3worj_ - stuzor
顺便提一下,只有目标操作系统是Windows时才会构建exe文件。对于其他操作系统(例如Linux),将生成可执行的DLL文件。它仍然可以工作,但具有不同的文件扩展名。如果DLL文件不可执行,则可能需要使用“chmod u+x MyApp.dll”来更正权限。 - JohnLBevan

7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接