Tag: .net core

AWS中托管的.NET Core 2 Web应用程序中的计划作业

我们正在.NET Core 2中开始一个新项目,我将需要一些方法来运行一个可以完成一些工作的预定作业。 此应用程序将托管在Linux服务器或AWS linux实例中。 我使用Azure WebJobs和.NET 4.6完成了这项工作。 如何使用.Net Core和Linux完成这项工作

使用.NET Core中的字符串(配置文件)进行ServiceCollection配置

有没有办法在.net核心的标准Microsoft.Extensions.DependencyInjection.ServiceCollection库中配置dependency injection,而实际上没有对相关实现类的引用? (从配置文件中获取实现类名?) 例如: services.AddTransient(“The.Actual.Thing”);// Where The.Actual.Thing is a concrete class

字典计数大于89478457时出错

我正在接受这个命令 Dictionary myIntDict = new Dictionary(89478458); 这个错误: System.OutOfMemoryException was unhandled HResult=-2147024882 Message=Array dimensions exceeded supported range. Source=mscorlib StackTrace: at System.Collections.Generic.Dictionary`2.Initialize(Int32 capacity) at System.Collections.Generic.Dictionary`2..ctor(Int32 capacity, IEqualityComparer`1 comparer) 在89478457上没有错误。 这是Dictionary.cs中Initialize的源代码: private void Initialize(int capacity) { int size = HashHelpers.GetPrime(capacity); … entries = new Entry[size]; … } 当我重现它时,错误发生在数组创建上。 在这种情况下,Entry是一个结构,大小为24.当我们得到max int32(0x80000000-1)并除以24 = 89478485时,这个数字在素数89478457和89478503之间。 这是否意味着,结构数组不能像maxInt32 / sizeOfThisStruct那样大? 编辑: 是。 我实际上超过2 […]

C#dependency injection运行时(动态)注册

我正在使用VS 2017和.NET Core。 使用dependency injection,我想在运行时动态注册我的服务。 我的目标是编写我的服务实例,在不同的程序集中实现服务接口。 然后将servicename /程序集名称添加到某种配置文件(或db表)中。 我的注册码会做这样的事情: var ServiceTypeName = LoadServiceAssembly(AssemblyName); var serviceProvider = new ServiceCollection() .AddTransient() // <— Goal .BuildServiceProvider(); var logger = serviceProvider.GetService(IDILogger); 显然,AddTransient行不起作用,因为这样的方法不存在。 然而,它确实描绘了这个想法。 我想通过字符串名称注册类型,以便每次添加新服务类型时都不需要重新编译加载器应用程序。 我似乎无法找到如何做到这一点。 欢迎大家提出意见。 TIA

正文的签名和方法实现中的声明不匹配

我想在运行时实现一个接口,但是当我执行时 return Activator.CreateInstance(typeBuilder.CreateTypeInfo().AsType(), new RPCRequestProxy()); 在它抛出的RPCClientFactory.cs中 System.TypeLoadException: Signature of the body and declaration in a method implementation do not match 。 我使用dotnet core 1.0.4。 入口点Program.cs : namespace RPC { interface IRCPClient { Task Foo([UrlParam]int b, [UrlParam]string a, [UrlParam] DateTime c); } class Program { static void Main(string[] args) { var factory = new RPCClientFactory(); factory.Register(); […]

添加迁移失败,因为未安装EntityFrameworkCore.Tools

我想通过以下教程创建一个使用EF Core的控制台应用程序: http : //ef.readthedocs.io/en/latest/platforms/full-dotnet/new-db.html 。 我的问题是,我无法执行该声明 Add-Migration 如教程中所述。 它告诉我: PM> Add-Migration MyFirstMigration Cannot execute this command because ‘Microsoft.EntityFrameworkCore.Tools’ is not installed in project ‘src\AppEf’. Add ‘Microsoft.EntityFrameworkCore.Tools’ to the ‘tools’ section in project.json. See http://go.microsoft.com/fwlink/?LinkId=798221 for more details. 所有添加的组件: 怎么了? 更新 声明dotnet restore工作, dotnet-ef –help根本不起作用。 你可以看到,该语句是在项目文件夹中执行的。

Razor类库中的图像

是否可以使用图像和其他文件类型,如css / js / etc. 在Razor类库中? 我在尝试将Razor类库中的图像和css显示在.Net Core 2.1 MVC应用程序中时遇到了问题。 我们以前使用文件提供程序和C#类库,但我觉得Razor类库现在应该能够通过在项目中添加对库的引用来实现这一目的。

.NET Core Console应用程序中的重复任务

简短的版本是 – 我如何(在2017年发布.NET Core 1.1)在Microsoft Core dependency injection的 .NET Core 控制台应用程序中运行重复任务? 长篇故事和代码片段。 目标 我有4个(并且将有更多)服务,每个服务都有一个执行某个独立任务并与数据库交互的方法。 具体来说,我有一个服务从数据库中删除旧数据,一个服务“缓存”数据(在数据库中运行数据并将聚合结果存储在其他表中),一个生成随机数据等等…这个想法是以不同的间隔运行这些任务,例如每20秒或每天运行一次。 当前的脏实现 我有一个服务,每个任务有一个while(true)循环,用DI生成服务,运行任务, Thread.Sleep(interval) ,检查退出条件(类范围标志)和continue/break 。 大多数方法都是async 。 目前的问题 首先,我知道while(true)和Thread.Sleep(interval)是一个巨大的黑客(技术债务)。 其次,我有内存泄漏,我觉得我产生/处置服务的方式与它有关。 最后,代码遇到随机错误,吞下所有exception。 我无法以任何已知方式捕获它们。 我想要的解决方案 我想实现目标,但如果可能的话 避免使用像Hangfire和Quartz这样的大型框架。 我觉得我不需要他们所能做到的一小部分。 保持应用程序控制台应用 虽然这是ASP项目的“帮手”,但我希望它是一个控制台应用程序,并且能够像dotnet daemons.dll一样运行它,它会无限期地完成它的工作,直到我Ctrl+C它。 它也不应该在内存和CPU /线程消耗中增长。 只要它是一个稳定的数字,它就可以吃掉相当数量的RAM。 使用Microsoft DI。 这就是我所有服务的构建方式。 保持我的服务async 。 我可以在不同的场景中重用它们,包括unit testing。 代码片段 我如何运行重复任务的示例: private async Task RunCacheServiceAsync() { // Make sure the […]

避免在同一个DbContext上同时运行多个任务的entity framework错误

我在一个运行带有Sqlite的Entity Framework Core的Dotnet Core项目中有一个WebApi控制器。 动作中的此代码会出现错误: var t1 = _dbContext.Awesome.FirstOrDefaultAsync(a => […]); var t2 = _dbContext.Bazinga.FirstOrDefaultAsync(b => […]); var r1 = await t1; var r2 = await t2; 错误是: Microsoft.EntityFrameworkCore.Query.RelationalQueryCompilationContextFactory:错误:迭代查询结果时数据库中发生exception。 System.ObjectDisposedException:已关闭安全句柄 Microsoft.EntityFrameworkCore.Query.RelationalQueryCompilationContextFactory:错误:迭代查询结果时数据库中发生exception。 System.InvalidOperationException:只能在连接打开时调用ExecuteReader。 对我来说这两个错误都表明DbContext会发生一些事情,比如过早处置(虽然不是DbContext本身)。 DbContext是在控制器构造函数中使用Dotnet Core的管道“通常的方式”注入的,配置如下所示(来自我的Startup.cs ConfigureServices方法体): services.AddDbContext(options => options.UseSqlite(connectionString)); 如果我将上面的错误产生代码改为: var r1 = await _dbContext.Awesome.FirstOrDefaultAsync(a => […]); var r2 = await _dbContext.Bazinga.FirstOrDefaultAsync(b => […]); …我没有看到提到的错误,因此得出的结论是在我的DbContext的同一个实例上同时运行多个任务(如上所述注入)是导致问题的原因。 […]

entity framework核心忽略.Include(..)而没有.ToList(..)间接

如EF Core Documentation中的“加载相关数据”中所述,我们可以使用.Include(..)来急剧地从DbSet加载导航属性(或通用IQueryable链接回EF上下文)。 这意味着,给定以下模型: public class TestEntityA { public int Id { get; set; } public int TestEntityBId { get; set; } public TestEntityB TestEntityB { get; set; } public string BProperty { get { return TestEntityB.Property; } } } public class TestEntityB { public int Id { get; set; } public string Property { […]