在 .Net Core 项目中使用 Microsoft.WindowsAzure.SDK 的警告

4
我已经在 .Net Core 3.0 应用程序中安装了 NuGet 包 Microsoft.WindowsAzure.SDK。这会导致以下警告:
警告 NU1701:使用 '.NETFramework,Version=v4.6.1' 而不是项目目标框架 '.NETCoreApp,Version=v3.0' 来还原包'Microsoft.WindowsAzure.SDK 2.9.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)项目中是否会继续工作?是否有任何文档说明可能无法工作的内容?

你想做什么?也就是说,你想要与 Azure 中的哪些功能进行交互?你提到的这个包非常老旧!.NET Core 应用程序只能使用与 .NET Standard 或 .NET Core 兼容的库。我很确定这个包都不兼容。 - silent
@silent .NET Core应用程序可以使用asset target fallback来使用.NET Framework库,这会生成NU1701。.NET Core SDK 2.0开始使用.NET 4.6.1,并在.NET Core 3.0中扩展到“net461; net48”,但任何使用MSBuild属性的项目都可以进行修改。 - zivkan
这与Web角色(或类似的东西)有关吗?我不确定在Azure今天是否仍然支持它 - 或者至少您可能不想将其用于新项目。您能否发布更多关于您正在尝试构建的实际内容? - silent
你如何在Azure上运行你的应用程序?使用Web Jobs?还是容器? - silent
@silent Service Fabric。(当我在自己的机器上运行时,有时我会使用Service Fabric,有时只是控制台应用程序。实际上,需要知道它是否在服务织物中的基础共享库代码。) - mbabramo
显示剩余3条评论
1个回答

2
NU1701与依赖项无关,它与包中lib/文件夹中选择的dll有关。如果您查看包(使用fuget.org,或查看全局包文件夹中的目录,或从nuget.org下载nupkg并使用NuGet Package Explorer或任何其他可以打开zip文件的程序),您会发现dll直接放在lib/文件夹下,而通常dll都会放在lib/<tfm>/下。这是NuGet不鼓励的旧布局,被认为与.NET Core不兼容。因此,它使用资产目标回退来查看该包是否与.NET 4.6.1兼容,即使该包没有明确说明与哪些.NET框架兼容,我们也认为它是兼容的。
事实上,该软件包可能在运行时失败,NuGet 无法知道,因此会发出警告。这是我非常喜欢的端口适配器模拟器设计模式之一。创建一个针对 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。

谢谢。我已经使用了您指定的blob包。但是我找不到包含我需要的RoleEnvironment.IsAvailable API的Microsoft.WindowsAzure.ServiceRuntime官方包。我安装了指定的包,因为当我输入RoleEnvironment.IsAvailable时,Visual Studio建议安装Microsoft.WindowsAzure.ServiceRuntime。也许这个建议已经过时了,但我还没有找到替代方法。 - mbabramo
在搜索Azure .NET SDK的ServiceRuntime时没有返回任何结果,因此无论您使用该API做什么,现在可能都有不同的方法来实现它。 - zivkan
我将这个设置为“正确答案” - 在我的情况下,真正的重点是评论中提到的那个,即我正在使用一个微软已经不再推荐但仍未废弃的API。 - mbabramo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接