Iis 找不到剃须刀主机工厂类型:umbraco.MacroEngines.razorumbraco工厂,umbraco.MacroEngines

Iis 找不到剃须刀主机工厂类型:umbraco.MacroEngines.razorumbraco工厂,umbraco.MacroEngines,iis,razor,umbraco,virtual-directory,blogengine.net,Iis,Razor,Umbraco,Virtual Directory,Blogengine.net,我正在加载一个使用IIS7和IIS6中的BlogEngine4构建的博客,在Google的帮助下,我已经完成了所有配置并缩小了问题的范围。但我最终得到了下面的错误。有人有聪明的答案吗 所有页面都加载良好,但只有当我加载.cshtml文件页面未加载时 “/blog”应用程序中出现服务器错误。 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源 Exception Details: System.InvalidOperationExceptio

我正在加载一个使用IIS7和IIS6中的BlogEngine4构建的博客,在Google的帮助下,我已经完成了所有配置并缩小了问题的范围。但我最终得到了下面的错误。有人有聪明的答案吗

所有页面都加载良好,但只有当我加载.cshtml文件页面未加载时

“/blog”应用程序中出现服务器错误。 描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源

Exception Details: System.InvalidOperationException: Could not locate Razor Host Factory type: umbraco.MacroEngines.RazorUmbracoFactory, umbraco.MacroEngines
源错误:

在执行当前web请求期间生成了未经处理的异常。有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪来识别

Stack Trace: 
[InvalidOperationException: Could not locate Razor Host Factory type: umbraco.MacroEngines.RazorUmbracoFactory, umbraco.MacroEngines]
System.Web.WebPages.Razor.WebRazorHostFactory.CreateFactory(String typeName) +178
System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) +64System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfigCore(RazorWebSectionGroup config, String virtualPath, String physicalPath) +201
System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig(String virtualPath, String physicalPath) +41
System.Web.WebPages.Razor.WebRazorHostFactory.CreateHostFromConfig(String virtualPath) +7
System.Web.WebPages.Razor.RazorBuildProvider.GetHostFromConfig() +16
System.Web.WebPages.Razor.RazorBuildProvider.CreateHost() +17
System.Web.WebPages.Razor.RazorBuildProvider.get_Host() +21
System.Web.WebPages.Razor.RazorBuildProvider.EnsureGeneratedCode() +66
System.Web.WebPages.Razor.RazorBuildProvider.get_CodeCompilerType() +39
System.Web.Compilation.BuildProvider.GetCompilerTypeFromBuildProvider(BuildProvider buildProvider) +94
System.Web.Compilation.BuildProvidersCompiler.ProcessBuildProviders() +207
System.Web.Compilation.BuildProvidersCompiler.PerformBuild() +41
System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath) +658
System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) +360
System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) +107
System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) +96
System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp) +13
System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(VirtualPath virtualPath, Type requiredBaseType, HttpContext context, Boolean allowCrossApp) +45
System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(String virtualPath, Type requiredBaseType) +23
System.Web.WebPages.BuildManagerWrapper.CreateInstanceOfType(String virtualPath) +228
System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance(IVirtualPathFactory factory, String virtualPath) +147
System.Web.WebPages.VirtualPathFactoryManager.CreateInstanceOfType(String virtualPath) +192
System.Web.WebPages.VirtualPathFactoryExtensions.CreateInstance(IVirtualPathFactory factory, String virtualPath) +74
System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath(String virtualPath, IVirtualPathFactory virtualPathFactory) +24
System.Web.WebPages.WebPageHttpHandler.CreateFromVirtualPath(String virtualPath) +20
System.Web.WebPages.WebPageRoute.DoPostResolveRequestCache(HttpContextBase context) +250
System.Web.WebPages.WebPageHttpModule.OnApplicationPostResolveRequestCache(Object sender, EventArgs e) +94
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +135
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +168


版本信息:Microsoft.NET Framework版本:4.0.30319;ASP.NET版本:4.0.30319.272

如果您试图在Umbraco站点的虚拟目录中托管blogengine站点,则必须修改blogengine web.config以“删除”所有特定于Umbraco的处理程序和模块,因为这些处理程序和模块将由blogengine应用程序继承,导致此异常的原因是应用程序在其bin文件夹中找不到相关DLL

我最近遇到了一个类似的问题,我已经发布了我在下面的虚拟目录中使用的web.config。我的是一个非常简单的web应用程序,所以很明显,在您的blogengine应用程序中,它本身无法工作。您需要将相关部分添加到web.config文件中

此外,这是针对IIS7.5中安装的v6 Umbraco,因此您可能需要进行一些试验

<?xml version="1.0"?>

<configuration>
  <configSections>
    <remove name="urlrewritingnet" />
    <remove name="umbraco.presentation.Properties.Settings" />
    <remove name="clientDependency" />
    <remove name="Examine" />
    <remove name="ExamineLuceneIndexSets" />
    <remove name="FileSystemProviders"  />
    <remove name="log4net" />
    <remove name="BaseRestExtensions" />
    <remove name="system.web.webPages.razor" />
  </configSections>

  <appSettings>
    <clear/>
  </appSettings>

  <system.web>
    <httpModules>
      <remove name="UrlRewriteModule" />
      <remove name="UmbracoModule" />
      <remove name="ClientDependencyModule" />
    </httpModules>
    <httpHandlers>
      <remove verb="*" path="umbraco/channels.aspx" />
      <remove verb="*" path="umbraco/channels/word.aspx" />
      <remove verb="*" path="DependencyHandler.axd" />
      <remove verb="GET,HEAD,POST" path="GoogleSpellChecker.ashx" />
    </httpHandlers>    
    <compilation defaultLanguage="c#" debug="false" batch="false" targetFramework="4.0">
      <buildProviders>
        <remove extension=".cshtml" />
        <remove extension=".vbhtml" />
        <remove extension=".razor" />
      </buildProviders>
    </compilation>
    <membership>
      <providers>
        <remove name="UmbracoMembershipProvider" />
        <remove name="UsersMembershipProvider" />
      </providers>
    </membership>
    <!-- added by NH to support membership providers in access layer -->
    <roleManager enabled="false">
      <providers>
        <remove name="UmbracoRoleProvider" />
      </providers>
    </roleManager>
    <!-- Sitemap provider-->
    <siteMap defaultProvider="UmbracoSiteMapProvider" enabled="false">
      <providers>
        <remove name="UmbracoSiteMapProvider" />
      </providers>
    </siteMap>

  </system.web>

  <system.webServer>
    <modules>
      <remove name="UrlRewriteModule" />
      <remove name="UmbracoModule" />
      <remove name="ClientDependencyModule" />
    </modules>
    <handlers accessPolicy="Read, Write, Script, Execute">
      <remove name="Channels" />
      <remove name="Channels_Word" />
      <remove name="ClientDependency" />
      <remove name="SpellChecker" />
    </handlers>
  </system.webServer>

</configuration>

这是因为Umbraco实现了自己的主机工厂和页面库。

如果您试图在Umbraco站点的虚拟目录中托管blogengine站点,则必须修改blogengine web.config以“删除”所有特定于Umbraco的处理程序和模块,因为这些处理程序和模块将由blogengine应用程序继承,导致此异常的原因是应用程序在其bin文件夹中找不到相关DLL

我最近遇到了一个类似的问题,我已经发布了我在下面的虚拟目录中使用的web.config。我的是一个非常简单的web应用程序,所以很明显,在您的blogengine应用程序中,它本身无法工作。您需要将相关部分添加到web.config文件中

此外,这是针对IIS7.5中安装的v6 Umbraco,因此您可能需要进行一些试验

<?xml version="1.0"?>

<configuration>
  <configSections>
    <remove name="urlrewritingnet" />
    <remove name="umbraco.presentation.Properties.Settings" />
    <remove name="clientDependency" />
    <remove name="Examine" />
    <remove name="ExamineLuceneIndexSets" />
    <remove name="FileSystemProviders"  />
    <remove name="log4net" />
    <remove name="BaseRestExtensions" />
    <remove name="system.web.webPages.razor" />
  </configSections>

  <appSettings>
    <clear/>
  </appSettings>

  <system.web>
    <httpModules>
      <remove name="UrlRewriteModule" />
      <remove name="UmbracoModule" />
      <remove name="ClientDependencyModule" />
    </httpModules>
    <httpHandlers>
      <remove verb="*" path="umbraco/channels.aspx" />
      <remove verb="*" path="umbraco/channels/word.aspx" />
      <remove verb="*" path="DependencyHandler.axd" />
      <remove verb="GET,HEAD,POST" path="GoogleSpellChecker.ashx" />
    </httpHandlers>    
    <compilation defaultLanguage="c#" debug="false" batch="false" targetFramework="4.0">
      <buildProviders>
        <remove extension=".cshtml" />
        <remove extension=".vbhtml" />
        <remove extension=".razor" />
      </buildProviders>
    </compilation>
    <membership>
      <providers>
        <remove name="UmbracoMembershipProvider" />
        <remove name="UsersMembershipProvider" />
      </providers>
    </membership>
    <!-- added by NH to support membership providers in access layer -->
    <roleManager enabled="false">
      <providers>
        <remove name="UmbracoRoleProvider" />
      </providers>
    </roleManager>
    <!-- Sitemap provider-->
    <siteMap defaultProvider="UmbracoSiteMapProvider" enabled="false">
      <providers>
        <remove name="UmbracoSiteMapProvider" />
      </providers>
    </siteMap>

  </system.web>

  <system.webServer>
    <modules>
      <remove name="UrlRewriteModule" />
      <remove name="UmbracoModule" />
      <remove name="ClientDependencyModule" />
    </modules>
    <handlers accessPolicy="Read, Write, Script, Execute">
      <remove name="Channels" />
      <remove name="Channels_Word" />
      <remove name="ClientDependency" />
      <remove name="SpellChecker" />
    </handlers>
  </system.webServer>

</configuration>

这是因为Umbraco实现了自己的主机工厂和页面库。

我认为您忽略了问题的最重要部分,即您正在Umbraco应用程序的虚拟目录中托管blogengine应用程序。这是正确的吗?我认为您忽略了问题中最重要的部分,即您正在Umbraco应用程序的虚拟目录中托管blogengine应用程序。您好,迪格比斯维夫特,谢谢您的回复,我很高兴至少有一个人能理解我的疑问。我想向您详细解释一下我们的配置和设置。我们已经在IIS 7中的应用程序池的集成pieline模式下设置了umbraco 6.0.6应用程序,在umbraco应用程序下,我们创建了使用BlogEngine在应用程序池的经典模式下构建的博客。当我在子域中运行博客时。cshtml页面加载正常,但当我在umbraco应用程序下作为virtualdir运行时。cshtml页面抛出相同的上述错误。很高兴提供帮助!是的,这是意料之中的,因为blogengine将继承Umbraco应用程序的配置。为了覆盖它,首先将虚拟目录转换为IIS中的应用程序。这将允许您在自己的应用程序池中运行blogengine。然后,如果您仍然收到错误(并且您会收到),请确保blogengine web.config删除了相关设置,正如我在上面的回答中所说的。谢谢,伙计,是的,我转换到了应用程序池,但仍然面临相同的错误。有什么方法可以让我和你分享我的web.config来看看吗?嗨,Hudson,你是否将web.config更改合并到了你的blogengine web.config中?是的,我合并了你上面提到的web.config更改,但仍然面临以下错误,当我浏览blogengine的仪表板时,它呈现.cshtml页面无法找到Razor主机工厂类型:umbraco.MacroEngines.RazorUmbracoFactory,umbraco.MacroEngines,我相信blogengine web.config中仍然缺少一些次要配置。请帮助我的朋友。嗨,迪格比斯维夫特,谢谢你的回复,我很高兴至少有一个人能理解我的疑问。我想向您详细解释一下我们的配置和设置。我们已经在IIS 7中的应用程序池的集成pieline模式下设置了umbraco 6.0.6应用程序,在umbraco应用程序下,我们创建了使用BlogEngine在应用程序池的经典模式下构建的博客。当我在子域中运行博客时。cshtml页面加载正常,但当我在umbraco应用程序下作为virtualdir运行时。cshtml页面抛出相同的上述错误。很高兴提供帮助!是的,这是意料之中的,因为blogengine将继承Umbraco应用程序的配置。为了覆盖它,首先将虚拟目录转换为IIS中的应用程序。这将允许您在自己的应用程序池中运行blogengine。然后,如果您仍然收到错误(并且您会收到),请确保blogengine web.config删除了相关设置,正如我在上面的回答中所说的。谢谢,伙计,是的,我转换到了应用程序池,但仍然面临相同的错误。有什么方法可以让我和你分享我的web.config看看吗?嗨,Hudson,你把web.config的更改合并到你的blogengine web.config中了吗?是的,我合并了你上面提到的web.config更改,但仍然面临着下面的问题
<host factoryType="System.Web.WebPages.Razor.WebRazorHostFactory,
    System.Web.WebPages.Razor" />
<pages pageBaseType="System.Web.WebPages.WebPage">