标签: .net-core

如何在Core 2.0中的ConfigurationBuilder中设置SetBasePath

如何在Core 2.0中的ConfigurationBuilder中设置基本路径.

我用Google搜索,发现这个问题,这个来自微软的文档,以及2.0文档在线,但他们似乎使用的版本Microsoft.Extension.Configuration1.0.0-beta8.

我想读appsettings.json.在Core 2.0中有没有新的方法?

using System;
using System.IO;
using Microsoft.Extensions.Configuration;
namespace ConsoleApp2
{
    class Program
    {
        public static IConfigurationRoot Configuration { get; set; }

        static void Main(string[] args)
        {
            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory()) // <== compile failing here
                .AddJsonFile("appsettings.json");

            Configuration = builder.Build();

            Console.WriteLine(Configuration.GetConnectionString("con"));
            Console.WriteLine("Press a key...");
            Console.ReadKey();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

appsetting.json

{
  "ConnectionStrings": {
    "con": "connection string"
  }
}
Run Code Online (Sandbox Code Playgroud)

更新: 除了添加Microsoft.Extensions.Configuration.FileExtensions如下图所示的设置我还需要添加 …

c# configuration .net-core asp.net-core

111
推荐指数
3
解决办法
5万
查看次数

使用HttpClient PostAsJsonAsync在ASP.NET Core中发送HTTP POST消息

我想发送动态对象

new { x = 1, y = 2 };
Run Code Online (Sandbox Code Playgroud)

作为HTTP POST消息的主体.所以我试着写

var client = new HttpClient();
Run Code Online (Sandbox Code Playgroud)

但我找不到方法

client.PostAsJsonAsync()
Run Code Online (Sandbox Code Playgroud)

所以我尝试将Microsoft.AspNetCore.Http.Extensions包添加到project.json并添加

using Microsoft.AspNetCore.Http.Extensions; 
Run Code Online (Sandbox Code Playgroud)

使用条款.但它没有帮助我.

那么在ASP.NET Core中使用JSON主体发送POST请求的最简单方法是什么?

c# .net-core asp.net-core

110
推荐指数
5
解决办法
12万
查看次数

.NET Core是否支持异步控制台应用程序?

在某些时候,CoreCLR支持异步主入口点.见http://blog.stephencleary.com/2015/03/async-console-apps-on-net-coreclr.html

但是,以下程序在.NET Core RTM中都不起作用

using System;
using System.Threading.Tasks;

namespace ConsoleApplication
{
    public class Program
    {
        public static async Task Main(string[] args)
        {
            await Task.Delay(1000);
            Console.WriteLine("Hello World!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

要么

using System;
using System.Threading.Tasks;

namespace ConsoleApplication
{
    public class Program
    {
        public async Task Main(string[] args)
        {
            await Task.Delay(1000);
            Console.WriteLine("Hello World!");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这两个都失败了,错误:

错误CS5001:程序不包含适用于入口点的静态"主"方法

.NET Core RTM是否支持异步控制台应用程序?

.net c# .net-core

107
推荐指数
3
解决办法
3万
查看次数

ConfigurationManager.AppSettings是否在.NET Core 2.0中可用?

我有一个从我的配置文件中读取设置的方法,如下所示:

var value = ConfigurationManager.AppSettings[key];
Run Code Online (Sandbox Code Playgroud)

只针对.NET Standard 2.0时,它编译得很好.

现在我需要多个目标,所以我用以下内容更新了我的项目文件:

<TargetFrameworks>netcoreapp2.0;net461;netstandard2.0</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)

但现在,编译失败netcoreapp2.0,出现以下错误消息:

Error   CS0103  The name 'ConfigurationManager' does not exist in the current context   (netcoreapp2.0)
Run Code Online (Sandbox Code Playgroud)

另外,我创建了一个新的.NET Core 2.0控制台应用程序(这次仅针对.NET Core 2.0),但同样ConfigurationManager在命名空间下似乎没有System.Configuration.

我很困惑,因为它可以在.NET Standard 2.0下使用,所以我希望它可以在.NET Core 2.0中使用,因为.NET Core 2.0符合.NET Standard 2.0.

我错过了什么?

c# app-config .net-core .net-standard

104
推荐指数
4
解决办法
6万
查看次数

如何使用ASP.NET Core从查询字符串中读取值?

我正在使用ASP.NET Core MVC构建一个RESTful API,我想使用查询字符串参数来指定返回集合的资源上的过滤和分页.

在这种情况下,我需要读取查询字符串中传递的值来过滤并选择要返回的结果.

我已经发现控制器Get操作内部访问HttpContext.Request.Query返回一个IQueryCollection.

问题是我不知道如何使用它来检索值.事实上,我认为要做的方法是使用,例如

string page = HttpContext.Request.Query["page"]
Run Code Online (Sandbox Code Playgroud)

问题是HttpContext.Request.Query["page"]不返回字符串,而是返回StringValues.

无论如何,如何使用它IQueryCollection来实际读取查询字符串值?

c# http query-string .net-core asp.net-core

102
推荐指数
9
解决办法
14万
查看次数

错误 CS8773:从 net6.0 降级到 net5.0 后,“功能‘全局使用指令’在 C# 9.0 中不可用”

我有一个最初是为 .NET 6 创建的项目,但后来我需要将其降级到 .NET 5。我在项目属性中更改了目标框架并尝试编译。结果我收到了一堆错误:

GlobalUsings.g.cs(2,1,2,29): error CS8773: Feature 'global using directive' is not available in C# 9.0. Please use language version 10.0 or greater.
Run Code Online (Sandbox Code Playgroud)

文件 GlobalUsings.g.cs 是自动创建的,并且每次编译后都会重新出现。

c# visual-studio .net-core .net-5 .net-6.0

100
推荐指数
4
解决办法
5万
查看次数

在ASP.Net Core Web API中返回文件

问题

我想在我的ASP.Net Web API Controller中返回一个文件,但我的所有方法都返回HttpResponseMessage为JSON.

代码到目前为止

public async Task<HttpResponseMessage> DownloadAsync(string id)
{
    var response = new HttpResponseMessage(HttpStatusCode.OK);
    response.Content = new StreamContent({{__insert_stream_here__}});
    response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    return response;
}
Run Code Online (Sandbox Code Playgroud)

当我在浏览器中调用此端点时,Web API会返回设置HttpResponseMessage为HTTP Content Header 的as JSON application/json.

c# .net-core asp.net-core asp.net-core-webapi

98
推荐指数
4
解决办法
9万
查看次数

根据元数据包,netstandard库的应用含义是什么?

假设我有一个类库,我想以netstandard1.3为目标,但也使用BigInteger.这是一个简单的例子 - 唯一的源文件是Adder.cs:

using System;
using System.Numerics;

namespace Calculator
{
    public class Adder
    {
        public static BigInteger Add(int x, int y)
            => new BigInteger(x) + new BigInteger(y);            
    }
}
Run Code Online (Sandbox Code Playgroud)

回到这个世界project.json,我将netstandard1.3在该frameworks部分中进行定位,并且明确依赖于System.Runtime.Numerics版本4.0.1.我创建的nuget包将列出该依赖项.

在基于csproj的dotnet工具的勇敢新世界中(我使用的是命令行工具的v1.0.1),有一个隐含的元数据包引用,用于NETStandard.Library 1.6.1何时进行定位netstandard1.3.这意味着我的项目文件非常小,因为它不需要显式依赖项:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.3</TargetFramework>
  </PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)

...但是生成的nuget包依赖于NETStandard.Library,这表明为了使用我的小型库,你需要那里的一切.

事实证明我可以使用禁用该功能DisableImplicitFrameworkReferences,然后再次手动添加依赖项:

<Project Sdk="Microsoft.NET.Sdk">    
  <PropertyGroup>
    <TargetFramework>netstandard1.3</TargetFramework>
    <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Runtime.Numerics" Version="4.0.1" />
  </ItemGroup>    
</Project>
Run Code Online (Sandbox Code Playgroud)

现在,我的NuGet软件包确切地说明了它所依赖的内容.直观地说,这感觉就像一个"更精简"的包装.

那么我图书馆消费者的确切区别是什么?如果有人试图在UWP应用程序中使用它,第二个"修剪"形式的依赖关系是否意味着生成的应用程序会更小?

通过不清楚地记录 …

nuget .net-core .net-standard

97
推荐指数
3
解决办法
6440
查看次数

Visual Studio 2017安装打破了Visual Studio 2015 ASP.NET核心项目

安装Visual Studio 2017 Professional后,我无法再在Visual Studio 2015 Professional中构建我的ASP.NET Core.我从未在VS2017中打开过这个项目

我明白了

尝试运行项目模型服务器进程(1.0.0-preview3-004056)时发生以下错误.

无法启动该过程.找不到匹配命令dotnet-projectmodel-server的可执行文件

在此输入图像描述

然后我在Visual Studio 2015中创建了一个全新的ASP.NET Core项目,并在加载项目时得到完全相同的消息.

另外,当我想要构建项目时,我得到了

MSB1009:项目文件不存在.

在此输入图像描述

ASP.NET 5项目不会出现同样的问题,因此它仅限于ASP.NET Core


Visual Studio 2017年3月7日更新

如果在下面的答案中添加了一个global.json,则会获得global.jsonC:\Program Files\dotnet\sdk\文件夹中存在的任何.net框架版本的错误消息

错误MSB4019找不到导入的项目"C:\ Program Files\dotnet\sdk\XXX\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Props".确认声明中的路径是否正确,以及该文件是否存在于磁盘上.

此外,当关闭Visual Studio并再次重新打开它时,我收到原始错误消息

.net-core asp.net-core visual-studio-2017

94
推荐指数
4
解决办法
2万
查看次数

我应该把ILogger,ILogger <T>,ILoggerFactory或ILoggerProvider用于库吗?

这可能与Passog ILogger或ILoggerFactory与AspNet Core中的构造函数有些关联但是,这特别是关于库设计,而不是关于使用这些库的实际应用程序如何实现其日志记录.

我写一个.NET 2.0标准库将通过的NuGet安装,并允许使用图书馆的人得到一些调试信息,我根据Microsoft.Extensions.Logging.Abstractions允许标准化的记录器被注入.

但是,我看到了多个接口,Web上的示例代码有时会使用ILoggerFactory并在类的ctor中创建一个记录器.还有ILoggerProvider看起来像Factory的只读版本,但实现可能会也可能不会实现两个接口,所以我必须选择.(工厂似乎比提供商更常见).

我见过的一些代码使用了非泛型ILogger接口,甚至可能共享同一个记录器的一个实例,有些代码接受ILogger<T>他们的ctor并期望DI容器支持开放泛型类型或显式注册ILogger<T>我的库中的每个变体使用.

现在,我确实认为这ILogger<T>是正确的方法,也许是一个不接受该论证而只是通过Null Logger的ctor.这样,如果不需要记录,则不使用任何记录.然而,一些DI容器选择了最大的ctor,因此无论如何都会失败.

我很好奇我应该在这里做什么来为用户创造最少的头痛,同时如果需要仍然允许适当的日志记录支持.

.net c# logging .net-core .net-standard

93
推荐指数
8
解决办法
2万
查看次数