如何在Core 2.0中的ConfigurationBuilder中设置基本路径.
我用Google搜索,发现这个问题,这个来自微软的文档,以及2.0文档在线,但他们似乎使用的版本Microsoft.Extension.Configuration从1.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如下图所示的设置我还需要添加 …
我想发送动态对象
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请求的最简单方法是什么?
在某些时候,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是否支持异步控制台应用程序?
我有一个从我的配置文件中读取设置的方法,如下所示:
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.
我错过了什么?
我正在使用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来实际读取查询字符串值?
我有一个最初是为 .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 是自动创建的,并且每次编译后都会重新出现。
我想在我的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.
假设我有一个类库,我想以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应用程序中使用它,第二个"修剪"形式的依赖关系是否意味着生成的应用程序会更小?
通过不清楚地记录 …
安装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.json该C:\Program Files\dotnet\sdk\文件夹中存在的任何.net框架版本的错误消息
错误MSB4019找不到导入的项目"C:\ Program Files\dotnet\sdk\XXX\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Props".确认声明中的路径是否正确,以及该文件是否存在于磁盘上.
此外,当关闭Visual Studio并再次重新打开它时,我收到原始错误消息
这可能与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-core ×10
c# ×8
asp.net-core ×5
.net ×2
.net-5 ×1
.net-6.0 ×1
app-config ×1
http ×1
logging ×1
nuget ×1
query-string ×1