我在Visual Studio 2015中使用名为MvcIntegrationTestFramework的项目尝试对我的ASP.NET MVC项目运行单元测试时出现此错误。我已经搜索了大多数解决方案建议切换到使用IIS Express。但我已经在使用IIS Express了。我也可以设置IIS,但我不愿意,因为多个开发人员必须在他们的环境中做同样的事情。
其他人建议直接修改Response.Headers集合可能会导致此错误,但我没有看到项目中的任何代码可能会这样做。
还有什么你能想到的我可能会忽视这可能导致这个错误吗?
这是完整的错误和堆栈跟踪......
[PlatformNotSupportedException:此操作需要集成IIS 管道模式。] System.Web.HttpResponse.get_Headers()+ 242 Microsoft.Owin.Host.SystemWeb.OwinCallContext.CreateEnvironment()+532 Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.GetInitialEnvironment(HttpApplication的 申请)+372
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContext.PrepareInitialContext(HttpApplication的 申请)+19
Microsoft.Owin.Host.SystemWeb.IntegratedPipeline.IntegratedPipelineContextStage.BeginEvent(对象 sender,EventArgs e,AsyncCallback cb,Object extradata)+354
System.Web.AsyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +673 System.Web.HttpApplication.ExecuteStep(IExecutionStep step,Boolean& completedSynchronously)+146
答案 0 :(得分:0)
我目前正在调查自己。到目前为止,我已经了解到:
IntegratedPipelineMode仅在通过IIS运行HttpApplication时可用
MvcIntegrationTestFramework启动HttpApplication,但不使用IIS,因此无法使用IntegratedPipelineMode
检查HttpRuntime的参考源: https://referencesource.microsoft.com/#system.web/HttpRuntime.cs
这段代码表明UseIntegratedPipeline仅在某种IIS上下文中运行时才设置为true。它还表明_iisVersion仅在这种情况下被填充。
internal static void PopulateIISVersionInformation() {
if (IsEngineLoaded) {
uint dwVersion;
bool fIsIntegratedMode;
UnsafeIISMethods.MgdGetIISVersionInformation(out dwVersion, out fIsIntegratedMode);
if (dwVersion != 0) {
// High word is the major version; low word is the minor version (this is MAKELONG format)
_iisVersion = new Version((int)(dwVersion >> 16), (int)(dwVersion & 0xffff));
_useIntegratedPipeline = fIsIntegratedMode;
}
}
}
我调试了MvcIntegrationTestFramework的BrowsingSession类。 ProcessRequest方法将引发异常。在该方法中,可以查看HttpRuntime的属性:
_iisVersion为null的事实似乎证明了这一点。
我假设“应编辑” MvcIntegrationTestFramework以在IIS中运行HttpApplication。但是该框架的重点是模拟应用程序,因此这样做可能会破坏目的。