首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用nuget包时,是否有一种方法可以避免使用网络标准程序集而倾向于PCL?

在使用nuget包时,是否有一种方法可以避免使用网络标准程序集而倾向于PCL?
EN

Stack Overflow用户
提问于 2018-03-27 14:15:47
回答 2查看 1.4K关注 0票数 5

我有一个桌面应用程序和一个针对.Net框架4.6.2的简单类库。最近我注意到,当我在VS 2017 (15.6.3)更新nuget包时,其中一个已经开始使用一些更新的netstandard2.0程序集。

我渴望有一天能建立网络标准库。但就目前而言,如果将相应的PCL (在同一个nuget包中可用)作为依赖项引入到我的项目中,而不是作为网络标准程序集,我更愿意这样做。nuget PCL组件,我的目标是“便携式-net45 45+win8 8+wp8 8+wp8 81”。

我不想要netstandard2.0程序集的原因是,它会导致一堆shim程序集出现在输出目录中,这是过分的,因为我的应用程序类库本身并不以netstandard2.0为目标。另一件事是VS开始为不相关的包(如System.ValueTuple )生成一系列版本冲突(编译器输出中的警告)。这似乎也与shim相关( shims可能来自路径Studio\2017\Enterprise\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib) C:\Program (x86)\Microsoft Visual )

下面是我开始看到的版本冲突的示例。

遇到“Reference:System.ValueTuple、Version=4.0.2.0、Culture=neutral、PublicKeyToken=cc7b13ffcd2ddd51、processorArchitecture=MSIL”和“Reference:System.ValueTuple”之间的冲突。选择“Reference:System.ValueTuple”是因为文件版本“4.6.26011.1”大于“4.6.25519.3”。

我想这些只是警告,尽管非常可怕。我相信这些只是文件版本问题(与程序集版本无关),并且不认为它们会导致任何绑定重定向的需要。即使如此,我还是会更高兴回到我的PCL,并避免所有这些东西。我认为,一旦.Net框架4.7.2发布,我将更加渴望使用和构建网络标准程序集。

我用的是传统的csproj格式和nuget的packages.config。nuget依赖项似乎引入了netstandard2.0位,它是System.Composition。

代码语言:javascript
复制
System.Composition  1.1.0
System.Composition.AttributedModel  1.1.0
System.Composition.Convention   1.1.0
System.Composition.Hosting  1.1.0
System.Composition.Runtime  1.1.0
System.Composition.TypedParts   1.1.0
System.ValueTuple   4.4.0

希望这是清楚的。此时,我的解决方法是创建另一个类库,该类库以.Net 4.5为目标,引入System.Composition nuget依赖项,运行update-package,然后将来自.Net 4.5csproj的包引用复制/粘贴到.Net 4.6.2项目。然后,我必须记住避免更新.Net 4.6.2项目上的包,否则它会覆盖我对PCL程序集的引用。

我非常感谢你的帮助。我花了几个小时玩nuget命令,还没有找到避免netstandard的窍门。我得到的最接近的方法是在csproj中使用"TargetFrameworks“而不是"TargetFrameworkVersion”,但也遇到了麻烦。

EN

回答 2

Stack Overflow用户

发布于 2018-03-28 14:35:29

在使用nuget包时,是否有一种方法可以避免使用网络标准程序集而倾向于PCL?

这是一个用于已知问题 4.6.2和4.7.1的程序集,它需要一些这样的系统。*程序集由于4.7.1中有一个bug,所以当您将一些nuget包更新为最新版本时,其中一些程序集可能会提取更新的netstandard2.0程序集。

如果不想添加这些netstandard程序集,则可以将目标添加到.net 4.7.1,但它仍然需要其中的12个,而在.net 4.7.2上,bin文件夹将只包含您的dll和pdb。有关更详细的信息,您可以参考以下线程:

net462引用netstandard2.0 --可以避免大量的dll吗?

实际上,4.7.1也需要几个shims才能加载.netstandard2.0程序集,但是只需要12个,而且我们将要发布的工具中只有这些将被复制到bin文件夹中。在4.7.2中,与netstandard的兼容性将是收件箱,这意味着如果您为4.7.2重定向应用程序(一旦为avaliable),bin文件夹将只包含您的dll和pdb。 在4.6.2中,仍然需要使用shims,因为这是netstandard库能够绑定到桌面运行时的方式。

关于.NET框架4.7.1的.NET标准问题

希望这能有所帮助。

票数 1
EN

Stack Overflow用户

发布于 2018-04-03 19:58:59

您应该能够使用PackageTargetFallback msbuild属性来指定要使用的资产:

https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#packagetargetfallback

如果这对你不管用,请告诉我。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49515295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档