我有NET Core 3.1
应用程序,其中我的[models,dbcontext,application]
都在它们自己的程序集中。我正在尝试为应用程序发布迁移。我一直收到这个错误:
$ dotnet ef migrations add InitialCreate --project DataAccess
MSBUILD:错误MSB1009:项目文件不存在。开关:DataAccess无法检索项目元数据。确保它是基于MSBuild。NET核心项目。如果您使用自定义BaseIntermediateOutputPath或MSBuildProjectExtensionPath值,使用--msbuildprojectextensionspath选项。
当前结构
*root
-App (.NET Core 3.1)
-DataAccess (.NET Standard 2.1) (Contains the DBContext)
-Models (.NET Standard 2.1) (contains models)
我还尝试为迁移创建一个单独的程序集,并在App
:中使用MigrationAssembly扩展
services.AddDbContext<[some DBContext]>(x => x.UseSqlServer([some string],x=>x.MigrationsAssembly("Migrations")));
尝试过的结构
*root
-App
-Migrations (.NET Standard 2.1)
-DataAccess (.NET Standard 2.1)
-Models (.NET Standard 2.1)
我不明白该怎么做。我希望能够进行迁移,理想情况下我希望将它们保存在自己的程序集中。目前我根本做不到。
p。S
我还尝试将其添加到我的App
csproj文件中:
<GenerateRuntimeConfigurationFiles>True</GenerateRuntimeConfigurationFiles>
经过几天又几天的谷歌搜索,上面@Ajay给出的答案终于对我有效了:
在--project参数中插入迁移程序集完整路径,如下所示:
dotnet ef migrations add Mymigration --project "c:reposmyprojectData"
您应该从您的主要启动项目(如c:\repos\myproject\Web(中执行此命令
这里的问题完全一样,从几个小时以来,很高兴知道不是唯一一个疯狂的人!
终于解决了:我正在使用EFCore。Package Manager控制台中的工具而不是dotnet Cli:
//添加迁移
Add-Migration *name* -Project *Library project* -StartupProject *StartUp/Web project*
//更新数据库
Update-Database -Project *Library project* -StartupProject *StartUp/Web project* -verbose
我会朝这个方向走。。。玩得高兴
首先将目录更改为项目目录,然后添加.csproj
$ dotnet ef migrations add InitialCreate --project DataAccess.csproj
我希望它能起作用!
我使用了完整的目录路径,它很有效。而且我们应该使用正确的项目参考。
例如:dotnet ef migrations add Initial --project D:NK-ProAPITaskAPI.DataAccessTaskAPI.DataAccess.csproj