我已经为Asp.Net Identity 2.0实现了一个简单的EmailService(通过IIdentityMessageService界面.
public class EmailService : IIdentityMessageService
{
public Task SendAsync(IdentityMessage message)
{
// convert IdentityMessage to a MailMessage
var email =
new MailMessage(new MailAddress("noreply@mydomain.com", "(do not reply)"),
new MailAddress(message.Destination))
{
Subject = message.Subject,
Body = message.Body,
IsBodyHtml = true
};
using (var client = new SmtpClient()) // SmtpClient configuration comes from config file
{
return client.SendMailAsync(email);
}
}
}
Run Code Online (Sandbox Code Playgroud)
要发送电子邮件,我将通过UserManager:
await _userManager.SendEmailAsync(user.Id, "Confirm your account","Please confirm your account by clicking this link: <a href=\"" + callbackUrl …
我们正在努力为 javascript/typescript 设置团队标准的缩进样式,并且从所有迹象来看,当我们打开解决方案时,设置.editorconfig并没有覆盖 VS 底部所示的用户首选项
出于测试目的,我创建了世界上最简单.editorconfig的缩进大小值,并将其添加到解决方案的根文件夹中:
# All files
[*]
indent_style = space
indent_size = 27
Run Code Online (Sandbox Code Playgroud)
然后,在工具下 | 选项 | 文本编辑器 | JavaScript/TypeScript | 标签,我设置了不同的缩进大小值:
所以 - 如果.editorconfig真的被使用,任何重新格式化 Typescript 文件的尝试都应该导致每级缩进 27 个空格。没有骰子。
我尝试将文件移动到与我要格式化的 Typescript 文件相同的文件夹中。没有骰子。
我已经验证在工具下选择了“遵循项目编码约定” 选项 | 文本编辑器 | 一般的。我也关掉了。没有骰子。
它始终格式化为工具 | 中指定的缩进大小。选项。
有没有我遗漏的魔法酱?
我不确定它何时开始发生或如何发生(虽然它可能与VS2013 Update 4一致),但出于某种原因,每次我启动VS2013并进入"查找和替换"对话框(Ctrl-Shift-F) ,选中"查找选项"下的"匹配大小写".以前,该选项要么未经检查,要么最坏是"粘性" - 这意味着它保留了VS2013运行之前的选择.

我可以取消检查并运行搜索,只要Visual Studio的实例正在运行,它就会保持未检查状态,但是下次启动VS2013时,会再次检查它.在工具|下找不到任何明显的设置 选项.
我正在使用.NET Core 2.1 HostBuilder类来设置和运行GRPC服务器,并且无法正确配置SeriLog,以便.NET Core日志管道使用它以及在其他地方可用(通过依赖注入)我的应用.
class Program
{
private static async Task Main(string[] args)
{
var hostBuilder = new HostBuilder()
.ConfigureServices((hostContext, services) =>
{
services.AddSingleton<ILogger>(BuildLogger);
// other services here
})
.ConfigureLogging((hostContext, loggingBuilder) =>
loggingBuilder.AddSerilog(dispose: true));
await hostBuilder.RunConsoleAsync();
}
private static ILogger BuildLogger(IServiceProvider provider)
{
// create a (global) logger
Log.Logger = new LoggerConfiguration()
...
.CreateLogger();
return Log.Logger;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我需要调用才能loggingBuilder.AddSerilog()使用在ILogger上面几行中使用DI服务配置注册的单例.
我意识到我可以直接调用BuildLogger()获取ILogger实例并使用DI服务配置注册该实例,但似乎我不应该这样做.我正在寻找的是一种方法,从.ConfigureLogging()方法中访问一个ServiceProvider实例,所以我可以得到注册ILogger可能喜欢
serviceProvider.GetRequiredService<ILogger>();
Run Code Online (Sandbox Code Playgroud)
并将其传递给AddSerilog()电话.有任何想法吗?
正在构建ASP.Net Core 2.0 Web应用程序,无法确定在何处验证AutoMapper配置。
用我的ConfigureServices()方法,我有
services.AddAutoMapper();
Run Code Online (Sandbox Code Playgroud)
我正在自动映射器配置文件中注册我的映射
public class MyAutomapperProfile : Profile
{
public MyAutomapperProfile()
{
CreateMap<FooDto, FooModel>();
CreateMap<BarDto, BarModel>();
}
}
Run Code Online (Sandbox Code Playgroud)
但不清楚在哪里打电话
Mapper.Configuration.AssertConfigurationIsValid();
Run Code Online (Sandbox Code Playgroud) 当您将鼠标悬停在该项目的使用上时,ReSharper是否应该为使用该标记的项目提供弹出式智能感知文档?
如果是这样,它对我不起作用 - 至少,不是一贯的.使用ReSharper Ultimate 2018.1.3
public interface IFoo
{
/// <summary>
/// Gets or sets the value of Bar
/// </summary>
int Bar { get; set; }
}
public class FooImpl : IFoo
{
#region Implementation of IFoo
/// <inheritdoc />
public int Bar { get; set; }
#endregion
}
public class TestFooImpl
{
public void Test()
{
var foo1 = new FooImpl
{
Bar = 3
};
}
}
Run Code Online (Sandbox Code Playgroud)
当我将鼠标悬停在对FooImpl.Bar的引用上时,我没有得到任何有用的弹出式智能感知:

但是当我按ctrl + shift + F1时:
ReSharper配置为覆盖通常的VS intellisense行为:
我正在构建一个 .NET Core 3.1 应用程序,它将BackgroundService在 Docker 容器中运行。虽然我已经实现了 BackgroundService 的启动和关闭任务,并且该服务在通过 触发时肯定会关闭SIGTERM,但我发现该await host.RunAsync()调用永远不会完成 - 这意味着我的块中的剩余代码Main()不会执行。
我是否遗漏了某些内容,或者我不应该期望RunAsync()在后台服务完全停止后调用返回控制权?
(用我能想到的最简单的重现进行更新......)
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace BackgroundServiceTest
{
class Program
{
static async Task Main(string[] args)
{
Console.WriteLine("Main: starting");
try
{
using var host = CreateHostBuilder(args).Build();
Console.WriteLine("Main: Waiting for RunAsync to complete");
await host.RunAsync();
Console.WriteLine("Main: RunAsync has completed");
}
finally
{
Console.WriteLine("Main: stopping");
}
}
public static IHostBuilder CreateHostBuilder(string[] args) …Run Code Online (Sandbox Code Playgroud) 我已启用 SeriLog(最新版本)自记录功能,并且看到数百条消息说
达到最大解构深度
不知道这意味着什么以及这是否是我需要担心的问题。
有谁知道是什么触发了这条消息以及我是否做错了什么?
有没有办法,使用Azure缓存,来确定缓存中是否存在具有特定键的对象,而不实际返回对象本身?
我现在正在做类似的事情
public bool IsKeyInCache(string cacheKey)
{
DataCacheItem item = null;
CacheRetryPolicy.ExecuteAction(() =>
{
item = cache.GetCacheItem(cacheKey);
});
return item != null;
}
Run Code Online (Sandbox Code Playgroud)
但是,因为缓存中的对象非常庞大且反序列化很昂贵,所以性能非常糟糕.
我已经挖掘了MSDN文档并没有看到任何替代方案,但也许我错过了一些东西.
到目前为止,我最好的想法是添加一个小的"标记"对象与我的大对象同时缓存,并检查反序列化是否便宜的"标记"对象的存在.但这不是一个强大的解决方案,因为我的大对象完全有可能在"标记"对象保留时从缓存中清除.
我有一个在本地 Docker Linux 容器(Docker CE 18.03.1 稳定通道)中运行的 .NET Core 2.0 控制台应用程序,我正在尝试处理正常关闭。
我的应用程序具有用于AppDomain.CurrentDomain.ProcessExit和的处理程序AssemblyLoadContext.Default.Unloading:
AppDomain.CurrentDomain.ProcessExit += CurrentDomain_ProcessExit;
AssemblyLoadContext.Default.Unloading += Default_Unloading;
Run Code Online (Sandbox Code Playgroud)
处理程序在被调用时简单地写入日志消息。
我发现,当我执行 a 时docker stop <containerid>,在短暂的延迟之后,两个处理程序都没有被调用。容器只是停止运行。我尝试在 Visual Studio 中调试应用程序,并尝试在没有调试器的情况下运行。在所有情况下,都不会调用处理程序。
有没有我遗漏的其他魔法咒语?
我已经使用"允许生成异步操作"下的默认"生成基于任务的操作"选项向我的.NET 4.5应用程序添加了WCF服务引用.我从我自己的异步方法调用服务,有点像这样:
public async Task<SomeData> GetDataAsync()
{
var client = new MyServiceClient();
var result = await client.GetSomeDataAsync();
return result;
}
Run Code Online (Sandbox Code Playgroud)
将await client.GetSomeDataAsync()永远不会完成(在return语句断点从未被击中),我没有得到一个超时或任何其他错误,没有任何异常被抛出,什么都没有.Fiddler显示客户端发送了请求,服务几乎立即响应了预期的数据,所以问题就在我身边.
如果我切换到同步版本
var result = client.GetSomeData();
Run Code Online (Sandbox Code Playgroud)
该调用按预期返回.
我究竟做错了什么?
c# ×5
.net-core ×2
serilog ×2
.net ×1
async-await ×1
automapper ×1
docker ×1
editorconfig ×1
intellisense ×1
resharper ×1
smtpclient ×1
wcf ×1