某些 Razor 视图未发布
Posted
技术标签:
【中文标题】某些 Razor 视图未发布【英文标题】:Certain Razor views not publishing 【发布时间】:2017-07-25 15:45:02 【问题描述】:将 VS 2017 与 MVC 5 Razor 视图结合使用。当我发布我的应用程序时,少数特定视图不会被复制。
我在 2010-2011 年的时间范围内发现了几个关于同一问题的 SE 问题。当时,问题是文件属性中的构建操作没有设置为内容,因为一些早期 RC 中的错误已得到解决。好吧,我所有的人都已经做天了 Build Action 的内容。
为什么只有少数观点没有在发布中出现?
【问题讨论】:
你是如何发布你的网站的? @DavidG 文件系统通过 VS 发布功能 项目中包含的视图是否正常运行? 如果您选择视图,然后在属性视图中构建操作,它会说什么?它应该说内容;有时可以切换。 @DavidG 很好地检查它们是否包含在内。不过,这是一个多么奇怪的问题,因为它们被包含,但项目文件的包含为None Include
而不是Content Include
。所以我排除了视图文件夹并重新包含它们,现在问题已经解决。我敢打赌,这与我使用自己编写的实用程序自动生成视图并从 Windows 资源管理器单击/拖动它们到解决方案中这一事实有关。
【参考方案1】:
据我所知,只有两件事会导致这种情况发生。
-
正如您在问题中所说,每个视图的构建操作都需要设置为“内容”
视图文件需要包含在项目文件中,所以在.csproj
文件中应该有这样一行:
<Content Include="Views\ControllerName\Index.cshtml" />
【讨论】:
每个人都应该阅读我在我的 OP 下的评论,了解我认为这是如何发生的。 @oscilatingcretin - 是的!你 100% 知道这是怎么发生的。如果您将 Visual Studio 外部 的文件添加到解决方案文件夹(例如通过 Windows 资源管理器拖放),VS 将 不 发布该文件,因为它不属于解决方案。您必须进入 VS 解决方案资源管理器并单击“显示所有文件”选项。导航到您的文件应该在的位置。如果文件显示为灰色,请右键单击,选择“包含在项目中”。 @Tommy 不过,我认为它不应该那样工作。将 .cshtml 文件拖到项目中时,它被包含,这意味着您不必右键单击灰色图标并选择包含在项目中。发生的情况是它被添加到项目中,并带有一个阻止它发布的 XML 标记。解决方法是排除它然后重新包含它,这是一种欺骗 VS 认为它是直接通过项目添加的黑客行为。我一直将 .cs 文件单击/拖动到解决方案中,它们与程序集的其余部分一起编译,但 VS 对 Razor 视图的处理略有不同。 现在不用担心,新的 .Net Core csproj 格式不包含这些文件,因此它们将始终包含在构建过程中。 @oscilatingcretin - 正确。如果您将它拖入或围绕 VS 解决方案资源管理器,按照您所说的进行应该很好,VS 将了解该文件的所有信息并将其包含在内。我指的是将文件拖到您的解决方案所在的 Windows 资源管理器中。到那时,VS 将不知道它应该成为解决方案的一部分(至少在 .Net 核心之前)。【参考方案2】:另一种方法是在您的 csproje 文件中进行设置。这是我的缺失,导致它在我的发布中生成precompiledviews.dll
:
<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
将其显式设置为 false
以发布 .cshtml 文件。
【讨论】:
谢谢,这对我有用。我在属性组标签下添加了标签,我可以在构建输出中看到 .cshtml 文件。【参考方案3】:Visual Studio -> 在解决方案资源管理器中右键单击“视图”。单击“发布视图”。这会将所有视图设置为“内容”
【讨论】:
【参考方案4】:根据 Visual Studio 的版本,排除然后包含部分视图或其文件夹可能会起作用,也可能不起作用。最确定的方法是将其从.csproj
文件中删除,然后再次包含它。
假设_LoginPartial
在发布后没有更新(特别是如果您有一些剃须刀代码)。
首先打开“.csproj”文件,然后删除
<Content Include="Views\Shared\_LoginPartial.cshtml" />
构建项目,然后再次将其添加到.csproj
,然后重新构建并发布。
【讨论】:
【参考方案5】:Visual Studio 的另一个解决方案
-
右键单击文件并“从项目中排除”。
选择项目并点击解决方案探索中的“显示所有文件”(解决方案探索顶部的水平菜单栏)
右键单击排除的文件,然后单击“包含在项目中”。
这将自动修改 .csproj 文件。
【讨论】:
以上是关于某些 Razor 视图未发布的主要内容,如果未能解决你的问题,请参考以下文章
.net core razor 页面中的多个视图组件未正确绑定
在 Visual Studio 2019 中使用的 Razor 视图未更新
在 Razor 视图中使用 DataTables 插件 - 无法设置未定义的属性(设置“_DT_CellIndex”)错误