我正在尝试使用.net core sdk 2.2附带的新功能,据称这可以将性能提高大约400%。
令人印象深刻,所以我在我的ABP项目上试了一下
Template asp.net core mvc 4.0.2.0
我在web.mv.cproj
文件中添加了以下内容
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.App" />
<PackageReference Include="Microsoft.AspNetCore.Razor.Design" Version="2.2.0" PrivateAssets="All" />
</ItemGroup>
不幸的是,我不认为这个版本的ABP框架是兼容的,因为项目根本无法运行和抛出:(最终)
HTTP错误500.30 - ANCM进程内启动失败
我在web.config中设置stdoutLogEnabled="true"
并重新尝试后检查了日志 - 但没有条目。
有没有人在流程设置中对asp.net核心运行当前的ABP有什么成功?
我想这可能是ABP vNext中唯一可用的东西。
尝试更改csproj中的部分
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
以下......
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
<AspNetCoreModuleName>AspNetCoreModule</AspNetCoreModuleName>
</PropertyGroup>
https://github.com/dotnet/core/blob/master/release-notes/2.2/2.2-known-issues.md
删除.vs文件夹,然后使用进程内托管模型重试。
ASP.NET Core 2.2或更高版本:对于使用进程内托管模型的64位(x64)自包含部署,请禁用32位(x86)进程的应用程序池。
在IIS管理器>应用程序池的“操作”侧栏中,选择“设置应用程序池默认值”或“高级设置”。找到启用32位应用程序并将值设置为False。
删除.cproj文件中的AspNetCoreHostingModel行对我有用。我的另一个项目没有这样的线路工作正常。
<PropertyGroup>
<TargetFramework>netcoreapp2.2</TargetFramework>
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
</PropertyGroup>
在我的情况下,我最近在appstettings.json文件中更改了数据库连接字符串。没有记录或错误捕获我怀疑这个错误结束导致“HTTP错误500.30 - ANCM进程中启动失败”错误。
我碰巧注意到x-freestyler和Tahir Khalid之间的交流,Tahir在启动时提出了IOC问题。由于我的创业公司最近没有改变,但我的appstettings.json已经 - 我确定我的appstettings.json中的连接字符串是导致问题的原因。我纠正了错误的连接字符串,问题解决了。感谢整个社区。
此发布配置文件设置为我修复:
配置发布配置文件 - >设置 - >站点扩展选项 - >
我的是因为program.cs中的UseKestrel()应该是2.2中的.ConfigureKestrel()
花了一整天的时间与我自己决定在IIS上使用InProcess托管来托管我的asp.net核心应用程序后,我终于为解决这个问题感到自豪和松了一口气。几个小时的反复通过相同的论坛,博客和SO问题尽力解决问题,我仍然坚持遵循所有上述方法。现在,我将描述我解决它的经验。
第1步:在IIS中创建一个网站
步骤2:确保网站的AppPool在AppPool中将.Net CLR版本设置为“无管理代码”和“启用32位应用程序”属性 - >高级设置设置为false
第3步:确保您的项目引用.Net core 2.2
步骤4:在ConfigureServices方法内的startup.cs文件中添加以下行
services.Configure<IISServerOptions>(options =>
{
options.AutomaticAuthentication = false;
});
第6步:添加以下Nuget包
Microsoft.AspNetCore.App v2.2.5或更高版本
Microsoft.AspNetCore.Server.IIS v2.2.2或更高版本
第7步:在.csproj文件中添加以下行
<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>
第8步:构建并发布您的代码(最好是x64位)
步骤9:确保在etc / hosts文件中添加了您的网站主机名
步骤10:重新启动World Wide Web Publishing服务
现在测试你的asp.net核心应用程序,它应该使用InProcess托管托管为了验证你的应用程序是否使用InProcess模式托管,检查响应头,它应该包含以下行
服务器:Microsoft-IIS / 10.0(IIS版本可以是任何,具体取决于您的系统)
我发现另一个问题开始提供与问题中相同的错误消息。我在这里分享这个,这样在更改项目文件之前,您可以确保您的服务已正确注册。
我也运行.netcore 2.2并且收到相同的错误消息,所以我将项目文件从InProcess更改为OutOfProcess,如所选答案中所示。之后,当我收到“无法实例化实现类型”时,我找到了问题的真正原因:这个原因对我来说是:
services.AddScoped<IMyService, IMyService>();
代替
services.AddScoped<IMyService, MyService>();
相关文章:Why am I getting the error "Cannot instantiate implementation type" for my generic service?