【发布时间】:2018-02-15 01:53:27
【问题描述】:
当我在 Visual Studio 2017 中运行使用 HttpSys 的 .NET Core 2.0 编写的 REST API 时,我得到以下输出:
Exe 路径:C:\Program Files\dotnet\dotnet.exe 目录:C:\Program Files\dotnet 连接字符串: 服务器=(localdb)\mssqllocaldb;数据库=MyApp;Trusted_Connection=True;MultipleActiveResultSets=true 托管环境:开发内容根路径: C:\Users\Torsten\source\repos\MyApp\MyApp 现在收听 on: http://*:5000 应用程序已启动。按 Ctrl+C 关闭。
当我从命令行运行相同的应用程序时
dotnet myapp
我得到这个输出:
dotnet MyApp.dll exe 路径:C:\Program Files\dotnet\dotnet.exe 目录:C:\Program Files\dotnet 连接 字符串:信息: Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0] 用户配置文件可用。使用 'C:\Users\Torsten\AppData\Local\ASP.NET\DataProtection-Keys' 作为键 存储库和 Windows DPAPI 以加密静态密钥。 System.ArgumentNullException:值不能为空。参数名称: 连接字符串
为什么从命令行启动时无法识别连接字符串?
连接字符串在 appsettings.json 中定义为:
{
"ConnectionStrings": { "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=MyApp;Trusted_Connection=True;MultipleActiveResultSets=true" },
Startup.cs 内容如下:
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
var pathToExe = Process.GetCurrentProcess().MainModule.FileName;
Console.WriteLine("Exe path : " + pathToExe);
Console.WriteLine("Directory : " + Path.GetDirectoryName(pathToExe));
Console.WriteLine("Command line arguments :" + String.Join(", ",Environment.GetCommandLineArgs()));
Console.WriteLine("Connection string : " + Configuration["ConnectionStrings:DefaultConnection"]);
services.AddDbContext<MyAppContext>(options =>
options.UseSqlServer(Configuration["ConnectionStrings:DefaultConnection"]));
services.AddMvc();
}
【问题讨论】:
-
您必须询问创建
Configuration的内容,因为那是未正确初始化的内容。依赖注入很有趣! -
您是从应用程序目录运行命令吗?配置加载默认为当前工作目录..
-
是的。我从应用程序目录运行它。
-
我也试过
Start-process -FilePath dotnet.exe MyApp.dll -workingdirectory .同样的结果。 -
不过,这看起来像 PowerShell。 PowerShell 中的当前位置与 Windows 中的当前目录不同。先试试
[Environment]::CurrentDirectory = pwd。
标签: c# windows .net-core connection-string