我有一个有点复杂的解决方案,我有两个ASP.NET Core 2.2项目和另一个项目,他们都共享。共享的项目包含四个Razor视图,我在预构建期间XCOPY到其他项目中。
所有这些都很好,但是当我发布到IIS时,这四个视图并没有被编译到视图程序集中,它们只是作为cshtml文件发布。不幸的是,这导致我有很多空白页,因为这些Razor视图恰好是表单和表格模板...
有谁知道我如何解决这个问题,并强制视图与项目视图的其余部分沿着编译?
更新1
我正在尝试构建一个Razor类库,但我似乎不知道如何正确使用它。
更新2
我放弃了RCL,它似乎不适合普通的MVC项目。
为了避免预构建复制,我将预构建命令移动到一个独立的批处理文件中。这没有帮助,视图仍然被忽略编译并作为cshtml文件发布。所有的razor文件都标记为Build Action = Content,所以我不明白为什么这四个被忽略。
更新3
我重新访问了RCL,并让它与正常的MVC应用程序一起工作。它在本地工作得很好,但是当我发布为发布到IIS时,cshtml文件仍然被复制,编译后的视图被忽略。我和RCL之前处于完全相同的位置。我可以做些什么来阻止它发布cshtml文件?
2条答案
按热度按时间6kkfgxo01#
我偶然发现了一个issue on the AspNetCore repository,结果发现这是一个工具问题。不幸的是,它在优先级列表中似乎很低,尽管它可能是一个有害的问题。
无论如何,这个问题的OP给了我一个想法,那就是删除包含已发布的cshtml文件的文件夹,然后回收apppool以重新发现已编译的视图。
因为我通过FTP发布,所以在发布过程中我不能做任何事情。所以,我做了一个PowerShell脚本来每分钟检查是否存在违规文件夹。如果找到该文件夹,则将其删除并回收应用池。
我也摆脱了RCL,回到了最初的预构建XCOPY方式。现在它可以工作,但如果工具被修复以避免这样的变通方法,那会更好(当然!)。
oknwwptz2#
我最近在引入多个具有Razor视图的项目时遇到了这个问题。托管项目的
dotnet publish
步骤失败,并出现 duplicate items found 错误,因为它多次看到_ViewImports.cshtml
。解决此问题的方法是将MSBuild属性
EnableDefaultContentItems
设置为false
,并在.csproj
文件中添加相关内容项,如下所示:这里的技巧是
CopyToPublishDirectory
属性,它将确保这些文件在发布时不会被复制。只要将
RazorCompileOnPublish
设置为true
(这是默认值),就可以正常工作。