UserSecrets.dll не находит project.json

Я конвертирую веб-сайт aspnet5/rc-1 в выпущенное ядро ​​aspnet. Я столкнулся с проблемой, связанной с секретами пользователя в среде разработки.

Вызов AddUserSecrets в конструкторе Startup вызывает исключение:

public Startup( IHostingEnvironment env )
{
    // Set up configuration sources.
    var builder = new ConfigurationBuilder()
        .AddJsonFile( "appsettings.json" )
        .AddJsonFile( $"appsettings.{env.EnvironmentName}.json", optional: true );

    if( env.IsDevelopment() )
    {
        // this line blows up
        builder.AddUserSecrets();
    }

    builder.AddEnvironmentVariables();
    Configuration = builder.Build();

Сообщение об ошибке связано с тем, что файл project.json не может быть найден в папке bin/Debug/netcoreapp1.0... что странно, потому что я не ожидал найти файл project.json в распространяемый исполняемый файл в первую очередь.

Все это прекрасно работало под rc1, так что что-то изменилось.

Дополнительная информация

Вот детали исключения:

System.InvalidOperationException не было обработано кодом пользователя
HResult=-2146233079 Message=Не удалось найти файл project.json в папке 'C:\Programming\SpeedView\src\SpeedView\bin\Debug\netcoreapp1.0\'.
Source=Microsoft.Extensions.Configuration.UserSecrets StackTrace: в Microsoft.Extensions.Configuration.UserSecrets.PathHelper.GetSecretsPath(поставщик IFileProvider) в Microsoft.Extensions.Configuration.ConfigurationExtensions.AddUserSecrets(конфигурация IConfigurationBuilder) в SpeedView.Startup..ctor(IHostingEnvironment env) в C:\Programming\SpeedView\src\SpeedView\Startup.cs:строка 48
InnerException:

Вот файл project.json:

{
  "userSecretsId": "aspnet5-SpeedView-f526a1b2-f58b-4e04-b189-8442609eff8c",
  "version": "1.0.0-*",
  "compilationOptions": {
    "emitEntryPoint": true
  },

  "dependencies": {
    "Microsoft.NETCore.App": {
      "version": "1.0.0",
      "type": "platform"
    },
    "Microsoft.AspNetCore.Antiforgery": "1.0.0",
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics": "1.0.0",
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0",
    "Microsoft.AspNetCore.Mvc": "1.0.0",
    "Microsoft.AspNetCore.Razor.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
    "Microsoft.AspNetCore.StaticFiles": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0",
    "Microsoft.EntityFrameworkCore.SqlServer.Design": {
      "version": "1.0.0",
      "type": "build"
    },
    "Microsoft.EntityFrameworkCore.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
    "Microsoft.Extensions.Configuration.Json": "1.0.0",
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0",
    "Microsoft.Extensions.Logging": "1.0.0",
    "Microsoft.Extensions.Logging.Console": "1.0.0",
    "Microsoft.Extensions.Logging.Debug": "1.0.0",
    "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": {
      "version": "1.0.0-preview2-final",
      "type": "build"
    },
    "AutoMapper": "5.0.2",
    "Serilog.Extensions.Logging": "1.1.0",
    "Serilog.Sinks.ColoredConsole": "2.0.0",
    "Serilog.Sinks.Literate": "2.0.0",
    "Serilog.Sinks.RollingFile": "2.2.0",
    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final"
  },

  "tools": {
    "BundlerMinifier.Core": "2.0.238",
    "Microsoft.AspNetCore.Razor.Tools": "1.0.0-preview2-final",
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final",
    "Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
    "Microsoft.Extensions.SecretManager.Tools": "1.0.0-preview2-final",
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": {
      "version": "1.0.0-preview2-final",
      "imports": [
        "portable-net45+win8"
      ]
    }
  },

  "frameworks": {
    "netcoreapp1.0": {
      "imports": [
        "dotnet5.6",
        "portable-net45+win8"
      ]
    }
  },

  "buildOptions": {
    "emitEntryPoint": true,
    "preserveCompilationContext": true
  },

  "publishOptions": {
    "include": [
      "wwwroot",
      "Views",
      "Areas/**/Views",
      "appsettings.json",
      "web.config"
    ]
  },

  "scripts": {
    "prepublish": [ "npm install", "bower install", "gulp siteprep" ]
  }
}

person Mark Olbert    schedule 04.08.2016    source источник
comment
Не могли бы вы опубликовать фактическое сообщение об исключении и файл project.json.   -  person Brad    schedule 04.08.2016


Ответы (1)


Не забудьте установить свой BasePath:

public Startup( IHostingEnvironment env )
{
 // Set up configuration sources.
 var builder = new ConfigurationBuilder()
    .SetBasePath(env.ContentRootPath) // Add this line <-----
    .AddJsonFile( "appsettings.json" )
    .AddJsonFile( $"appsettings.{env.EnvironmentName}.json", optional: true );
person Gerardo Grignoli    schedule 04.08.2016
comment
Спасибо, Херардо; в этом была проблема. Знаете ли вы, где задокументирована причина этого изменения? - person Mark Olbert; 04.08.2016
comment
Здесь они решили создать BasePath github.com/aspnet/Configuration/issues/159. и вот они удалили его из конструктора ConfigurationBuilder / - person Gerardo Grignoli; 04.08.2016
comment
Оцените ссылки. Теперь я понимаю изменение, чтобы поддержать развязку. - person Mark Olbert; 04.08.2016