4

我已经在 .Net Core 3.0 应用程序中安装了 NuGet 包 Microsoft.WindowsAzure.SDK。这会导致以下警告:

警告 NU1701 包“Microsoft.WindowsAzure.SDK 2.9.0”是使用“.NETFramework,Version=v4.6.1”而不是项目目标框架“.NETCoreApp,Version=v3.0”恢复的。此软件包可能与您的项目不完全兼容。

尝试将包安装到 .Net Standard 2.0 项目中时,我收到类似的错误。

NuGet将 Microsoft.WindowsAzure.SDK 包列为没有依赖项。另一个问题解决了当时没有包裹的情况;该包现在存在,但它会产生此警告。

当然,我可以压制这个警告。我了解(例如,请参阅此答案)当此消息出现时,鉴于 .Net Framework 4.6.1(及更高版本)和 .Net Core 3.0 的相似性,代码通常可以正常工作。然而在其他时候,应用程序可能会在运行时失败。

对 Azure 至关重要的包会在 .Net Core 项目中引发这样的警告似乎很奇怪,并且可能该警告意味着什么。整个 API 会继续在 .Net Core(或 .Net Standard)项目中工作吗?是否有任何可能不起作用的文档?

4

1 回答 1

2

NU1701与依赖无关,它与lib/在包文件夹中选择的dll有关。如果您查看包(使用fuget.org,或查看全局包文件夹中的目录,或从 nuget.org 下载 nupkg 并使用NuGet 包资源管理器或任何其他可以打开 zip 文件的程序),您将看到 dll 直接在lib/文件夹下,而通常 dll 在lib/<tfm>/. 这是 NuGet 不鼓励并认为与 .NET Core 不兼容的旧布局。因此,它使用 Asset Target Fallback 来查看包是否与 .NET 4.6.1 兼容,我们认为它是兼容的,即使包没有明确说明它与哪些 .NET Framework 兼容。

实际上,包可能在运行时失败,NuGet 无法知道,因此发出警告。这也是我非常喜欢 port-adapter-simulator 设计模式的原因之一。为 blob 存储创建一个适配器,它还具有 API 的优势,它比 Azure SDK 更易于使用其余业务逻辑。为适配器编写测试并在 netcoreapp3.0 上运行测试,如果测试通过,您可以确信适配器使用的任何 API 在生产运行时都不会崩溃。然后,您只需要确保所有其他代码都使用适配器,而不是直接使用 Azure SDK。您还可以看到它是如何在极少数需要发生的情况下轻松切换到新软件包的。

但是,在这种情况下,您可能会注意到 Microsoft.WindowsAzure.SDK 包的最新版本为 2.9.0,并于 2016 年 5 月发布,因此如果稍微搜索一下,您会发现包 Microsoft.Azure.Storage。 Blob 版本 10.0.3 于 2019 年 5 月发布。此包同时具有 .NET Framework 和 .NET Standard 库,因此如果您使用它,您将不会再收到 NU1701 警告。与您使用的任何其他 Azure API 类似,它们现在都被拆分为单独的包,而不是大多数项目使用不到 1% 的一个庞大的 SDK。

于 2019-07-18T13:05:00.640 回答