使用 ConfigurationBuilder 设置基本路径

对象的应用程序基路径。我正在开发的网络应用程序。我在配置构建器上总是出错。这就是我得到的错误。

DNX,Version=v4.5.1 error CS1061: 'ConfigurationBuilder' does not contain a definition for 'SetBasePath' and no extension method 'SetBasePath' accepting a first argument of type 'ConfigurationBuilder' could be found (are you missing a using directive or an assembly reference?)

我假设我的 .AddJsonFile().AddEnvironmentVariables()会得到相同的错误。我做错什么了吗?我没有向我的 project. json 添加正确的依赖项吗?我附上了我的 Startup.cs 和我的项目 t.json。

Project Json

{
"version": "1.0.0-*",
"compilationOptions": {
"emitEntryPoint": true
},
"tooling": {
"defaultNamespace": "TripPlanner"
},


"dependencies": {
"Microsoft.AspNet.StaticFiles":  "1.0.0-rc1-final",
"Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
"Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
"Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
"Microsoft.Framework.Configuration": "1.0.0-beta8",
"Microsoft.Framework.DependencyInjection": "1.0.0-beta8"
//"Microsoft.Extensions.PlatformAbstractions": "1.0.0-beta8"
},


"commands": {
"web": "Microsoft.AspNet.Server.Kestrel"
},


"frameworks": {
"dnx451": { },
"dnxcore50": { }
},


"exclude": [
"wwwroot",
"node_modules"
],
"publishExclude": [
"**.user",
"**.vspscc"
]
}

Startup.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNet.Builder;
using Microsoft.AspNet.Hosting;
using Microsoft.AspNet.Http;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.PlatformAbstractions;
using Microsoft.Framework.Configuration;
using Microsoft.Framework.DependencyInjection;
using TripPlanner.Services;






namespace TripPlanner
{
public class Startup
{
public static IConfigurationRoot Configuration;


public Startup(IApplicationEnvironment appEnv){
var builder = new ConfigurationBuilder()
.SetBasePath(appEnv.ApplicationBasePath)
.AddJsonFile("config.json")
.AddEnvironmentVariables();


Configuration = builder.Build();
}


// This method gets called by the runtime. Use this method to add services to the container.
// For more information on how to configure your application, visit http://go.microsoft.com/fwlink/?LinkID=398940
public void ConfigureServices(Microsoft.Extensions.DependencyInjection.IServiceCollection services)
{
services.AddMvc();
#if DEBUG
services.AddScoped<IMailService, DebugMailService> ();
#else
services.AddScoped<IMailService, RealMailService> ();
#endif
}


// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app)
{
//app.UseDefaultFiles();
app.UseStaticFiles();
app.UseMvc(config =>
{
config.MapRoute(
name: "Default",
template: "{controller}/{action}/{id?}",
defaults: new { controller  = "App", action = "Index"}
);
});


}


// Entry point for the application.
public static void Main(string[] args) => Microsoft.AspNet.Hosting.WebApplication.Run<Startup>(args);
}
}

错误出现在 startup.cs 顶部附近的 public startup函数中。

76563 次浏览

尝试将以下内容添加到 project.json 依赖项中:

"Microsoft.Extensions.Configuration": "1.0.0-*",
"Microsoft.Extensions.Configuration.Abstractions": "1.0.0-*",

将以下内容添加到 project.json:

"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*"

我能够解决这个问题。如果你还没有解决它,尝试以下方法 添加以下内容:

"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final"

应该会有用的

尝试将以下内容添加到 project.json 依赖项中: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

或者在 project.csproj:
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1" />

This worked for me.

不知道是否还有人遇到这个问题,但是我可以通过以下方式在一个 dotnetcore 控制台项目(netcoreapp2.0)中解决这个问题:

dotnet add package Microsoft.Extensions.Configuration.Json

如果您正在运行 .NET Core1.x.NET 标准1.x,您应该运行以下命令:

dotnet add package Microsoft.Extensions.Configuration.Json -v 1.1.1

如果您的项目在另一个文件夹中:

dotnet add .\src\MyProject package Microsoft.Extensions.Configuration.Json -v 1.1.1

... 其中 MyProject.csproj文件的名称。

尝试在 .csproj文件中添加以下内容:

<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.2.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0" />
</ItemGroup>

此外,不要忘记从“属性”窗口将“复制到输出目录”属性设置为“始终复制”Json 文件。

还有一件事要考虑:

using Microsoft.Extensions.Configuration;

如果没有这个“ using”语句,它就不会在 Microsoft.Extensions.Configuration.FileExtensions.FileExtensions.FileExtensions 中找到扩展方法。

这个问题突然出现在我面前,因为我们还:

using System.Configuration;

And there was a name clash with "ConfigurationBuilder". 添加

using Microsoft.Extensions.Configuration;

线... 删除

using System.Configuration;

然后完全限定 System.Configuration 下的任何内容。

还有一个可能的问题。

我必须补充一点:

<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0" />

为了编译:

var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
...

Edit: I wrote this answer several months ago, but I'm pretty sure it was for a console app.

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsetting.json",
Optional: true, reloadOnChange: true);
}

对于上面的代码行,您将需要以下 NuGet 软件包:

Microsoft.extensions.configurations
Microsoft.extensions.configurations.json
Microsoft.extensions.Options.configurations

这招对我很管用

  <ItemGroup>
<PackageReference Include="Microsoft.Extensions.Configuration" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.EnvironmentVariables" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="6.0.0" />
</ItemGroup>