我正在尝试为我的 asp.net core 服务构建一个安装程序,但在 IIS 应用程序池上设置
.NET CLR Version
时遇到问题。有什么办法可以设置为No Managed Code
吗?
设置
<iis:WebAppPool ManagedRuntimeVersion="No Managed Code">
会导致错误The worker process failed to pre-load .Net Runtime version No Managed Code.
解决方案是在设置 ManagedRuntimeVersion 时使用“”而不是“无托管代码”。
iis:WebAppPool/@ManagedRuntimeVersion 属性的值不能为空字符串。
使用以下示例方法创建无托管代码的应用程序池
public void CreateApplicationPoolDotNetCore(string appPoolName)
{
using (ServerManager serverManager = new ServerManager())
{
ApplicationPool newPool = serverManager.ApplicationPools.Add(appPoolName);
newPool.ManagedRuntimeVersion = "";
newPool.Enable32BitAppOnWin64 = true;
newPool.ManagedPipelineMode = ManagedPipelineMode.Integrated;
serverManager.CommitChanges();
}
}
我无法使用“”,因为wix(5.0)正在抱怨,最糟糕的是,如果您使用ManagedRuntimeVersion =“无托管代码”,它看起来就像在应用程序池中工作,但当您打开下拉菜单时,会出现第二个“否”托管代码”,这是真正的代码。
我们通过使用自定义操作解决了这个问题,例如:
<CustomAction Id="ReconfigureAppPoolCLI"
Directory="<your dir>"
Execute="deferred"
Impersonate="yes"
Return="check"
ExeCommand="powershell.exe -WindowStyle Hidden -NoProfile -NonInteractive -Command "Start-Transcript -Path (Join-Path $env:TEMP 'iis_configure_apppool_log.txt'); Import-Module WebAdministration; try { Set-ItemProperty IIS:'\AppPools\<inset app pool name here>' -name managedRuntimeVersion -value ''; Write-Host 'Successfully set managedRuntimeVersion' } catch { Write-Error $_.Exception.Message }; Stop-Transcript"" />
只需替换
After="RegisterUser"
(然后 iis 设置应该完成)。脚本本身的日志将出现在 %TEMP%/iis_configure_apppool_log.txt 中