我正在构建一个.NetCoreApp1.1
webapi。我们分发了典型的业务和数据层程序集。当我们将EntityFrameworkCore 2.x
添加到数据访问项目时,我能够测试跨项目的功能。但是webapi停止了工作!我们无法启动应用程序。 program.cs-main因例外而失败:
System.MissingMethodException:“找不到方法:'System.IServiceProvider> MicrosoftExtensions.DependencyInjection.ServiceCollectionContainerBuilderExtens> ions.BuildServiceProvider ...'
文章表明包装类型不匹配但我找不到任何不合适的地方。数据层中的EntityFrameworkcore
是可疑的,因为它是版本2.0.0-preview1-final。在VS2017
中,有一个新功能可将包标记为程序集的私有。这对于在数据层中使用EF执行此操作是有意义的,因此我打开了项目并将其标记为PrivateAsset =“All”
<ItemGroup>
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="2.0.0-preview1-final" **PrivateAssets="All"** />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="2.0.0-preview1-final" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="2.0.0-preview1-final" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer.Design" Version="2.0.0-preview1-final" PrivateAssets="All" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0-preview1-final" PrivateAssets="All" />
<PackageReference Include="WindowsAzure.Storage" Version="8.1.4" />
</ItemGroup>
这解决了我的问题。我能够重建并运行webapi应用程序。 但是,现在我的测试失败了:
消息:测试方法 ACMEAppTests.AppTests_FileManagerSave.FileManager_SaveFile抛出异常:&gt; System.IO.FileNotFoundException:无法加载文件或程序集'Microsoft.EntityFrameworkCore,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = adb9793829ddae60'。系统找不到指定的文件。
这没有任何意义。大会就在那里。所以我似乎无法让两个应用程序同时工作。这些错误对我没有意义。关于包的PrivateAsset =“All”功能似乎没有什么信息。我找到了这个描述:
提示 私有包引用(PrivateAssets =“All”)表示此依赖项是当前项目的本地依赖项。例如,如果项目A具有仅构建依赖项且项目B依赖于A,则dotnet还原不会将A的仅构建依赖项添加到项目B中。
如何解决这个问题?弄清楚为什么webapi停止工作(未找到方法)或调试缺少的程序集引用,而不是从我所知道的,丢失的?
所有帮助表示赞赏。
答案 0 :(得分:0)
您无法将ASP.NET Core 1.1与EF Core 2.0混合使用。它们共享一些常见的依赖项(例如Logging,DependencyInjection等),这意味着您的所有Microsoft。*软件包版本都需要或多或少地对齐。
有关PrivateAssets的信息,请参阅the documentation。添加PrivateAssets="All"
会阻止您的数据图层的依赖关系传播到您的应用中。因此,您得到无法加载程序集错误。