创建使用 .NET 4.0 的应用程序池

Posted

技术标签:

【中文标题】创建使用 .NET 4.0 的应用程序池【英文标题】:Create an application pool that uses .NET 4.0 【发布时间】:2011-06-15 01:41:23 【问题描述】:

我使用以下代码创建应用程序池:

var metabasePath = string.Format(@"IIS://0/W3SVC/AppPools", serverName);
DirectoryEntry newpool;
DirectoryEntry apppools = new DirectoryEntry(metabasePath);
newpool = apppools.Children.Add(appPoolName, "IIsApplicationPool");
newpool.CommitChanges();

如何指定应用程序池应使用 .NET Framework 4.0?

【问题讨论】:

【参考方案1】:

我从标签中看到您正在使用 IIS7。除非绝对必须,否则不要使用 IIS6 兼容性组件。您的首选方法应该是使用 Microsoft.Web.Administration 托管 API。

要使用它创建应用程序池并将 .NET Framework 版本设置为 4.0,请执行以下操作:

using Microsoft.Web.Administration;
...

using(ServerManager serverManager = new ServerManager())

  ApplicationPool newPool = serverManager.ApplicationPools.Add("MyNewPool");
  newPool.ManagedRuntimeVersion = "v4.0";
  serverManager.CommitChanges();

您应该添加对Microsoft.Web.Administration.dll 的引用,该引用位于:

%SYSTEMROOT%\System32\InetSrv

【讨论】:

是的。我已经切换到 ServerManager。问题是我不知道 System.Web.Administration 的 DLL 位于何处。答案是%WinDir%\System32\InetSrv\Microsoft.Web.Administration.dll Microsoft.Web.Administration 现在也可以作为 NuGet 包添加,而不是直接引用 dll 没问题。它来自以下已删除的答案。 (而且一切都是 CC 许可的) 嗨,Kev - 我认为您尚未添加 Nuget 部分。不过,我对这个答案投了赞成票:)【参考方案2】:
newpool.Properties["ManagedRuntimeVersion"].Value = "v4.0";

将执行与 Microsoft.Web.Administration.dll 相同的操作,但使用 DirectoryEntry

还有

newPool.InvokeSet("ManagedPipelineMode", new object[]  0 );

将使用 DirectoryEntry 切换到集成或经典管道模式。

【讨论】:

【参考方案3】:

其他答案在您的特定情况下更好,但一般请记住,您可以使用 appcmd 工具执行此操作:https://technet.microsoft.com/en-us/library/cc731784%28v=ws.10%29.aspx。具体来说:

appcmd add apppool /name: string /managedRuntimeVersion: string /managedPipelineMode: Integrated | Classic

【讨论】:

以上是关于创建使用 .NET 4.0 的应用程序池的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 4.0尚未在 Web 服务器上注册 解决方法

如何使用 appcmd 创建应用程序池?

来自创建的非线程池线程的 ASP.NET 异常会发生啥?

IIS 中 ASP.net 应用程序的单独应用程序池

如何在初始池线程之外对非池线程执行 ASP.NET Core 执行?

应用程序池关闭