2016-09-06 128 views
2

我一直在努力解决这个问题,现在我看不出它是怎么可能的,这看起来很奇怪,因为.NET Core已经正确发布,EF6是still recommended for some mainline cases。但是,我是.NET Core的新手,所以希望我只是错过了一些明显的东西。我可以在带有ASP.NET核心Web应用程序(.NET Framework)的单独项目中使用EF6迁移吗?

我有一个ASP.NET核心Web应用程序,并试图在单独的项目中添加EF模型和迁移。我尝试了两条主要路线,并且都遇到了不同的路障。

尝试1:创建EF库作为一个老式的类库

本的Visual Studio(although you have to mess around with the start-up project)内工作确定,但是当我尝试使用“的dotnet恢复”到命令行构建的东西(这样我就可以让我的CI成立)我得到:

Errors in C:\MyProject\src\My.Website\project.json 
Unable to resolve 'My.DataModel' for '.NETFramework,Version=v4.5.2'. 

使用“DOTNET”命令似乎运行的新方式的命令行版本,但也许它不是这种情况下,正确的方法是什么?

尝试2:创建EF库作为.NET核心类库

运行“DOTNET恢复”时,此方法修复了错误,但有破包管理器控制台命令来创建的,而更致命的缺陷迁移(他们似乎需要一个.csproj文件才能工作)。 This answer looked like it might be a solution,但我无法让它为我工作。


我认为我的尝试1更有可能是正确的路要走。在这种情况下,这个问题可能归结为“如何在非.NETCore库中使用'dotnet restore'?”

我刚刚发现this thread,我已经尝试了几件事,从那里他们还没有工作,但我会继续看着它。

回答

1

据我可以告诉答案是“否”,如果你想要什么,我会考虑一个明智的CI设置。如果你可以在CI服务器上运行VS2015的完整安装,你可能会得到这个工作。

我得到了进一步的尝试1,但最终看起来像一个终端(目前)的路障。目前Visual Studio 2015将创建正确包含我的EF项目的lock.json文件。但是,运行“dotnet.exe恢复”将删除引用我的EF项目的行并中断构建。

我希望最终dotnet.exe能赶上Visual Studio并正确处理项目依赖关系,但现在这看起来像是一个终端问题。即使我将lock.json文件提交给源代码管理,CI服务器也需要运行dotnet restore来下拉依赖关系,因此会破坏lock.json文件。

我不得不跳过其他一些环节才能得到这样的效果,所以我会在下面记录它们以防万一。

的NuGet

你需要安装的NuGet到您的构建服务器(或者你的构建下载)。这可能是相当常见的,但我们的构建服务器上已经没有nuget了。我已经尝试了nuget 2.8.6,它似乎只下载了.csproj依赖项,而nuget 3.5。0-rc1,它的行为与dotnet.exe非常相似。

DOTNET

同样需要构建服务器(不讲理)上安装此。但是试图处理项目的依赖,所以你可能需要确保您的构建并不在这一点上失败(如by doing this

的MSBuild

在这一点上我本地的MSBuild时候会产生错误抱怨EF项目:

您的project.json没有列出'win'作为目标运行时。您应该在您的project.json的“运行时间”部分中添加'“win”:{}',然后重新运行NuGet恢复。

该项目没有一个project.json文件,同时在这一点,所以我增加了一个具有以下内容:

 { 
     "frameworks": { 
      "net452": { 
      } 
     }, 

     "runtimes": { 
      "win": {} 
     } 
    } 

截至on this thread暗示。虽然我刚刚注意到这个文件的存在会阻止nuget 3.5.0-RC1从我的EF项目中下载实体框架依赖关系(Nuget 2.8.6忽略此文件并下载EF罚款)

end

此时,只要我在VS2015中打开它,我的本地msbuild就会生成该项目,以便VS2015有机会构建正确的lock.json文件。

在我的CI服务器上,如果我注释掉“dotnet restore”步骤并将我的锁定文件提交到源代码控制,我的EF项目引用不再是问题(我对Entity Framework本身的引用仍然存在问题,但这可能是一个单独的问题)。但是,忽略dotnet恢复步骤并不是一个可行的解决方案 - 事情只能起作用,因为该步骤在那之前已经下载并且已经下载了相关的依赖关系。

请注意,如果您要尝试重现此问题,则VS2015将会注意到并重新将lock.json文件重新写回工作版本,如果您运行“dotnet restore”,因此您需要关闭VS2015或有一个单独的结帐查看问题。

相关问题