[c#] ConfigurationBuilder를 사용하여 기본 경로 설정
내가 구축중인 .Net 웹 앱의 애플리케이션 기본 경로를 설정하려고합니다. 구성 빌더에서 계속 오류가 발생합니다. 이것은 내가 얻는 오류입니다.
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와 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);
}
}
오류는 public startup
startup.cs의 맨 위에 있는 함수에 있습니다.
답변
문제를 해결할 수있었습니다. 아직 해결하지 않은 경우 project.json에서 다음을 시도하십시오. 다음을 추가하십시오.
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final"
그리고 그것은 작동합니다
답변
아무도 여전히이 문제가 발생하는지 확실하지 않지만 다음을 통해 dotnetcore 콘솔 프로젝트 (netcoreapp2.0)에서이 문제를 해결할 수있었습니다.
dotnet add package Microsoft.Extensions.Configuration.Json
답변
.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>
답변
.NET Core 1.x 또는 .NET Standard 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
파일 의 이름입니다 .
답변
가능한 한 가지 더 많은 문제를 쌓아 두십시오.
나는 이것을 추가해야했다 :
<PackageReference Include="Microsoft.Extensions.Configuration.UserSecrets" Version="3.0.0" />
이것을 컴파일하려면 :
var builder = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
...
편집 : 나는이 답변을 몇 달 전에 썼지 만 콘솔 앱을위한 것이 확실합니다.
답변
project.json에 다음을 추가하십시오.
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-*"
답변
project.json 종속성에 다음을 추가해보세요.
"Microsoft.Extensions.Configuration.CommandLine": "1.1.1",
또는 project.csproj에서 :
<PackageReference Include="Microsoft.Extensions.Configuration.CommandLine" Version="1.1.1" />
이것은 나를 위해 일했습니다.