Die Konfigurationsdatei 'appsettings.json' wurde nicht gefunden, und es ist nicht optional
Den Azure-Fehler:
.Net Core: Application startup exception:
System.IO.FileNotFoundException: Die Datei configuration
'appsettings.json' wurde nicht gefunden und ist nicht optional.
Also das ist ein bisschen vage. Ich kann nicht scheinen, auf den Nagel setzen. Ich versuche, bereitstellen .Net-Core-Web-API-Projekt von Azure, und ich bin immer diese Fehlermeldung:
🙁 Oops. 500 Internal Server Error
Fehler beim starten der Anwendung.
Habe ich bereitgestellt plain old .Net WebAPI ist und Sie gearbeitet haben. Ich habe gefolgt, online-tutorials und Sie gearbeitet haben. Aber irgendwie ist mein Projekt ist pleite. Aktivieren stdoutLogEnabled auf Web.config und im Blick auf die Azure-Streaming-Protokolle gibt mir diese:
2016-08-26T02:55:12 Welcome, you are now connected to log-streaming service.
Application startup exception: System.IO.FileNotFoundException: The configuration file 'appsettings.json' was not found and is not optional.
at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load(Boolean reload)
at Microsoft.Extensions.Configuration.FileConfigurationProvider.Load()
at Microsoft.Extensions.Configuration.ConfigurationRoot..ctor(IList`1 providers)
at Microsoft.Extensions.Configuration.ConfigurationBuilder.Build()
at Quanta.API.Startup..ctor(IHostingEnvironment env) in D:\Source\Workspaces\Quanta\src\Quanta.API\Startup.cs:line 50
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at Microsoft.Extensions.Internal.ActivatorUtilities.ConstructorMatcher.CreateInstance(IServiceProvider provider)
at Microsoft.Extensions.Internal.ActivatorUtilities.CreateInstance(IServiceProvider provider, Type instanceType, Object[] parameters)
at Microsoft.Extensions.Internal.ActivatorUtilities.GetServiceOrCreateInstance(IServiceProvider provider, Type type)
at Microsoft.Extensions.DependencyInjection.ActivatorUtilities.GetServiceOrCreateInstance(IServiceProvider provider, Type type)
at Microsoft.AspNetCore.Hosting.Internal.StartupLoader.LoadMethods(IServiceProvider services, Type startupType, String environmentName)
at Microsoft.AspNetCore.Hosting.WebHostBuilderExtensions.<>c__DisplayClass1_0.<UseStartup>b__1(IServiceProvider sp)
at Microsoft.Extensions.DependencyInjection.ServiceLookup.FactoryService.Invoke(ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.ScopedCallSite.Invoke(ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.SingletonCallSite.Invoke(ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass12_0.<RealizeService>b__0(ServiceProvider provider)
at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureStartup()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.EnsureApplicationServices()
at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
Hosting environment: Production
Content root path: D:\home\site\wwwroot
Now listening on: http://localhost:30261
Application started. Press Ctrl+C to shut down.
Ok, das scheint so einfach zu sein. Kann es nicht finden appsettings.json. Ein Blick auf meine config ( startup.cs ) es scheint sehr gut definiert. Mein Start sieht wie folgt aus:
public class Startup
{
private static string _applicationPath = string.Empty;
private static string _contentRootPath = string.Empty;
public IConfigurationRoot Configuration { get; set; }
public Startup(IHostingEnvironment env)
{
_applicationPath = env.WebRootPath;
_contentRootPath = env.ContentRootPath;
//Setup configuration sources.
var builder = new ConfigurationBuilder()
.SetBasePath(_contentRootPath)
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsDevelopment())
{
//This reads the configuration keys from the secret store.
//For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
builder.AddUserSecrets();
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
private string GetXmlCommentsPath()
{
var app = PlatformServices.Default.Application;
return System.IO.Path.Combine(app.ApplicationBasePath, "Quanta.API.xml");
}
//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(IServiceCollection services)
{
var pathToDoc = GetXmlCommentsPath();
services.AddDbContext<QuantaContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"],
b => b.MigrationsAssembly("Quanta.API")));
//Swagger
services.AddSwaggerGen();
services.ConfigureSwaggerGen(options =>
{
options.SingleApiVersion(new Info
{
Version = "v1",
Title = "Project Quanta API",
Description = "Quant.API",
TermsOfService = "None"
});
options.IncludeXmlComments(pathToDoc);
options.DescribeAllEnumsAsStrings();
});
//Repositories
services.AddScoped<ICheckListRepository, CheckListRepository>();
services.AddScoped<ICheckListItemRepository, CheckListItemRepository>();
services.AddScoped<IClientRepository, ClientRepository>();
services.AddScoped<IDocumentRepository, DocumentRepository>();
services.AddScoped<IDocumentTypeRepository, DocumentTypeRepository>();
services.AddScoped<IProjectRepository, ProjectRepository>();
services.AddScoped<IProtocolRepository, ProtocolRepository>();
services.AddScoped<IReviewRecordRepository, ReviewRecordRepository>();
services.AddScoped<IReviewSetRepository, ReviewSetRepository>();
services.AddScoped<ISiteRepository, SiteRepository>();
//Automapper Configuration
AutoMapperConfiguration.Configure();
//Enable Cors
services.AddCors();
//Add MVC services to the services container.
services.AddMvc()
.AddJsonOptions(opts =>
{
//Force Camel Case to JSON
opts.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
});
}
//This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app)
{
app.UseStaticFiles();
//Add MVC to the request pipeline.
app.UseCors(builder =>
builder.AllowAnyOrigin()
.AllowAnyHeader()
.AllowAnyMethod());
app.UseExceptionHandler(
builder =>
{
builder.Run(
async context =>
{
context.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
context.Response.Headers.Add("Access-Control-Allow-Origin", "*");
var error = context.Features.Get<IExceptionHandlerFeature>();
if (error != null)
{
context.Response.AddApplicationError(error.Error.Message);
await context.Response.WriteAsync(error.Error.Message).ConfigureAwait(false);
}
});
});
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
//Uncomment the following line to add a route for porting Web API 2 controllers.
//routes.MapWebApiRoute("DefaultApi", "api/{controller}/{id?}");
});
//Ensure DB is created, and latest migration applied. Then seed.
using (var serviceScope = app.ApplicationServices
.GetRequiredService<IServiceScopeFactory>()
.CreateScope())
{
QuantaContext dbContext = serviceScope.ServiceProvider.GetService<QuantaContext>();
dbContext.Database.Migrate();
QuantaDbInitializer.Initialize(dbContext);
}
app.UseSwagger();
app.UseSwaggerUi();
}
}
Diese funktioniert lokal. Aber sobald wir veröffentlichen auf Azure, dies schlägt fehl. Ich bin an einem Verlust. Ich habe neue geschaffen .Net-core-Projekt, das bereitstellen von Azure nur finden. Aber dieses eine Projekt, dass ich all meine Zeit in das, scheint zu scheitern. Ich bin bereit, über kopieren und einfügen von code aus diesem Projekt, dass nicht ausgeführt und in ein neues Projekt, aber ich bin wirklich neugierig auf das, was brechen.
Irgendwelche Ideen?
BEARBEITEN:
So mein Programm.cs:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
namespace Quanta.API
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}
Edit2:
Pro Frans, ich habe die publishOptions. Es war:
"publishOptions": {
"include": [
"wwwroot",
"web.config"
]
},
Nahm ich einen publishOptions von einem Projekt arbeiten und es geändert::
"publishOptions": {
"include": [
"wwwroot",
"Views",
"Areas/**/Views",
"appsettings.json",
"web.config"
]
},
Es noch gab eine 500-Fehlermeldung, aber es gab nicht einen stack-trace, die sagen, es coulding laden appsettings.json. Nun war es zu Klagen über eine Verbindung zu SQL. Ich bemerkte, dass meine SQL-Verbindungszeichenfolge code erwähnt wird, in einer Menge von RC1 blog-Beiträge. RC2 .Net Core geändert. Also ich aktualisierte es zu:
"Data": {
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\MSSQLLocalDB;Database=QuantaDb;Trusted_Connection=True;MultipleActiveResultSets=true"
}
},
Verändert und mein startup zu:
services.AddDbContext<QuantaContext>(options =>
options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
b => b.MigrationsAssembly("Quanta.API")));
Schließlich, es funktionierte.
Muss ich folgte einem älteren RC1 Beispiel und nicht realisiert.
InformationsquelleAutor der Frage Frank | 2016-08-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen Sie die publishOptions im Projekt.json und stellen Sie sicher, dass der "include" - Abschnitt "appsettings.json".
Sie verändert die veröffentlichen-Modell in RTM zu verlangen, dass Sie geben Sie alles, was Sie kopieren möchten, aus der compile-Verzeichnis des web-Ordners.
InformationsquelleAutor der Antwort Frans
Später .net-core-Versionen ein *.csproj - Datei verwendet wird, statt der Projekt.json Datei.
Können Sie die Datei ändern, um das gewünschte Ergebnis zu erhalten, indem Sie hinzufügen:
InformationsquelleAutor der Antwort Jensdc
In Ihrem
project.json
sicherzustellen, dass Sie haben inlcuded
appsettings.json
alscopyToOutput
InformationsquelleAutor der Antwort devfric
Für mich, was gelöst wurde die Einstellung zum einschließen der
appsettings.json
über die Schnittstelle auf die Ausgabe-Verzeichnis (Build-Verzeichnis), etwa so:InformationsquelleAutor der Antwort Felipe Augusto
Brauchen Sie nicht zu fügen Sie Ihre .json-Datei zu veröffentlichen Optionen.
es ist nur so, dass es gesucht wird die Datei auf den falschen Weg.
set base Pfad und fügen Sie die json-Datei und es wird funktionieren.
hier, startup-Konstruktor gebaut mit HostingEnviornment und base path wird in der aktuellen root-Pfad.
und es wird funktionieren!
InformationsquelleAutor der Antwort S.Akruwala
In Meinem Fall die Datei
appsettings.json
im Projekt-Ordner, aber es war nicht gekennzeichnetDo not copy
änderte ich die EinstellungCopy always
(siehe Bilder unten). Und es funktionierte für mich.Wird es automatisch Hinzugefügt, folgenden XML-Code Ihrer
project.csproj
Datei:Ich habe mir andere Antwort,
project.json
ist tot, wie dieser Antwort sagt.InformationsquelleAutor der Antwort maytham-ɯɐɥʇʎɐɯ