升级到Visual Studio 2017 15.3.1和ASP.NET Core 2.0后,我的解决方案文件现在最终具有此功能:
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {...a GUID...}
EndGlobalSection
Run Code Online (Sandbox Code Playgroud)
这是什么,我需要它吗?
.net visual-studio .net-core asp.net-core visual-studio-2017
我已经将ASP.NET Core项目升级到VS2017和新的csproj,并且有这个选项:
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
什么是服务器垃圾收集?没有适当的文档,只是一个迁移指南,假设您已经知道它是什么.
(除非有正式的文件,在这种情况下,请告诉我.)
简介:遗憾的是,很多基础技术的文档中没有详细信息.然而,@ PanagiotisKanavos的链接在这里有关于"服务器gc"的重要信息.
在ASP.NET Core 2.0中,我们有这个
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
Run Code Online (Sandbox Code Playgroud)
这CreateDefaultBuilder(args)
有很多有用的默认值.但它包含这个:
.ConfigureLogging((context, logging) => {
logging.AddConfiguration(context.Configuration.GetSection("Logging"));
logging.AddConsole(); // HERE IS THE PROBLEM
logging.AddDebug(); // HERE IS THE PROBLEM
})
Run Code Online (Sandbox Code Playgroud)
因此,控制台和调试日志记录提供程序始终注册.
我曾经像这样注册他们
if (env.IsDevelopment())
{
// register them here
}
Run Code Online (Sandbox Code Playgroud)
在生产模式下运行时如何删除/取消注册?我并不是说改变日志记录级别,我的意思是我不希望它们在生产模式下完全注册.
在旧的ASP.NET中,在Global.asax.cs
类中,我会在应用程序启动时记录,停止并抛出未处理的异常:
Application_Start()
Application_End()
Application_Error()
我如何在ASP.NET Core中执行相同的操作?它有一个Startup
类,但它用于配置.
我在哪里挂钩应用程序的开始/停止/错误事件?
在之前的ASP.NET MVC中,如果用户未经过身份验证,则可以选择重定向到登录操作.
我需要与ASP.NET Core相同的东西,所以我:
[Authorize]
到一些任意行动我不希望重定向,因为我没有配置它.但是,它会自动重定向到登录操作!
这个选项在哪里/如何设置?
我正在使用内置容器ASP.NET Core和支持"行为"管道的 MediatR 3 :
public class MyRequest : IRequest<string>
{
// ...
}
public class MyRequestHandler : IRequestHandler<MyRequest, string>
{
public string Handle(MyRequest message)
{
return "Hello!";
}
}
public class MyPipeline<TRequest, TResponse> : IPipelineBehavior<TRequest, TResponse>
{
public async Task<TResponse> Handle(TRequest request, RequestHandlerDelegate<TResponse> next)
{
var response = await next();
return response;
}
}
// in `Startup.ConfigureServices()`:
services.AddTransient(typeof(IPipelineBehavior<MyRequest,str??ing>), typeof(MyPipeline<MyRequest,string>))
Run Code Online (Sandbox Code Playgroud)
我需要在管道中使用FluentValidation验证器.在MediatR 2中,创建了一个验证管道:
public class ValidationPipeline<TRequest, TResponse>
: IRequestHandler<TRequest, TResponse>
where TRequest : IRequest<TResponse>
{
public …
Run Code Online (Sandbox Code Playgroud) 所有教程都同意project.json
应包括:
"Microsoft.EntityFrameworkCore.Design":
{
"type":"build",
"version":"1.0.0-preview2-final"
}
Run Code Online (Sandbox Code Playgroud)
我从来没有把它包括在内,从来没有遇到过问题.
我只包括
"Microsoft.EntityFrameworkCore"
"Microsoft.EntityFrameworkCore.Sqlite" (or Sqlserver)
"Microsoft.EntityFrameworkCore.Tools"
Run Code Online (Sandbox Code Playgroud)
这个包有什么作用?为什么我可以毫无问题地排除它?
更新:查看已接受答案中的注释,以确定在哪种方案中导入哪个包.
ASP.NET Core ActionFilterAttribute
有这些:
public virtual void OnActionExecuting(ActionExecutingContext context);
public virtual void OnActionExecuted(ActionExecutedContext context);
public virtual Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next);
Run Code Online (Sandbox Code Playgroud)
我需要一个OnActionExecuting
不存在的异步版本.
但是我有一种感觉,我可以使用OnActionExecutionAsync
,因为它也有一个参数ActionExecutingContext
.
我是否正确,尽管名称,他们在过程中的同一点触发?
另外,我需要对next
论证做些什么?一旦我完成了我的东西,我只需要打电话await next()
吗?
是吗?我不确定,因为我找不到这方面的文档.
在VS2015中有各种各样的东西在后台运行,如"VsHub"等.它连接到MS服务器,可能泄露的东西.所以常见的方法是删除这些文件.
在VS2017中,有更多奇怪的东西在后台运行.但是我已经读过它执行更多进程外的东西,所以删除它可能是不可行的.
我跑了:
...我看到其他东西弹出我的任务管理器.
我并不关心资源/内存的使用情况,正如其他人所抱怨的那样.在我们的案例中,这是一个隐私/安全问题 - 我们不会从我们的IDE连接到任何在线服务,我们非常认真地对待隐私.我们的代码是我们的产品和生计,所以让工具与其他服务器进行通信,谁知道是什么原因,是彻头彻尾的愚蠢.我们不想用VS任何外部服务通信,永远.
你们有没有像以前一样删除这些文件?它会导致问题吗?VS中的任何东西都停止工作?
我们使用NLog或Serilog进行记录.我们正忙着将一个系统从ASP.NET移植到ASP.NET Core,后者内置了日志记录.
理想情况下,我们想放弃NLog,因为似乎不再需要它.
但是,内置日志记录是否等同于NLog?它缺少任何主要功能吗?继续使用NLog(或类似Serilog之类的东西)有什么意义吗?