在 .Net Core 项目中使用 Microsoft.WindowsAzure.SDK 的警告
Warning using Microsoft.WindowsAzure.SDK in .Net Core project
我已经在 .Net Core 3.0 应用程序中安装了 NuGet 包 Microsoft.WindowsAzure.SDK。这会导致以下警告:
Warning NU1701 Package 'Microsoft.WindowsAzure.SDK 2.9.0' was restored
using '.NETFramework,Version=v4.6.1' instead of the project target
framework '.NETCoreApp,Version=v3.0'. This package may not be fully
compatible with your project.
我在尝试将包安装到 .Net Standard 2.0 项目时收到类似的错误。
NuGet lists the Microsoft.WindowsAzure.SDK package as having no dependencies. Another question 解决了当时缺少包的问题;该包现在存在,但它会产生此警告。
当然,我可以. I understand (see, e.g., ) that when this message arises, the code often will work just fine, given the similarities of .Net Framework 4.6.1 (and later) and .Net Core 3.0. Yet ,应用程序可能会在运行时失败。
对于 Azure 至关重要的包会在 .Net Core 项目中抛出这样的警告,这似乎很奇怪,而且这个警告可能意味着什么。整个 API 会继续在 .Net Core(或 .Net Standard)项目中工作吗?是否有任何可能不起作用的文档?
NU1701 与依赖关系无关,它是关于在包的 lib/
文件夹中选择的 dll。如果您查看包(使用 fuget.org, or looking at the directory in your global packages folder, or downloading the nupkg from nuget.org and using NuGet Package Explorer 或任何其他可以打开 zip 文件的程序),您会看到 dll 直接位于 lib/
文件夹下,而通常 dll 位于 lib/<tfm>/
.这是 NuGet 不鼓励并认为与 .NET Core 不兼容的旧布局。因此,它使用资产目标回退来查看包是否与 .NET 4.6.1 兼容,我们认为它是兼容的,即使包没有明确说明它与哪些 .NET 框架兼容。
确实,包可能会在 运行 时失败,NuGet 无法知道,因此会出现警告。这是我非常喜欢 port-adapter-simulator 设计模式的原因之一。为 blob 存储创建一个适配器,它还具有 API 的优势,与 Azure SDK 相比,它更易于您的其余业务逻辑使用。为适配器编写测试并 运行 netcoreapp3.0 上的测试,如果测试通过,您可以确信您的适配器使用的 API 中的 none 会在 运行生产时间。然后你只需要确保所有其他代码使用适配器而不是直接使用 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 APIs 类似,它们现在都被分成单独的包,而不是一个巨大的 SDK,大多数项目使用不到 1%。
我已经在 .Net Core 3.0 应用程序中安装了 NuGet 包 Microsoft.WindowsAzure.SDK。这会导致以下警告:
Warning NU1701 Package 'Microsoft.WindowsAzure.SDK 2.9.0' was restored using '.NETFramework,Version=v4.6.1' instead of the project target framework '.NETCoreApp,Version=v3.0'. This package may not be fully compatible with your project.
我在尝试将包安装到 .Net Standard 2.0 项目时收到类似的错误。
NuGet lists the Microsoft.WindowsAzure.SDK package as having no dependencies. Another question 解决了当时缺少包的问题;该包现在存在,但它会产生此警告。
当然,我可以
对于 Azure 至关重要的包会在 .Net Core 项目中抛出这样的警告,这似乎很奇怪,而且这个警告可能意味着什么。整个 API 会继续在 .Net Core(或 .Net Standard)项目中工作吗?是否有任何可能不起作用的文档?
NU1701 与依赖关系无关,它是关于在包的 lib/
文件夹中选择的 dll。如果您查看包(使用 fuget.org, or looking at the directory in your global packages folder, or downloading the nupkg from nuget.org and using NuGet Package Explorer 或任何其他可以打开 zip 文件的程序),您会看到 dll 直接位于 lib/
文件夹下,而通常 dll 位于 lib/<tfm>/
.这是 NuGet 不鼓励并认为与 .NET Core 不兼容的旧布局。因此,它使用资产目标回退来查看包是否与 .NET 4.6.1 兼容,我们认为它是兼容的,即使包没有明确说明它与哪些 .NET 框架兼容。
确实,包可能会在 运行 时失败,NuGet 无法知道,因此会出现警告。这是我非常喜欢 port-adapter-simulator 设计模式的原因之一。为 blob 存储创建一个适配器,它还具有 API 的优势,与 Azure SDK 相比,它更易于您的其余业务逻辑使用。为适配器编写测试并 运行 netcoreapp3.0 上的测试,如果测试通过,您可以确信您的适配器使用的 API 中的 none 会在 运行生产时间。然后你只需要确保所有其他代码使用适配器而不是直接使用 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 APIs 类似,它们现在都被分成单独的包,而不是一个巨大的 SDK,大多数项目使用不到 1%。