使用ASP.NET Core 2 MVC App中的Azure存储引用.NET 4.7.1库

时间:2018-01-17 08:42:38

标签: asp.net-core azure-storage autofac asp.net-core-2.0

在我的解决方案中,我有一个使用Razor页面的ASP.NET Core 2 MVC应用程序,一个Web API 2应用程序和一个.NET 4.7.1类库,其中包含使用Azure存储NuGet中的Azure表存储的服务及其定义( V8.7.0)。我正在使用autofac进行依赖注入。

我已经连接了我的网络应用程序,使用Autofac的依赖注入来使用我的库中的类。 Web API应用程序运行正常,但Core应用程序没有。当我构建没有将Azure Storage NuGet包安装到Core应用程序时,我收到以下错误:

  

X.Library'与身份'X.Library,版本= 1.0.0.0,文化=中立,   PublicKeyToken = null'使用'Microsoft.WindowsAzure.Storage,   Version = 8.7.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'   其版本高于引用的程序集   具有身份的'Microsoft.WindowsAzure.Storage'   'Microsoft.WindowsAzure.Storage,Version = 8.1.4.0,Culture = neutral,   公钥= 31bf3856ad364e35

这让我相信ASP.NET Core 2应用程序预装了Azure存储 - 我在项目中找不到任何对它的引用!怪异。

所以我尝试通过安装Azure Storage(v8.7.0)软件包来修复此问题,该软件包与我在我的Core应用程序中使用的库中安装的版本相匹配。应用程序现在构建并且我的依赖项被注入但是当我尝试使用它们时我得到MissingMethodExceptions方法CreateIfNotExistsCreateQuery。虽然我的Web API应用程序可以查询Azure Table Service,但我的Core应用程序无法使用相同的方法来执行此操作。

经过一些研究后,似乎Azure存储库的ASP.NET Core实现已经删除了一些同步方法,并且在运行时它使用的是此版本,而不是我的库引用的.NET Framework兼容版本。

  1. 有没有办法从ASP.NET Core 2应用程序中删除Azure存储?我怀疑它是预先安装的吗?
  2. 我想解决它的最简单方法是使用Framework和Core实现中存在的方法,这是你解决它的方法吗?

1 个答案:

答案 0 :(得分:0)

我在这篇博文的帮助下找到了解决这个问题的方法:https://weblog.west-wind.com/posts/2017/Jun/22/MultiTargeting-and-Porting-a-NET-Library-to-NET-Core-20

该帖子将向您介绍将.Net库移植到针对多个运行时版本的.Net标准库的过程。事实证明这正是我需要做的事情。

我接受了我在.Net framework 4.5.1中编写的服务,并将文件复制到我创建的新.Net标准库中。然后我更改了目标框架以手动支持多个运行时版本(在编写时无法使用Visual Studio UI执行此操作)。出于我的目的,我使用以下内容来支持.Net Core 2,.Net Standard和.Net 4.7.0:

<PropertyGroup>
    <TargetFrameworks>netcoreapp2.0;netstandard2.0;net47</TargetFrameworks>
  </PropertyGroup>

您首先编写的框架是针对性的框架,但我发现Visual Studio为我提供了所有版本的Azure存储库中都没有的方法的错误,因此我能够编写一个适用于所有版本的服务三,没有编写任何特定于运行时的代码。