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