在 .NET Core 2.0 DLL 中找不到入口點
我找不到任何解釋這一點的東西——由於某種原因,我的 .NET Core 2.0 ASP.NET 應用程序不能通過以下方式作為 DLL 執行:
dotnet MyProject.Web.dll
相反,我得到了例外:
未處理的異常:System.MissingMethodException:在程序集“MyProject.Web,版本=1.0.0.0,文化=中性,PublicKeyToken=null”中找不到入口點。
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 中。我錯過了什麼嗎?
(編輯:澄清一下,我試圖針對“dotnet”命令執行的 DLL 來自編譯為“控制台庫”的目標,因為我的伺服器明確要求 DLL,因為它們不會執行執行檔)。
好的,所以這很煩人,希望能幫助其他人。
我的主機只想通過 .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)