Configuration.GetConnectionString 在 VS Code 上运行 asp.net 核心时返回 null 但在 Visual Studio 上很好

Posted

技术标签:

【中文标题】Configuration.GetConnectionString 在 VS Code 上运行 asp.net 核心时返回 null 但在 Visual Studio 上很好【英文标题】:Configuration.GetConnectionString returns null when running asp.net core on VS Code but fine on Visual Studio 【发布时间】:2017-01-30 09:41:44 【问题描述】:

这是我的 appsettings.json 文件


  "ConnectionStrings": 
    "DefaultConnection": "Host=localhost;Port=5432;Database=db;User ID=postgres;Password=root"
  ,
  "Logging": 
    "IncludeScopes": false,
    "LogLevel": 
      "Default": "Debug",
      "System": "Information",
      "Microsoft": "Information"
    
  

这就是我检索连接字符串的方式:

// Only works when run through visual studio not on vs code
Configuration.GetConnectionString("DefaultConnection")

我的launch.json


    "version": "0.2.0",
    "configurations": [
        
            "name": ".NET Core Launch (web)",
            "type": "coreclr",
            "request": "launch",
            "preLaunchTask": "build",
            "program": "$workspaceRoot\\src\\Chlx\\bin\\Debug\\netcoreapp1.0\\Chlx.dll",
            "args": [],
            "cwd": "$workspaceRoot",
            "stopAtEntry": false,
            "internalConsoleOptions": "openOnSessionStart",
            "launchBrowser": 
                "enabled": true,
                "args": "$auto-detect-url",
                "windows": 
                    "command": "cmd.exe",
                    "args": "/C start $auto-detect-url"
                ,
                "osx": 
                    "command": "open"
                ,
                "linux": 
                    "command": "xdg-open"
                
            ,
            "env": 
                "ASPNETCORE_ENVIRONMENT": "Development"
            ,
            "sourceFileMap": 
                "/Views": "$workspaceRoot/Views"
            
        ,
        
            "name": ".NET Core Attach",
            "type": "coreclr",
            "request": "attach",
            "processId": "$command.pickProcess"
        
    ]

我的tasks.json


    "version": "0.1.0",
    "command": "dotnet",
    "isShellCommand": true,
    "args": [],
    "tasks": [
        
            "taskName": "build",
            "args": [
                "$workspaceRoot\\src\\Chlx\\project.json"
            ],
            "isBuildCommand": true,
            "problemMatcher": "$msCompile"
        
    ]

你知道如何解决这个问题吗?

【问题讨论】:

你究竟是如何通过 VS Code “运行”它的? 我正在通过调试窗格 ".Net Core Launch (Web)" 运行它。我可以设置断点和获取连接字符串的方法在 vs 代码上返回 null 你如何在你的启动中设置配置? 在launchSettings.json中检查environmentVariables 请检查我的编辑家伙。我添加了一个launch.json 和tasks.json 【参考方案1】:

Configuration 属性在 Startup 类中定义,并通过依赖注入进行初始化。这是使用 dotnet new mvc -au Individual 创建的项目的示例

  public Startup(IConfiguration configuration)
        
            Configuration = configuration;
        

        public IConfiguration Configuration  get; 

【讨论】:

【参考方案2】:

您从根(解决方案级别)而不是从项目运行程序。将 launchsettings.json 中的“cwd”更改为 $workspaceRoot\src\Chlx\

【讨论】:

你太棒了 或者将 applicationsettings.json 添加到根文件夹。这为我解决了问题:) 在 ASP.NET Core 2.0 中,我有两个项目:WebApi 和 DataAccess。 WebApi 包含 appsettings.json。在父目录(包含两个项目)中,它是解决方案文件。我遇到了同样的问题,并且:在解决方案级别复制 appsettings.json 或从 WebApi 项目运行应用程序,其中任何一个都解决了我的问题

以上是关于Configuration.GetConnectionString 在 VS Code 上运行 asp.net 核心时返回 null 但在 Visual Studio 上很好的主要内容,如果未能解决你的问题,请参考以下文章