ASP .NET Core IIS 部署 IIS AspNetCore 模块错误:CLR 工作线程过早退出
Posted
技术标签:
【中文标题】ASP .NET Core IIS 部署 IIS AspNetCore 模块错误:CLR 工作线程过早退出【英文标题】:ASP .NET Core IIS Deploy IIS AspNetCore Module Error: CLR worker thread exited prematurely 【发布时间】:2021-07-22 13:29:30 【问题描述】:我为 IIS 提供了 Windows 中的所有功能,但如果您有任何建议,请与我分享。无论如何,我想部署在 IIS 局域网服务器上。但我不能。我工作了两天这个问题。我不知道如何解决这个问题。我使用“.net.5.0”。 我的应用程序代码是这样的
Program.cs
public class Program
public static void Main(string[] args)
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration().UseUrls("http://localhost:8080/")
.UseStartup<Startup>()
.Build();
启动
namespace EcommerceGastro.API
public class Startup
public Startup(IConfiguration configuration)
Configuration = configuration;
public IConfiguration Configuration get;
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
services.AddDbContext<GastroDB>();
services.AddScoped<IMainCategoryService, MainCategoryService>();
services.AddScoped<IProductService, ProductService>();
services.AddScoped<ICategoryService, CategoryService>();
services.AddScoped<IUploadImageService, UploadImageService>();
services.AddAutoMapper(typeof(AutoMapperProfile));
services.AddControllers();
services.AddControllers().AddNewtonsoftJson(opt =>
opt.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
);
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
if (env.IsDevelopment())
app.UseDeveloperExceptionPage();
app.UseRouting();
app.UseStaticFiles();
//Initiliazer.HomePageControl().Wait();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
endpoints.MapControllers();
);
appsettings.json
"Logging":
"LogLevel":
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
,
"AllowedHosts": "*",
"ConnectionStrings": "DefaultConnection": "server=.; database=GastroDB; user id=sa; password=123;"
我的发布设置:
我的 iis 设置:
Paylaşılmıyor = 不要分享
Yetkilendirme = 权威
我的错误:
Application '/LM/W3SVC/1/ROOT' with physical root 'C:\Users\Tuğçe\Desktop\iisDeneme\EcommerceGastro.API\bin\Release\net5.0\publish\' failed to load coreclr. Exception message:
CLR worker thread exited prematurely
Application '/LM/W3SVC/1/ROOT' with physical root 'C:\Users\Tuğçe\Desktop\iisDeneme\EcommerceGastro.API\bin\Release\net5.0\publish\' has exited from Program.Main with exit code = '0'. Please check the stderr logs for more information.
我浏览了这个 iis 网络应用程序,它打开但看起来像:
HTTP Error 500.30 - ASP.NET Core app failed to start
Common solutions to this issue:
The app failed to start
The app started but then stopped
The app started but threw an exception during startup
Troubleshooting steps:
Check the system event log for error messages
Enable logging the application process' stdout messages
Attach a debugger to the application process and inspect
For more information visit: https://go.microsoft.com/fwlink/?LinkID=2028265
【问题讨论】:
我认为问题可能在于访问数据库。这在此类错误消息中很常见。 您是否按照错误信息中的说明进行操作?它在那里说:“检查系统事件日志中的错误消息” 【参考方案1】:解决此错误的最常见和最简单的方法是重新发布您的代码,但要启用“在目标位置删除其他文件”选项。这将确保 Visual Studio 的 Web 部署过程将在复制新代码文件之前从 Web 应用程序中删除所有现有文件。这将导致发布完成后,Web App 文件系统中将仅存在所发布的必要文件。它还确保所有文件都被最新版本覆盖;以防万一也有干扰。
要启用“在目标位置删除其他文件”设置,请在 Visual Studio 中的“发布配置文件”上单击“编辑”。该设置位于“文件发布选项”可展开区域下方的“设置”选项卡上。选中该框以启用该功能,然后单击“保存”。
【讨论】:
【参考方案2】:如果您处于调试模式(Visual Studio),只需清理解决方案即可解决问题。 在生产模式(IIS)下,首先清理解决方案,发布项目,并替换为上一个。 (确保您将删除之前提到的@Samwu 中的整个以前的文件夹和设置)
【讨论】:
【参考方案3】:在我的例子中,问题在于它在 32 位应用程序池上运行,但应用程序发布为 Framework-Dependent
,目标运行时为 win-x64
。当我将它切换到win-x86
时,我的应用程序开始工作,所以我查看了它并发现了应用程序池的问题。我创建了一个新的应用程序池,禁用了 32 位,将我的应用程序切换到该池,然后重新发布,然后它就可以工作了。
编辑添加:由于不同的原因,我有第二个应用程序显示相同的行为。在第二种情况下,这是因为我使用 Serilog 将日志文件写入应用程序的根目录。但是因为应用程序池没有对该目录的写权限,所以它失败并抛出了500.30
错误。授予应用程序池对其目录的写入权限解决了该问题。
【讨论】:
【参考方案4】:就我而言,只需使用以下代码更新我的代码:
public static void Main(string[] args)
CreateHostBuilder(args).Build().Run();
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
webBuilder.UseStartup<Startup>();
);
---更新说明---
Main 方法没有函数:CreateHostBuilder(args).Build().Run(); 出于这个原因,我的 Web 应用程序发送了错误:HTTP 错误 500.30 - ASP.NET Core 应用程序无法启动。 请考虑以下参考: Asp .Net Core Main Method!
【讨论】:
您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。以上是关于ASP .NET Core IIS 部署 IIS AspNetCore 模块错误:CLR 工作线程过早退出的主要内容,如果未能解决你的问题,请参考以下文章
如何将针对 net452 项目的 ASP.NET Core 部署为 IIS 中网站的 IIS 应用程序
Windows + IIS 环境部署Asp.Net Core App