我找不到任何能解释这一点的信息-由于某种原因,我的.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,因为它们不会运行可执行文件)。
答案 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) )