我已经在一个NuGet核心3.0应用程序中安装了Microsoft.WindowsAzure.SDK软件包。这将导致以下警告:
警告NU1701包'Microsoft.WindowsAzure.SDK 2.9.0‘是使用'.NETFramework,Version=v4.6.1’而不是项目目标框架'.NETCoreApp,Version=v3.0‘恢复的。此软件包可能与您的项目不完全兼容。
当试图将包安装到.Net标准2.0项目中时,我会收到类似的错误。
NuGet 列出Microsoft.WindowsAzure.SDK包是没有依赖项的。另一个问题解决了当时缺少包的问题;包现在存在,但它会产生此警告。
当然,我可以抑制此警告。我理解(例如,这个答案),当消息出现时,考虑到.Net Framework4.6.1(及以后的版本)和.Net Core3.0的相似之处,代码通常会正常工作。然而,在其他时候,应用程序可能在运行时失败。
看起来奇怪的是,对于Azure来说至关重要的包会在.Net核心项目中发出这样的警告,而这个警告大概意味着什么。整个API会继续在.Net核心(或.Net标准)项目中工作吗?有没有什么可能不起作用的文件?
发布于 2019-07-18 13:05:00
NU1701与依赖无关,它关系到在包的lib/文件夹中选择的dll。如果您查看包(使用fuget.org,或者查看全局packages文件夹中的目录,或者从nuget.org下载nupkg,并使用NuGet包资源管理器或任何其他可以打开zip文件的程序),您将看到‘ll直接位于lib/文件夹下,而’ll通常位于lib/<tfm>/下。这是一个NuGet不鼓励并认为与.NET核心不兼容的旧布局。因此,它使用Asset回退来查看包是否与.NET 4.6.1兼容,我们认为它是兼容的,尽管包没有明确说明它与哪个.NET框架兼容。
实际上,包可能在运行时失败,NuGet无法知道,因此出现了警告。这是我非常喜欢端口适配器模拟器设计模式的原因之一。为blob存储创建一个适配器,它还可以使用比Azure SDK更简单的API。为适配器编写测试并在netcoreapp3.0上运行测试,如果测试通过,您可以确信您的适配器使用的任何API在生产过程中都不会在运行时崩溃。然后,您只需要确保所有其他代码都直接使用适配器而不是Azure。您还可以看到,它如何使切换到一个新的包很容易,在罕见的时候,需要发生。
但是,在这种情况下,您可能会注意到,Microsoft.WindowsAzure.SDK包的最新版本为2.9.0,并于2016年5月发布,因此,只要稍微搜索一下,就会发现2019年5月发布了10.0.3版本的包Microsoft.Azure.Storage.Blob。这个包有.NET框架和.NET标准库,所以如果使用它,就不会再收到NU1701警告了。类似于您使用的其他Azure API,它们现在都被分割成单独的包,而不是一个巨大的SDK,大多数项目使用不到1%的SDK。
https://stackoverflow.com/questions/57094599
复制相似问题