Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 部署后未找到嵌入式Razor视图(IIS)_C#_Asp.net Mvc_Iis_Embedded Resource - Fatal编程技术网

C# 部署后未找到嵌入式Razor视图(IIS)

C# 部署后未找到嵌入式Razor视图(IIS),c#,asp.net-mvc,iis,embedded-resource,C#,Asp.net Mvc,Iis,Embedded Resource,我目前正在做一个项目,它有一个插件式的系统。一旦web项目启动,它将查找插件DLL并构建GUI。DLL包含嵌入式视图和嵌入式资源,如图片或Java脚本 我使用RazorGenerator(VS插件)从视图生成cs文件,视图的构建操作设置为“嵌入式资源”,自定义工具设置为“RazorGenerator” 我使用自定义虚拟路径提供程序(与此非常类似) 我用我在网上找到的这个变通方法注册了我的虚拟路径提供程序(这是必须的,因为如果我不使用它,它就不能正常工作): 我在我的RouteConfig.c

我目前正在做一个项目,它有一个插件式的系统。一旦web项目启动,它将查找插件DLL并构建GUI。DLL包含嵌入式视图和嵌入式资源,如图片或Java脚本

  • 我使用RazorGenerator(VS插件)从视图生成cs文件,视图的构建操作设置为“嵌入式资源”,自定义工具设置为“RazorGenerator”

  • 我使用自定义虚拟路径提供程序(与此非常类似)

  • 我用我在网上找到的这个变通方法注册了我的虚拟路径提供程序(这是必须的,因为如果我不使用它,它就不能正常工作):

  • 我在我的RouteConfig.cs中使用它使嵌入的脚本和图片文件工作:

       routes.IgnoreRoute("{*staticfile}", new { staticfile = @".*\.(css|js|gif|png|jpg|exe)(/.*)?" });
    
  • 我在我的web.config中添加了以下行(还有更多行),以告知asp对我的嵌入式源使用我的路径提供程序:

      <add name="AspNetStaticFileHandler-PNG" path="*.png" verb="GET,HEAD" type="System.Web.StaticFileHandler"/>
    
在VisualStudio中,一切都正常工作。嵌入在dll中的视图和资源可以完美地显示和工作。我还使用IIS 7.5从Visual Studio运行我的web应用程序。所有的可能性都有效:

  • 如果我给出Razor Generator生成的虚拟路径(例如:“~/Views/ViewTest/Test),它就会工作
  • 如果我给出使用我的resourceprovider的Dll资源路径(例如:“DllResources/ViewTest.Dll/Views/ViewTest/Test.cshtml),它就可以工作
但是,在我部署web应用并使用IIS 7.5运行它之后,视图(仅视图!)不会显示!如果使用虚拟路径(选项1)对视图进行寻址,IIS将显示以下错误消息:

    The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
    The file '/Views/ViewTest/DllResources/EmbeddedResourceTest/Views/ViewTest/Test.cshtml' has not been pre-compiled, and cannot be requested.
如果我使用DllResources路径(选项2)对视图进行寻址,IIS将显示以下错误消息:

    The view 'Index' or its master was not found or no view engine supports the searched locations. The following locations were searched:
    The file '/Views/ViewTest/DllResources/EmbeddedResourceTest/Views/ViewTest/Test.cshtml' has not been pre-compiled, and cannot be requested.
我不知道现在该怎么做才能使它起作用。我试图用其他解决方案取代每一步。结果仍然是一样的。完美地在VS中工作,但部署后视图不会显示

它是IIS的配置吗?缺少什么?我是不是在web.config中遗漏了什么? 请帮我解决这个问题

谢谢,
诺伯特

好吧,经过一周的痛苦,我终于想出了解决办法。 问题在于web项目的发布。 以下是我所做的:

我一直在Microsoft.Net文件夹中使用aspnet_编译器发布我的web应用程序。这是由成功的Web项目生成触发的生成后事件。我删除了这个事件,并在web项目的.csproj文件中用“AfterBuild”脚本替换了它。我在电脑上找到了剧本。使用这种新的发布方法,嵌入的视图最终将显示出来

希望这对将来的人有所帮助

问候,