【问题标题】:Referencing .NET 4.7.1 library using Azure Storage from ASP.NET Core 2 MVC App从 ASP.NET Core 2 MVC 应用程序使用 Azure 存储引用 .NET 4.7.1 库
【发布时间】:2018-01-17 08:42:38
【问题描述】:

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

我已经使用 Autofac 的依赖注入连接了我的两个 Web 应用程序以使用我的库中的类。 Web API 应用程序工作正常,但核心应用程序不能。当我构建而不将 Azure Storage NuGet 包安装到核心应用程序时,我收到以下错误:

X.Library' 身份为 'X.Library, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' 使用 'Microsoft.WindowsAzure.Storage, 版本=8.7.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35' 具有比引用程序集更高的版本 带有标识的“Microsoft.WindowsAzure.Storage” 'Microsoft.WindowsAzure.Storage,版本=8.1.4.0,文化=中性, PublicKeyToken=31bf3856ad364e35

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

所以我尝试通过安装 Azure Storage (v8.7.0) 包来解决这个问题,该包与我正在使用的库中安装的版本匹配到我的核心应用程序中。该应用程序现在构建并且我的依赖项被注入但是当我尝试使用它们时,我得到MissingMethodExceptions 方法CreateIfNotExistsCreateQuery。虽然我的 Web API 应用程序可以查询 Azure 表服务,但我的核心应用程序不能使用相同的方法来执行此操作。

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

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

【问题讨论】:

  • 我还没有机会完全研究这个,但是根据Microsoft.WindowsAzure.Storage 的 apisof.net 页面,.NET Core 不支持它,除非你包含了 Platform Extensions 包。大概是因为(顾名思义,它包括 Windows 特定的 API 和方法)。
  • 您能否创建一个依赖于 Microsoft.WindowsAzure.Storage 的 .NET Standard 类库并在您的应用程序中使用它?
  • 谢谢 Jamie,我会试试看的。
  • 实际上,由于 .NET Framework 应用程序,这不起作用。
  • @JamesMundy - All versions of .NET Standard 支持 .NET Framework 4.7.1 客户端程序集。您遇到了什么问题?

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


【解决方案1】:

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

这篇文章向您介绍了将 .Net 库移植到面向多个运行时版本的 .Net 标准库的过程。事实证明这正是我需要做的。

我使用了我在 .Net 框架 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 存储库中都可用,因此我能够编写一个适用于所有版本的服务三个,无需编写任何特定于运行时的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多