在IIS上托管.NET 7应用程序:未能加载文件或程序集“pay2.0”错误

brccelvz  于 2023-03-18  发布在  .NET
关注(0)|答案(1)|浏览(156)

我是新的IIS配置。我试图主机我的.NET 7 API的IIS上,但我有一个错误,我无法解决。
当我尝试使用IIS运行我的应用程序时,我收到此错误:“HTTP错误500.30 - ASP.NET核心应用程序无法启动”。
事件查看器显示:

System.IO.FileNotFoundException: Could not load file or assembly 'w3wp, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.
File name: 'w3wp, Culture=neutral, PublicKeyToken=null'
   at System.Reflection.RuntimeAssembly.InternalLoad(AssemblyName assemblyName, StackCrawlMark& stackMark, AssemblyLoadContext assemblyLoadContext, RuntimeAssembly requestingAssembly, Boolean throwOnFileNotFound)
   at System.Reflection.Assembly.Load(AssemblyName assemblyRef)
   at Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.GetApplicationPartAssemblies(String entryAssemblyName)
   at Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartManager.PopulateDefaultParts(String entryAssemblyName)
   at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.GetApplicationPartManager(IServiceCollection services, IWebHostEnvironment environment)
   at Microsoft.Extensions.DependencyInjection.MvcCoreServiceCollectionExtensions.AddMvcCore(IServiceCollection services)
   at Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddControllersCore(IServiceCollection services)
   at Microsoft.Extensions.DependencyInjection.MvcServiceCollectionExtensions.AddControllers(IServiceCollection services)

程序-〉第57行-〉“构建器.服务.添加控制器();“抛出异常。当我启动应用程序时,我看到w3wp.exe正在运行。但我仍然得到错误。
目前为止我所做的:
1.在我的Windows Server 2019上安装了IIS。
1.已安装.Net 7托管捆绑包。

  • 我使用此设置发布我的应用:
  • 配置:放行
  • 目标框架:网络7.0
  • 部署模式:依赖于框架
  • 目标运行时间:便携式
  • 已将文件复制到此位置:C:\inetpub\wwwroot\api.mycompany.com
  • 使用“无托管代码”和“集成”管道模式创建我的应用程序池。
  • 创建站点并运行它。
  • 我的web.config文件:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <location path="." inheritInChildApplications="false">
        <system.webServer>
            <handlers>
                <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2"
                    resourceType="Unspecified" />
            </handlers>
            <aspNetCore processPath="dotnet" arguments=".\WebApi.dll" stdoutLogEnabled="false"
                stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
        </system.webServer>
    </location>
</configuration>

使用此设置,我的应用程序给予我上面提到的错误。然而,当我双击我的exe并在IIS之外运行它时,我的应用程序运行完美,我可以运行所有的get-post请求而没有错误。
我试图解决的问题:
1.将.NET CLR版本更改为v4.0失败。
1.将“启用32位应用程序”设置为“真”、“失败”
1.将托管管道模式更改为经典,失败。
1.发布我的应用win-x86和win-x64自包含,失败。

  • 基于其他答案
  • 将标识更改为本地服务失败。
  • 将标识更改为NetworkService失败。
  • 将身份更改为自定义帐户并以管理员用户身份登录失败。
  • 将“加载用户配置文件”设置设置为True失败。
  • 授予IIS_IUSRS和网络服务对目录 “C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files”的完全访问权限, 失败。
  • 授予IIS_IUSRS网络服务对项目目录的完全访问权限失败。
  • 移除项目目录上的.pdb文件失败。
  • 以管理员身份启动Visual Studio并再次发布我的应用程序,失败。

不管我怎么试都没用,我做错了什么?

tnkciper

tnkciper1#

我找到了解决方案。就像@Lex Li说的,我的程序中有不正确的代码。cs:

var options = new WebApplicationOptions
{
    ApplicationName = Process.GetCurrentProcess().ProcessName,
    ContentRootPath = AppContext.BaseDirectory,
    Args = args
};
var builder = WebApplication.CreateBuilder(args);

看起来像“Process.GetCurrentProcess()”方法转到w3 wp。我更改为原始版本:

var builder = WebApplication.CreateBuilder(args);

之后,我的应用程序在IIS上完美运行。

相关问题