未找到匹配命令的可执行文件 "dotnet-ef"
No executable found matching command "dotnet-ef"
我正在通过使用 ASP.Net Core RC2 与 Microsoft.EntityFramework.Core
和 SQLite 来做一个项目示例。
我已按照本教程进行操作:
https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/
但是,当我 运行 这个命令时:
dotnet ef migrations add FirstMigration
我收到这个错误:
No executable found matching command "dotnet-ef"
这是我的 project.json
配置:
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0-rc2-3002702",
"type": "platform"
},
"Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",
"Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
"Microsoft.EntityFrameworkCore.Sqlite": "1.0.0-rc2-final"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
"version": "1.0.0-preview1-final",
"imports": "portable-net45+win8+dnxcore50"
}
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"dnxcore50",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"gcServer": true
},
"publishOptions": {
"include": [
"wwwroot",
"Views",
"appsettings.json",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
Entity Framework核心1.0
您只需要更新 project.json 文件的 tools
部分以包含以下内容:
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.0.0-preview1-final",
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
}
这应该使 dotnet ef
命令可用。
重要
我在这里还应该注意,dotnet ef
命令只有在 运行 它们来自包含 project.json 文件的同一目录时才可用。
Entity Framework核心1.1
如果您在升级到 Entity Framework Core 1.1 后再次遇到此问题,请务必将 Microsoft.EntityFrameworkCore.Tools
依赖项替换为 Microsoft.EntityFrameworkCore.Tools.DotNet
版本 1.1.0-preview4
。也没有必要保留 imports
部分。有关这方面的更多信息,请参阅 Entity Framework Core 1.1 release announcement blog post.
下的 "Upgrading to 1.1" 标题
我必须添加 Microsoft.EntityFrameworkCore.Tools.DotNet 才能工作。 project.json 文件的工具部分将如下所示:
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
"Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final",
"Microsoft.EntityFrameworkCore.Tools":"1.1.0-preview4-final",
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final"
},
Entity Framework核心1.1
如果您将 VS2017 与没有 project.json 文件的新 .csproj 项目一起使用,请添加此内容
您需要编辑 .csproj 文件(在解决方案资源管理器中右键单击它并单击编辑 whatever.csproj),然后将其粘贴到
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet">
<Version>1.0.0-*</Version>
</DotNetCliToolReference>
</ItemGroup>
由 : https://github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967
提供
在 visual studio 2017 年,我需要 运行 来自包管理器控制台的这些命令
install-package Microsoft.EntityFrameworkCore.SqlServer.Design
Scaffold-DbContext "Server=.\sqlexpress;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "MyApp"
这是从 .NET Core 1.0 切换到 .NET Core 1.1+ 或 2.x 时的常见问题。
要解决这个问题,您需要:
- 使用 NuGet 获取 Microsoft.EntityFrameworkCore.Tools 和 Microsoft.EntityFrameworkCore.Tools.DotNet 包库。
- 在您的
project.json
(对于 .NET Core 1.0)或 <projectName>.csproj
(对于 .NET Core 1.1+ 和 2.x)项目配置文件中手动添加对此包的引用。
更具体地说,对于 .NET Core 1.0 项目,添加:
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0"
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0"
}
对于 .NET Core 1.1+ 和 .NET Core 2.x 项目,添加:
<ItemGroup>
<DotNetCliToolReference
Include="Microsoft.EntityFrameworkCore.Tools"
Version="2.0.0" />
<DotNetCliToolReference
Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>
如果您已有 tools
json 键或 <ItemGroup>
元素以及一个或多个现有 DotNetCliToolReference
元素,只需将新元素添加到现有组.
重要提示:除执行上述步骤外,您还必须在项目根文件夹(包含项目文件的文件夹)中启动 dotnet ef
命令,否则它不会工作。
有关更多信息和问题的详细解释,您可以阅读 my blog post。
我正在使用一个单独的 class 库项目。在包管理器控制台中尝试并失败以上所有操作后。我使用了命令提示符,它起作用了!诡异的。
但是,归功于 this article。
如果您使用单独的 class 库项目,This 是您的解决方案。
如果您遇到此问题并且 运行 asp.net 核心使用 CLI 工具,您可以通过添加来解决它
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
进入 xx.csproj 文件,然后
dotnet restore
。
然后你可以使用 dotnet ef 命令。
而不是在 VS 包管理器控制台中打开单独的控制台 window 并 运行 以下命令:
Add migration
Add-Migration <migration name>
Remove last migration
Remove-Migration
Before a migration has been applied (or, to apply migration):
Update-Database
When migration has been applied:
Update-Database -Migration <previous migration> -Context <db context name>
HTH
编辑:您的 MVC 核心项目中可能还需要以下 class:
public class DbContextFactory : IDesignTimeDbContextFactory<NotesContext>
{
public YourDbContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<YourDbContext>();
builder.UseSqlServer("DefaultConnection", optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(YourDbContext).GetTypeInfo().Assembly.GetName().Name));
return new YourDbContext(builder.Options);
}
}
特定于 VS2017 15.3 或更高版本和 ASP.NET CORE 2.0 或更高版本...
通过命令行或 nuget 包管理器为数据库提供程序安装 nuget。
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
将以下部分添加到 .csproj
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>
在 VS2017 中通过命令行或 nuget 管理器安装设计时工具。
dotnet add package Microsoft.EntityFrameworkCore.Design
这会在项目目录的命令行中启用 dotnet ef *。
在项目目录的命令行中启用 dotnet ef * 命令,
dotnet ef migrations add Initial
dotnet ef database update Initial
dotnet ef dbcontext scaffold
在工具部分添加以下代码,
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
"version": "1.0.0-preview2-final",
"imports": "portable-net45+win8+dnxcore50"
}
}
这种格式的代码解决了我的错误。
我想我已经找到问题的准确解决方案 - dotnet:找不到可执行文件匹配的命令"dotnet-ef"。 .
我在 VS 2017 versio 15.5.3 中使用 dot net core 2.0
Cause of this error
此错误是因为 Nuget 无法找到 解决方案文件在位置上。
Solution:- Move to the directory where you have the 'Startup.cs' class
我通过在 程序包管理器控制台上添加以下 命令 移动到 root .
cd .\School1
这里'School1'是我的项目的根目录,里面有我的'Startup.cs'class,你的会不一样案例.
- 然后 运行 程序包管理器控制台 上的命令
dotnet ef
现在将 运行 成功。
Example With Pictures for Clear Understanding
我在 运行ning dotnet ef
时遇到错误错误。
我通过使用命令 cd .\School1
移动到根文件夹来更正错误
希望它能帮助我的 Dot Net 开发人员。
添加NuGet Pkg时默认会添加为PackageReference,这是错误的,请手动编辑
1- 编辑 .csproj 文件
2- 从 "PackageReference" 更改为:
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/>
</ItemGroup>
to:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/>
</ItemGroup>
就我而言,当 dotnet -h
为 运行 时,dotnet ef
不可用且未显示在列表中。
我已经使用以下命令全局安装了 dotnet-ef,现在我可以使用它了。但仍然不在列表中。
dotnet tool install -g dotnet-ef
我正在通过使用 ASP.Net Core RC2 与 Microsoft.EntityFramework.Core
和 SQLite 来做一个项目示例。
我已按照本教程进行操作: https://damienbod.com/2015/08/30/asp-net-5-with-sqlite-and-entity-framework-7/
但是,当我 运行 这个命令时:
dotnet ef migrations add FirstMigration
我收到这个错误:
No executable found matching command "dotnet-ef"
这是我的 project.json
配置:
{
"dependencies": {
"Microsoft.NETCore.App": {
"version": "1.0.0-rc2-3002702",
"type": "platform"
},
"Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final",
"Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.FileExtensions": "1.0.0-rc2-final",
"Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
"Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final",
"Microsoft.EntityFrameworkCore": "1.0.0-rc2-final",
"Microsoft.EntityFrameworkCore.Sqlite": "1.0.0-rc2-final"
},
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
"version": "1.0.0-preview1-final",
"imports": "portable-net45+win8+dnxcore50"
}
},
"frameworks": {
"netcoreapp1.0": {
"imports": [
"dotnet5.6",
"dnxcore50",
"portable-net45+win8"
]
}
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
},
"runtimeOptions": {
"gcServer": true
},
"publishOptions": {
"include": [
"wwwroot",
"Views",
"appsettings.json",
"web.config"
]
},
"scripts": {
"postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ]
}
}
Entity Framework核心1.0
您只需要更新 project.json 文件的 tools
部分以包含以下内容:
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.0.0-preview1-final",
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
}
这应该使 dotnet ef
命令可用。
重要
我在这里还应该注意,dotnet ef
命令只有在 运行 它们来自包含 project.json 文件的同一目录时才可用。
Entity Framework核心1.1
如果您在升级到 Entity Framework Core 1.1 后再次遇到此问题,请务必将 Microsoft.EntityFrameworkCore.Tools
依赖项替换为 Microsoft.EntityFrameworkCore.Tools.DotNet
版本 1.1.0-preview4
。也没有必要保留 imports
部分。有关这方面的更多信息,请参阅 Entity Framework Core 1.1 release announcement blog post.
我必须添加 Microsoft.EntityFrameworkCore.Tools.DotNet 才能工作。 project.json 文件的工具部分将如下所示:
"tools": {
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.1.0-preview4-final",
"Microsoft.AspNetCore.Razor.Tools": "1.1.0-preview4-final",
"Microsoft.EntityFrameworkCore.Tools":"1.1.0-preview4-final",
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final"
},
Entity Framework核心1.1
如果您将 VS2017 与没有 project.json 文件的新 .csproj 项目一起使用,请添加此内容
您需要编辑 .csproj 文件(在解决方案资源管理器中右键单击它并单击编辑 whatever.csproj),然后将其粘贴到
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet">
<Version>1.0.0-*</Version>
</DotNetCliToolReference>
</ItemGroup>
由 : https://github.com/aspnet/EntityFramework/issues/7358#issuecomment-278379967
提供在 visual studio 2017 年,我需要 运行 来自包管理器控制台的这些命令
install-package Microsoft.EntityFrameworkCore.SqlServer.Design
Scaffold-DbContext "Server=.\sqlexpress;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "MyApp"
这是从 .NET Core 1.0 切换到 .NET Core 1.1+ 或 2.x 时的常见问题。
要解决这个问题,您需要:
- 使用 NuGet 获取 Microsoft.EntityFrameworkCore.Tools 和 Microsoft.EntityFrameworkCore.Tools.DotNet 包库。
- 在您的
project.json
(对于 .NET Core 1.0)或<projectName>.csproj
(对于 .NET Core 1.1+ 和 2.x)项目配置文件中手动添加对此包的引用。
更具体地说,对于 .NET Core 1.0 项目,添加:
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0"
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0"
}
对于 .NET Core 1.1+ 和 .NET Core 2.x 项目,添加:
<ItemGroup>
<DotNetCliToolReference
Include="Microsoft.EntityFrameworkCore.Tools"
Version="2.0.0" />
<DotNetCliToolReference
Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>
如果您已有 tools
json 键或 <ItemGroup>
元素以及一个或多个现有 DotNetCliToolReference
元素,只需将新元素添加到现有组.
重要提示:除执行上述步骤外,您还必须在项目根文件夹(包含项目文件的文件夹)中启动 dotnet ef
命令,否则它不会工作。
有关更多信息和问题的详细解释,您可以阅读 my blog post。
我正在使用一个单独的 class 库项目。在包管理器控制台中尝试并失败以上所有操作后。我使用了命令提示符,它起作用了!诡异的。 但是,归功于 this article。 如果您使用单独的 class 库项目,This 是您的解决方案。
如果您遇到此问题并且 运行 asp.net 核心使用 CLI 工具,您可以通过添加来解决它
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
进入 xx.csproj 文件,然后
dotnet restore
。
然后你可以使用 dotnet ef 命令。
而不是在 VS 包管理器控制台中打开单独的控制台 window 并 运行 以下命令:
Add migration
Add-Migration <migration name>
Remove last migration
Remove-Migration
Before a migration has been applied (or, to apply migration):
Update-Database
When migration has been applied:
Update-Database -Migration <previous migration> -Context <db context name>
HTH
编辑:您的 MVC 核心项目中可能还需要以下 class:
public class DbContextFactory : IDesignTimeDbContextFactory<NotesContext>
{
public YourDbContext CreateDbContext(string[] args)
{
var builder = new DbContextOptionsBuilder<YourDbContext>();
builder.UseSqlServer("DefaultConnection", optionsBuilder => optionsBuilder.MigrationsAssembly(typeof(YourDbContext).GetTypeInfo().Assembly.GetName().Name));
return new YourDbContext(builder.Options);
}
}
特定于 VS2017 15.3 或更高版本和 ASP.NET CORE 2.0 或更高版本...
通过命令行或 nuget 包管理器为数据库提供程序安装 nuget。
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
将以下部分添加到 .csproj
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet"
Version="2.0.0" />
</ItemGroup>
在 VS2017 中通过命令行或 nuget 管理器安装设计时工具。
dotnet add package Microsoft.EntityFrameworkCore.Design
这会在项目目录的命令行中启用 dotnet ef *。
在项目目录的命令行中启用 dotnet ef * 命令,
dotnet ef migrations add Initial
dotnet ef database update Initial
dotnet ef dbcontext scaffold
在工具部分添加以下代码,
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview2-final",
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.0.0-preview2-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": {
"version": "1.0.0-preview2-final",
"imports": "portable-net45+win8+dnxcore50"
}
}
这种格式的代码解决了我的错误。
我想我已经找到问题的准确解决方案 - dotnet:找不到可执行文件匹配的命令"dotnet-ef"。 .
我在 VS 2017 versio 15.5.3 中使用 dot net core 2.0
Cause of this error
此错误是因为 Nuget 无法找到 解决方案文件在位置上。
Solution:- Move to the directory where you have the 'Startup.cs' class
我通过在 程序包管理器控制台上添加以下 命令 移动到 root .
cd .\School1
这里'School1'是我的项目的根目录,里面有我的'Startup.cs'class,你的会不一样案例.
- 然后 运行 程序包管理器控制台 上的命令
dotnet ef
现在将 运行 成功。
Example With Pictures for Clear Understanding
我在 运行ning
dotnet ef
时遇到错误错误。我通过使用命令
cd .\School1
移动到根文件夹来更正错误
希望它能帮助我的 Dot Net 开发人员。
添加NuGet Pkg时默认会添加为PackageReference,这是错误的,请手动编辑
1- 编辑 .csproj 文件
2- 从 "PackageReference" 更改为:
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/>
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/>
</ItemGroup>
to:
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.1.1"/>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.3"/>
</ItemGroup>
就我而言,当 dotnet -h
为 运行 时,dotnet ef
不可用且未显示在列表中。
我已经使用以下命令全局安装了 dotnet-ef,现在我可以使用它了。但仍然不在列表中。
dotnet tool install -g dotnet-ef