当我在Visual Studio 2017中运行使用HttpSys的dotnet core 2.0编写的REST Api时,我得到以下输出:
执行路径:C:\ Program Files \ dotnet \ dotnet.exe目录:C:\ Program
Files \ dotnet连接字符串:
服务器=(的LocalDB)\ mssqllocaldb;数据库= MyApp的; Trusted_Connection = TRUE; MultipleActiveResultSets =真
托管环境:开发内容根路径:
C:\ Users \ Torsten \ source \ repos \ MyApp \ MyApp正在收听 on:http:// *:5000应用程序已启动。按Ctrl + C关闭。
当我使用
从命令行运行相同的应用程序时dotnet myapp
我得到了这个输出:
dotnet MyApp.dll执行路径:C:\ Program
Files \ dotnet \ dotnet.exe目录:C:\ Program Files \ dotnet连接
string:info:
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager [0]
用户个人资料可用。使用' C:\ Users \ Torsten \ AppData \ Local \ ASP.NET \ DataProtection-Keys'作为关键词 存储库和Windows DPAPI在静止时加密密钥 System.ArgumentNullException:值不能为null。参数名称:
connectionString
为什么从命令行启动时无法识别连接字符串?
连接字符串在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();
}
答案 0 :(得分:2)
无法读取ConnectionString的原因是,appsettings.json默认情况下不会被复制到输出目录。仅当您将复制到输出目录配置为复制如果较新或复制始终时,它才会复制到输出目录。
您可以通过查看env.ContentRootPath
方法中的Configure
来区分。
从Visual Studio中启动时,ContentRootPath是项目目录。
C:\ Users \用户有人\源\回购\ MyApp的\ MyApp的
从命令行启动时,ContentRootPath是输出目录。
C:\ Users \用户有人\源\回购\ MyApp的\ MyApp的\ BIN \调试\ netcoreapp2.0
答案 1 :(得分:0)
从项目文件夹中重新运行带有-v开关的dotnet命令以查看结果。如果您看到对。 .. \ microsoft.entityframeworkcore.tools.dotnet \ 1.0.0 .. 的引用,则问题在于CLIToolReference,必须更新。
当我从旧版本的asp.net核心迁移项目时,我遇到了同样的问题。迁移后,DotNetCliToolReference不会自动更新。 更新 yourproject.csproj 文件以使用CLI的 2.0.0 版本,如下面的代码段所示:
<ItemGroup>
...
<DotNetCliToolReference
Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>