gpt4 book ai didi

asp.net-core - 将 .Net Core 作为 DLL 部署到 IIS - 无法使用命令行 '"dotnet"site.dll' 启动进程

转载 作者:行者123 更新时间:2023-12-03 17:59:44 25 4
gpt4 key购买 nike

我有一个针对 net461 框架的 .Net Core Web 应用程序。它最初生成一个 .EXE 并且在部署到 IIS 时工作正常。我想更改为可移植应用程序,因此我在 ProjectJson 中更改了“buildOptions”,如下所示:

"buildOptions": {
"emitEntryPoint": false,
"preserveCompilationContext": true,
"debugType": "portable"
},

现在,当我编译时,我得到一个 DLL,它在 IIS Express 中运行良好,但是当我发布到 IIS 并将 web.config aspnetcore 元素更改为:

  <aspNetCore processPath="dotnet" arguments=".\myWebApp.dll" 
stdoutLogEnabled="false"
stdoutLogFile=".\logs\stdout"
forwardWindowsAuthToken="false" />

项目无法运行,我在应用程序事件日志中看到“无法使用命令行‘“dotnet”MyWebApp.dll’启动进程,ErrorCode =‘0x80004005’”。

尝试使用“dotnet mywebapp.dll”从命令行运行会导致:

A fatal error was encountered. The library 'hostpolicy.dll' required to   
execute the application was not found in 'C:\inetpub\wwwroot\ETimeCore2'.

于是我找到并复制了hostpolicy.dll到该目录下,现在得到:

Could not resolve CoreCLR path. For more details, enable tracing by setting 
CORE HOST_TRACE environment variable to 1

我确实将 CORE HOST_TRACE 设置为 1,并得到了所有正在加载的 dll 的详细响应,最后只有一个错误(如上),因此它没有增加任何值(value)。

知道我做错了什么吗?我更喜欢 DLL 而不是 EXE,因为要在 .EXE 时发布更改,您必须先回收应用程序池,这真的很痛苦。

最佳答案

如果禁用“emitEntryPoint”,则不能使用 dotnet mywebapp.dll

emitEntryPoint 指示项目是控制台应用程序还是库。来自 sources :

if (framework.IsDesktop() && compilerOptions.EmitEntryPoint.GetValueOrDefault())
{
OutputExtension = FileNameSuffixes.DotNet.Exe;
}

在您的情况下,framework.IsDesktop() 为真,因为您的目标框架是 net461,即 .NET Framework,而不是 .NET Core。如果启用 emitEntryPoint,这就是您将 .exe 作为输出的方式。


实际上错误 “执行应用程序所需的库 'hostpolicy.dll' 未在”中找到 现在意味着以下内容(参见 http://github.com/dotnet/cli/issues/2859 问题):

dotnet.exe cannot find the entry point in mywebapp.dll

关于asp.net-core - 将 .Net Core 作为 DLL 部署到 IIS - 无法使用命令行 '"dotnet"site.dll' 启动进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39026622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com