在.Net核心项目中使用Microsoft.WindowsAzure.SDK时出现警告

在.Net核心项目中使用Microsoft.WindowsAzure.SDK时出现警告,azure,.net-core,nuget,azure-service-runtime,Azure,.net Core,Nuget,Azure Service Runtime,我已在.Net Core 3.0应用程序中安装了NuGet软件包Microsoft.WindowsAzure.SDK。这将导致以下警告: 警告NU1701包“Microsoft.WindowsAzure.SDK 2.9.0”已还原 使用“.NETFramework,Version=v4.6.1”而不是项目目标 框架'.NETCoreApp,版本=v3.0'。此软件包可能未完全安装 与您的项目兼容 我在尝试将包安装到.Net标准2.0项目中时收到类似错误 NuGet没有依赖项。另一个问题是当时没有

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

警告NU1701包“Microsoft.WindowsAzure.SDK 2.9.0”已还原 使用“.NETFramework,Version=v4.6.1”而不是项目目标 框架'.NETCoreApp,版本=v3.0'。此软件包可能未完全安装 与您的项目兼容

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

NuGet没有依赖项。另一个问题是当时没有一揽子计划;包现在存在,但它会产生此警告

当然可以。我理解(例如,请参阅)当出现此消息时,考虑到.Net Framework 4.6.1(及更高版本)和.Net Core 3.0的相似性,代码通常工作正常。然而,应用程序可能在运行时失败


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

NU1701与依赖项无关,而是关于在包的
lib/
文件夹中选择的DLL。如果您查看包(使用或查看全局包文件夹中的目录,或从nuget.org下载nupkg并使用或任何其他可以打开zip文件的程序),您将看到DLL直接位于
lib/
文件夹下,而DLL通常位于
lib/
文件夹下。这是NuGet不鼓励的旧布局,并且认为它与.NETCore不兼容。因此,它使用资产目标回退来查看包是否与.NET4.61兼容,并且我们认为它是这样的,即使包不明确它兼容的.NETFrask.

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


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

您想做什么?例如,您正在尝试与Azure中的哪些功能进行交互?你提到的包裹很旧。NET Core应用程序只能使用与.NET Standard或.NET Core兼容的库。我很确定这个包裹neither@silent.NET核心应用程序可以使用名为资产目标回退(asset target fallback)的.NET Framework库,该回退生成NU1701。.NET Core SDK 2.0开始使用.NET 4.6.1,该版本在.NET Core 3.0中已扩展为“net461;net48”,但可由使用MSBuild属性的任何项目修改。@无提示我正在尝试使用RoleEnvironment.IsAvailable from Microsoft.WindowsAzure.ServiceRuntime。似乎没有可用的Microsoft.WindowsAzure.ServiceRuntime。这与Web角色(或类似角色)有关吗?我不确定Azure现在是否仍然支持这个功能,或者至少你可能不想在新项目中使用它。你能多发布一点你想要构建的东西吗?@再次默默感谢——非常有用。我只是想弄清楚我的控制台应用程序是在Azure上运行还是在本地计算机上运行,因为在这两种情况下,我有一些不同的行为。作为解决办法,我可以制作两个不同版本的应用程序,一个用于azure,另一个用于本地计算机。谢谢。我已经使用了您指定的blob包。但是我找不到Microsoft.WindowsAzure.ServiceRuntime的官方软件包,其中包含我需要的RoleEnvironment.IsAvailable API。我安装了指定的包,因为当我键入RoleEnvironment.IsAvailable时,Visual Studio建议安装Microsoft.WindowsAzure.ServiceRuntime。也许这个建议已经过时了,但我还没有找到替代方法。搜索ServiceRuntime不会返回任何结果,因此无论您使用该API做什么,现在可能有不同的方法来执行。我将此设置为“正确答案”——在我的情况下,真正的问题是注释中的问题,也就是说,我使用的API并没有遭到微软的反对,但不希望我们再使用。