Tag: asp.net core

从Nuget包中提取的自动本机和托管DLL

这让我疯狂了几个月,我仍然无法实现它。 我的托管库是从Nuget包中提取的,但不是本地的。 我们有一堆由其他公司提供的托管和本地库。 我们有x86和x64版本。 为了在ASP.NET Core项目中使用它们,我必须创建一个Nuget包。 我的架构是: 我更改为仅针对完整.NET Framework的ASP.NET Core类库。 这个项目引用了我的Nuget包 一个ASP.NET Core网站,也是针对完整的.NET Framework并引用类库 当然,最后,我需要将我的本机库提取到网站的正确运行时文件夹中(例如: \bin\Debug\net461\win7-x64 )。 目前我的解决方案是: 将本机库放在build文件夹中 创建一个targets文件,将它们复制到$(OutputPath) (甚至不是运行时文件夹) 将一些MsBuild命令添加到我的网站的xproj ,以获取$(USERPROFILE)\.nuget\packages\文件夹中的目标文件并执行它 手动将现在在bin文件夹中提取的bin机DLL复制到runtime DLL 我试图使用project.json一些配置将它们直接复制到运行时文件夹中(老实说,我不记得我为这部分尝试过的所有事情),但这总是失败。 即使我在目标文件中指定了SkipUnchangedFiles=”true” ,也只是忽略了这一点,并且在每次构建期间我的DLL都会被复制到我的bin文件夹中。 这是一个繁重的过程,只是为了实现DLL提取,现在我真的想摆脱所有MsBuild并获得一个更简单的解决方案。 我知道Nuget的新版本,它现在能够在没有添加自定义MsBuild命令的任何帮助的情况下原生提取它们。 如此处所写,C#项目甚至不需要targets文件 接下来,可能使用NuGet包的C ++和JavaScript项目需要.targets文件来标识必要的程序集和winmd文件。 (C#和Visual Basic项目会自动执行此操作。) 我在浏览器中打开了一个标签,持续了几个月( 原始链接 ),并且最近已经从Nuget网站上删除了这个资源。 它解释了如何使用runtimes文件夹自动提取本机DLL。 然而,我从未能够得到一个成功的结果,因为它被解释。 现在这个页面已被删除并被这个页面取代,只有很少的解释,而根本没有谈论这个runtimes文件夹。 我的猜测是我应该将runtimes文件夹用于本机DLL,而将lib用于托管,但我不是百分之百确定。 (我也应该使用build文件夹吗?) 我已经尝试了几件事(我记不起尝试次数,正如我所说的几个月的头痛……)就像这样的架构 (我不明白这里有什么build/native和build/native文件夹的意义runtimes ) 我还尝试使用此处描述的.NET框架版本结构用于托管库。 这似乎也是解决方案的一部分 创建程序集引用时,编译器会忽略该体系结构。 这是一个加载时间的概念。 如果存在,加载程序将更喜欢体系结构特定的引用。 可用于生成AnyCPU程序集的一个技巧是使用corflags从x86程序集中删除体系结构。 EG:corflags / 32BITREQ- […]

ASP.NET 4.5在ASP.NET Core 2.0应用程序下的Azure Web App中作为虚拟应用程序抛出502.5

这是“ 在ASP.NET核心网络应用程序下的虚拟目录中运行MVC Web应用程序.net 4.6.1。是否可能? ”但它没有解决,OP表示他通过创建一个额外的应用程序来解决它。 所以我再次发布。 我有一个Azure Web App组织如下: “site/wwwroot/MyWeb.dll” (ASP.NET Core 2.0) “site/admin/MyAdmin.dll” (ASP.NET 4.5) 网络运行正常。 但是当我尝试访问管理站点时,我收到以下错误 HTTP错误502.5 – 进程失败 以下是“… / logFiles / eventlog.xml”的摘录,我认为它很有用 1000 1 0 Keywords 1024919046 Application RD00155D77CB9A Application ‘MACHINE/WEBROOT/APPHOST/MYAPP/ADMIN’ with physical root ‘D:\home\site\admin\’ failed to start process with commandline ‘dotnet .\MyWeb.dll’, ErrorCode = ‘0x80004005 : 80008081. 随意询问您可能需要的任何信息。 提前致谢!

在Entity Framework Core中动态更改架构

UPD就是我解决问题的方法。 虽然它可能不是最好的,但它对我有用。 我在使用EF Core时遇到问题。 我想通过模式机制在项目数据库中为不同公司分离数据。 我的问题是如何在运行时更改模式名称? 我已经找到了关于这个问题的类似问题 ,但它仍然是答案,我有一些不同的条件。 所以我有Resolve方法,在必要时授予db-context public static void Resolve(IServiceCollection services) { services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); services.AddTransient(); … } 我可以在OnModelCreating设置schema-name,但是,如前所述,这个方法只调用一次,所以我可以在这里设置模式名称globaly protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema(“public”); base.OnModelCreating(modelBuilder); } 或者通过类似的属性在模型中 [Table(“order”, Schema = “public”)] public class Order{…} 但是如何在运行时更改模式名称? 我根据每个请求创建了ef的上下文,但首先我通过请求为数据库中的某个模式共享表格查找了用户的模式名称。 那么组织该机制的真正方法是什么: 根据用户的凭据计算出模式名称; 从特定架构的数据库中获取特定于用户的数据。 谢谢。 PS我使用PostgreSql,这是表名低的原因。

模拟asp.net核心5.0的框架

我最近安装了Visual Studio 2015并启动了一个带有网站和asp类库的项目,该库将包含网站的unit testing。 我通常使用Moq进行模拟,但尝试不同的模拟框架我并不陌生。 我遇到的问题是我添加了Moq作为unit testing项目的参考并开始使用它。 在我尝试编译之前,一切似乎都很好。 当我编译时,我收到一条错误消息: ASP.NET Core 5.0 error CS0246: The type or namespace name ‘Moq’ could not be found (are you missing a using directive or an assembly reference?) 我注意到我可以在代码视图中切换ASP.NET 5.0和ASP.NET Core 5.0,当选择ASP.NET Core 5.0时,我会在选择ASP.NET 5.0时出现错误但没有。 我试着寻找答案,但我没有运气。 问题是Moq不能与vnext一起工作,我应该使用不同的框架(如果可以的话?)或者我能以某种方式解决这个问题吗? 我的project.json: { “version”: “1.0.0-*”, “dependencies”: { “Web”: “1.0.0-*”, “Xunit.KRunner”: “1.0.0-beta1”, “xunit”: “2.0.0-beta5-build2785”, […]

Asp.Net核心长期运行/后台任务

以下是在Asp.Net Core中实现长时间运行后台工作的正确模式吗? 或者我应该使用TaskCreationOptions.LongRunning选项的某种forms的Task.Run / TaskFactory.StartNew ? public void Configure(IApplicationLifetime lifetime) { lifetime.ApplicationStarted.Register(() => { // not awaiting the ‘promise task’ here var t = DoWorkAsync(lifetime.ApplicationStopping); lifetime.ApplicationStopped.Register(() => { try { // give extra time to complete before shutting down t.Wait(TimeSpan.FromSeconds(10)); } catch (Exception) { // ignore } }); }); } async Task DoWorkAsync(CancellationToken token) { […]

显示.NET Core中间接引用的包的类

我试图用ASP.NET / Entity Framework Core实现基本的UoW / Repository模式,我遇到了非常令人不安的行为。 我的解决方案共包含4个项目。 .DAL项目 ,我的实体类被定义,我的DbContext定义在哪里: public class Product { public int Id { get; set; } public string Name { get; set; } } public class ApplicationDbContext : DbContext { public DbSet Products { get; set; } } .Facade项目,我的IUnitOfWork和IProductRepository定义在: public interface IUnitOfWork { IProductRepository Products { get; } } public […]

在ASP.NET 5(vNext)MVC 6中添加自定义IRouter

我正在尝试将此示例RouteBase实现转换为与MVC 6一起使用。我已经通过遵循路由项目中的示例来解决大部分问题,但是我正在了解如何从方法返回异步Task 。 我真的不在乎它是否实际上是异步的(对能够提供该答案的任何人欢呼),现在我只想让它运转起来。 我有传出路线function(意味着当我输入路线值时, ActionLink工作正常)。 问题出在RouteAsync方法上。 public Task RouteAsync(RouteContext context) { var requestPath = context.HttpContext.Request.Path.Value; if (!string.IsNullOrEmpty(requestPath) && requestPath[0] == ‘/’) { // Trim the leading slash requestPath = requestPath.Substring(1); } // Get the page that matches. var page = GetPageList() .Where(x => x.VirtualPath.Equals(requestPath)) .FirstOrDefault(); // If we got back a null value set, […]

在Asp.Net Core中动态更改连接字符串

我想在控制器中更改sql连接字符串,而不是在ApplicationDbContext中。 我正在使用Asp.Net Core和Entity Framework Core。 例如: public class MyController : Controller { private readonly ApplicationDbContext _dbContext public MyController(ApplicationDbContext dbContext) { _dbContext = dbContext; } private void ChangeConnectionString() { // So, what should be here? } } 我怎样才能做到这一点?

内存数据库不保存数据

我有一个简单的web应用程序,在客户端有角度,在服务器端有asp.net核心web-api。 我使用InMemoryDatabase services.AddDbContext(options => options.UseInMemoryDatabase(“ItemsDB”)); 存储数据以简化开发。 但我遇到了一个问题。 我在web-api上有一个控制器来响应用户的请求: [Route(“api/[controller]”)] public class ItemsController : Controller { private readonly IApiService apiService; public ItemsController(IApiService apiService)//using DI from Startup.cs { this.apiService = apiService; } [HttpPost, Route(“addItem”)] public async Task Add([FromBody]Item item) { return await apiService.Add(item); } [HttpDelete(“{id}”)] public async Task Delete(int id) { return await apiService.Delete(id); } [HttpPut] public […]

数据模型未显示在HttpResponseMessage中

我正在尝试从.NET Core MVC应用程序进行简单的API调用: using (var client = new HttpClient()) { client.BaseAddress = new Uri(“http://localhost:49897”); var response = client.GetAsync(“some-route”).Result; var dataString = response.Content.ReadAsStringAsync().Result; // Unexpected data here. See below. […] // deserialize dataString } client.GetAsync(route)成功点击API动作方法,最终执行此操作: public HttpResponseMessage Get([FromUri] BindingModel bindingModel) { List resultObjects; […] // populate resultObjects with data return Request.CreateResponse(HttpStatusCode.OK, resultObjects, new JsonMediaTypeFormatter()); } 但是dataString最终等于: […]