Setting Base Path using ConfigurationBuilder

C#asp.netJsonasp.net Mvc

C# Problem Overview


I'm trying to set the application base path for a .Net web app I'm building. I keep getting errors on Configuration builder. This is the error I get.

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?)

I'm assuming I'll get the same error for my .AddJsonFile() and .AddEnvironmentVariables(). Did I do something wrong? Did I not add the right dependency to my project.json? I've enclosed my startup.cs and my project.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);
  }
}

The error is in the public startup function right near the top of startup.cs.

C# Solutions


Solution 1 - C#

I was able to solve the issue. If you have not yet solved it, try the following in the project.json. Add the following:

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

and it should work

Solution 2 - C#

Not sure if anyone still runs into this issue but I was able to address this in a dotnetcore console project (netcoreapp2.0) via:

dotnet add package Microsoft.Extensions.Configuration.Json

Solution 3 - C#

Try adding the following in your .csproj file:

<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>

Solution 4 - C#

Just piling on with one more possible issue...

I had to add this:

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

in order for this to compile:

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.

Solution 5 - C#

If you`re running a .NET Core 1.x or .NET Standard 1.x, you should run this command:

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

If your project is inside another folder:

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

...where MyProject is the name of the .csproj file.

Solution 6 - C#

Something else to consider:

using Microsoft.Extensions.Configuration;

Without that "using" statement, it doesn't find the extension method in Microsoft.Extensions.Configuration.FileExtensions.

The trouble cropped up for me because we were also:

using System.Configuration;

And there was a name clash with "ConfigurationBuilder". Add the

using Microsoft.Extensions.Configuration;

line... remove the

using System.Configuration;

line, then fully qualify anything under System.Configuration.

Solution 7 - C#

Try adding the following to your project.json dependencies:

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

Solution 8 - C#

Add the following to your project.json:

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

Solution 9 - C#

Try adding the following to your project.json dependencies: "Microsoft.Extensions.Configuration.CommandLine": "1.1.1",

Or in project.csproj:
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1" />

This worked for me.

Solution 10 - C#

Additionally do not forget to set "Copy to Output Directory" property to "Copy always" of Json file from Properties window.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionBartimaeusSternView Question on Stackoverflow
Solution 1 - C#Fouad ZakkaView Answer on Stackoverflow
Solution 2 - C#BishopView Answer on Stackoverflow
Solution 3 - C#Vijay ShaaruckView Answer on Stackoverflow
Solution 4 - C#WellspringView Answer on Stackoverflow
Solution 5 - C#Alisson Reinaldo SilvaView Answer on Stackoverflow
Solution 6 - C#Chad LehmanView Answer on Stackoverflow
Solution 7 - C#Brett ChristensenView Answer on Stackoverflow
Solution 8 - C#duduView Answer on Stackoverflow
Solution 9 - C#Pritesh DhokchauleView Answer on Stackoverflow
Solution 10 - C#emert117View Answer on Stackoverflow