【发布时间】:2021-07-19 12:31:32
【问题描述】:
在 Asp.Net 中,许多事情会随着版本的变化而变化,具体取决于 .Net 版本。我有一个 .Net5 项目,但无法在构建文件夹中添加 Views 文件夹。 我尝试在我的 csproj 文件中添加下一行:
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<PreserveCompilationContext>true</PreserveCompilationContext>
<RazorCompileOnBuild>false</RazorCompileOnBuild>
</PropertyGroup>
结果是我在调试、发布或发布文件夹中仍然没有 Views 文件夹。如果我尝试在调试模式下运行,我会收到缺少视图的错误:
InvalidOperationException: The view 'Index' was not found. The following locations were searched:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml
这是我的 ConfigureServices 方法:
public void ConfigureServices(IServiceCollection services)
{
services.AddHttpContextAccessor();
services.AddAuthentication(IdentityConstants.ApplicationScheme)
.AddCookie(IdentityConstants.ApplicationScheme, o =>
{
o.Cookie.Path = "/";
});
services.AddControllersWithViews(o => o.Filters.Add(new AuthorizeFilter()));
}
将CopyRazorGenerateFilesToPublishDirectory 添加到 csproj 不会改变任何事情。
<CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
stackoverflow 上有一些解决方案,但都是关于旧版本的,如 .net 框架和 .net core 2 或 3。它们都不适合我。
- 只是为了澄清。我可以让它编译所有项目,但我需要编辑我的剃须刀页面,而无需重新编译我的应用程序。这就是我希望我的视图被复制的原因。
编辑:添加对 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 包的引用并在服务配置中设置 Razor RuntimeCompilation ...
services.AddControllersWithViews()
.AddRazorRuntimeCompilation();
...您可以在从 VS 运行应用程序时编辑视图,而无需重新编译(未选中)。然后,如果我在我的 csproj 中添加CopyRazorGenerateFilesToPublishDirectory,我的发布文件夹中有可编辑的视图。问题是当我修改任何视图时都会出现异常:System.InvalidOperationException: Cannot find reference assembly 'Microsoft.AspNetCore.Antiforgery.dll' file for package Microsoft.AspNetCore.Antiforgery.Reference。不知道怎么解决。
【问题讨论】:
-
您是否尝试过创建新的 Core 5 应用程序?您将在 bin\Debug\net5.0 下拥有一个 WebApplication.Views.dll(假设您的应用名为 WebApplication)
-
也许我没有解释清楚,但我希望在我的发布文件夹中有剃须刀页面,而不是包含视图代码的 dll。
-
你为什么要那个?用例是什么?
-
此时,只是因为前端设计将由不太了解csharp的设计师编写,不需要知道如何编译或发布。但是有很多情况需要这个选项。我喜欢在运行时编辑一些代码的可能性,就像你可以在 php 脚本中那样。
-
我们是在讨论修改生产代码运行时,还是在开发期间?对于后者,我们有
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
标签: c# asp.net-core asp.net-core-mvc .net-5