C# ASP.NET核心:查找视图-在IIS Express调试中有效,但在Kestrel';出版';

C# ASP.NET核心:查找视图-在IIS Express调试中有效,但在Kestrel';出版';,c#,asp.net-mvc,asp.net-core,C#,Asp.net Mvc,Asp.net Core,我花了一个下午在谷歌上搜索,找不到任何符合我问题的东西 我正在使用ASP.NETCore1.0.0创建一个简单的网站。在VS 2015中的IIS Express中调试时,所有操作都正常。但当我发布网站时(使用内置VS2015工具或手动使用“dotnet publish”),每次尝试访问页面时,我都会收到一个“视图“xxx”未找到”错误 代码如下: 控制器: public class CalcController : Controller { public IActionResul

我花了一个下午在谷歌上搜索,找不到任何符合我问题的东西

我正在使用ASP.NETCore1.0.0创建一个简单的网站。在VS 2015中的IIS Express中调试时,所有操作都正常。但当我发布网站时(使用内置VS2015工具或手动使用“dotnet publish”),每次尝试访问页面时,我都会收到一个“视图“xxx”未找到”错误

代码如下:

控制器:

  public class CalcController : Controller
  {
    public IActionResult Index()
    {
        return View();
    }

    ... etc ....

   }
这是我的视图文件夹的屏幕截图:

这一切在2015年版的IIS Express中完全可以正常工作。但是,当我发布并尝试运行发布的代码时,我得到以下结果:

FWIW-我可以提供静态页面和js,css等没有任何问题


有什么想法吗?

在web应用程序的project.json文件中,您需要在发布选项中包含视图(和其他所需文件),如下所示,以便将其包含在发布的输出中:

"publishOptions": {
    "include": [
        "wwwroot",
        "Views",
        "Areas/**/Views",
        "sitefiles",
        "dp_keys",
        "nodb_storage",
        "appsettings.json",
        "web.config"
    ]
},
据我所知,视图不是预编译的,至少在默认情况下是这样,尽管可能有一些方法可以做到这一点

也可以像这样将视图嵌入dll:

 "buildOptions": {
    "embed": [ "Views/**", "js/**", "css/**" ]
},
这是我在有控制器的类库项目中所做的,但是您需要有启动逻辑才能让它找到那些嵌入的视图

services.AddMvc()
    .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix)
    .AddDataAnnotationsLocalization()
    .AddRazorOptions(options =>
    {  
        options.FileProviders.Add(new EmbeddedFileProvider(
            typeof(SiteManager).GetTypeInfo().Assembly,
            "cloudscribe.Core.Web"
        ));
    })
    ;

您确定视图包含在发布输出中吗?ie您在发布的输出中看到Views文件夹,并且它有正确的文件?@joe-发布的输出是一个dll(加上所有MS dll)。这就是应该发生的事?css/js文件是从dll中的某个地方正确返回的,所以我假设其余的文件在那里的某个地方?发布的输出中通常不需要包含视图,wwwroot文件夹以及js和css也是如此,我只是发布了一个带有详细信息的答案,说明嵌入js和css不足以使它们成为可请求的,我使用一个控制器来渲染嵌入的js和CSST,这就是它!你的解释很有道理。。。我在project.json中添加了“视图”,一切正常。