【问题标题】:Warning using Microsoft.WindowsAzure.SDK in .Net Core project在 .Net Core 项目中使用 Microsoft.WindowsAzure.SDK 的警告
【发布时间】:2019-11-27 09:27:43
【问题描述】:

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

警告 NU1701 包“Microsoft.WindowsAzure.SDK 2.9.0”已恢复 使用 '.NETFramework,Version=v4.6.1' 而不是项目目标 框架'.NETCoreApp,版本 = v3.0'。这个包可能不完整 与您的项目兼容。

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

NuGet lists the Microsoft.WindowsAzure.SDK package 没有依赖关系。另一个question 解决了当时没有包裹的情况;该包现在存在,但它会产生此警告。

当然,我可以suppress this warning。我了解(例如,请参阅 this answer)当此消息出现时,鉴于 .Net Framework 4.6.1(及更高版本)和 .Net Core 3.0 的相似性,代码通常可以正常工作。然而at other times,应用程序可能在运行时失败。

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

【问题讨论】:

  • 你想做什么? IE。您尝试与 Azure 中的哪些功能进行交互?你提到的包裹很旧! .NET Core 应用程序只能使用与 .NET Standard 或 .NET Core 兼容的库。我很确定这个包既不是
  • @silent .NET Core 应用程序可以使用 .NET Framework 库,使用称为资产目标回退的东西,它会生成 NU1701。 .NET Core SDK 2.0 开始使用 .NET 4.6.1,在 .NET Core 3.0 中扩展为“net461;net48”,但任何项目都可以使用 MSBuild 属性对其进行修改。
  • @silent 我正在尝试使用 Microsoft.WindowsAzure.ServiceRuntime 中的 RoleEnvironment.IsAvailable。似乎没有可用的 Microsoft.WindowsAzure.ServiceRuntime。
  • 这与网络角色(或类似的东西)有关吗?我不确定今天 Azure 是否仍然支持它——或者至少你可能不想将它用于新项目。你能发布更多你正在尝试构建的内容吗?
  • @silent 再次感谢——非常有帮助。我要做的就是弄清楚我的控制台应用程序是在 Azure 上运行还是在本地机器上运行,因为在这两种情况下我有一些不同的行为。作为一种解决方法,我可以制作两个不同版本的应用程序,一个用于 azure,一个用于本地机器。

标签: azure .net-core nuget azure-service-runtime


【解决方案1】:

NU1701 与依赖无关,它与在包的lib/ 文件夹中选择的dll 有关。如果您查看包(使用 fuget.org,或查看全局包文件夹中的目录,或从 nuget.org 下载 nupkg 并使用 NuGet Package Explorer 或任何其他可以打开 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。

【讨论】:

  • 谢谢。我已经使用了您指定的 blob 包。但是我找不到 Microsoft.WindowsAzure.ServiceRuntime 的官方包,其中包含我需要的 RoleEnvironment.IsAvailable API。我安装了指定的包,因为当我输入 RoleEnvironment.IsAvailable 时,Visual Studio 建议安装 Microsoft.WindowsAzure.ServiceRuntime。也许这个建议已经过时了,但我还没有找到替代方案。
  • Azure .NET SDK 中搜索 ServiceRuntime 不会返回任何结果,因此无论您使用该 API 做什么,现在都可能有不同的方法。
  • 我将其设置为“正确答案”——在我的情况下,真正的重点是评论中的那个,即我使用的是 Microsoft 尚未弃用但未弃用的 API希望我们不再使用。
猜你喜欢
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 2021-03-02
相关资源
最近更新 更多