在.NET Core 2.0 DLL中找不到入口点

时间:2018-08-20 17:51:54

标签: asp.net asp.net-core .net-core

我找不到任何能解释这一点的信息-由于某种原因,我的.NET Core 2.0 ASP.NET应用程序无法通过以下方式作为DLL运行:

dotnet MyProject.Web.dll

相反,我得到了异常:

未处理的异常:System.MissingMethodException:程序集'MyProject.Web,版本= 1.0.0.0,区域性=中性,PublicKeyToken =空”中找不到入口点。

namespace MyProject.Web
{
public class Program
{
    public static void Main(string[] args)
    {
        LoadDependencies();

        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    } 

    private static void LoadDependencies()
    {
        DependencyLocator.Instance.DefineIfUndefined<IDataProvider, DataProvider>();
    }
}
}

它可以作为独立的可执行文件运行(当在项目的配置中定位“控制台应用程序”时),但是现在我正尝试部署到需要通过dotnet命令运行的服务器(作为DLL,即“ dotnet。\ MyProject.Web.dll”),似乎出现了问题。我在服务器和本地开发箱上都遇到上述异常。

我有点震惊,因为它找不到Main方法-在Program.cs中声明为static。我想念什么吗?

(编辑:为澄清起见,我要针对“ dotnet”命令运行的DLL来自目标编译为“控制台库”,因为我的服务器明确要求DLL,因为它们不会运行可执行文件)。

1 个答案:

答案 0 :(得分:2)

好的,所以这很烦人,希望可以帮助其他人。

我的房东只想专门通过.NET Core运行DLL。它们不允许运行可执行文件。

由于DLL通常在项目上作为“类库”输出类型构建,因此我认为这是构建它的必要工作流程。但是,我发现,每当您将项目构建为“控制台应用程序”时,除EXE之外,它还会构建DLL。因此,在上面的示例中,当输出类型为“控制台应用程序”时,将同时构建MyProject.Web.exe和MyProject.Web.dll。

来自“控制台应用程序”的MyProject.Web.dll与来自“类库”的MyProject.Web.Dll不同。来自“类库”的一个不会,在其上可以找到一个入口点,这将导致上述问题。

因此,如果遇到此错误,请查找与您的EXE具有相同名称的DLL -这就是您要在dotnet控制台中运行的实际DLL(即dotnet MyProject.Web.dll) )