我有一个桌面应用程序和一个针对.NET Framework 4.6.2的简单类库。最近,我注意到,当我在VS 2017(15.6.3(中更新Nuget软件包时,其中一个开始拉动一些较新的NetStandard2.0组件。
我渴望有一天建立Net NetStandard图书馆。但是现在,如果将相应的PCL(在同一Nuget软件包中使用(将作为依赖项而不是NetStandard组件引入我的项目,我更喜欢它。Nuget PCL组件,我是一个目标" Portable Net45 Win8 WP8 WPA81"。
我不想要NetStandard2.0组件的原因是因为它会导致一堆垫片组件出现在输出目录中,并且考虑到我的应用程序类库本身并不是目标NetStandard2.0。发生的另一件事是,VS开始为诸如system.valuetuple之类的无关软件包生成一系列版本冲突(编译器输出中的警告(。net461 lib(
以下是我开始看到的版本冲突的示例。
遇到'参考:system.valuetuple之间的冲突,版本= 4.0.2.0,文化=中性,publickeytoken = cc7b13ffcd2dddddd51,processorarchitecture = msil = msil'and'参考:system.valuetuple'。选择"参考:system.valuetuple",因为文件版本'4.6.26011.1'大于'4.6.25519.3'。
我希望这些只是警告,尽管非常可怕。我相信这些只是文件版本问题(与汇编版本无关(,并且不认为它们会导致任何绑定重定向的需要。即便如此,我还是很高兴再次回到我的PCL,避免所有这些东西。我想一旦发布.NET框架4.7.2,我将更加渴望使用和构建NetStandard组件。
我正在使用旧学校的csproj格式和套餐。nuget依赖性似乎带入netStandard2.0位是系统。
。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.com position nuget依赖关系,运行更新包装,然后将.NET 4.5 CSPROJ的软件包引用复制到.NET 4.6。2项目。然后,我必须记住要避免在该.NET 4.6.2项目上更新我的软件包,否则它将覆盖我对PCL组件的引用。
我非常感谢任何帮助。我花了几个小时使用Nuget Update命令,但还没有找到避免NetStandard的技巧。我最接近的是在CSPROJ中使用" targetFrameWorks",而不是" targetFrameWorkversion",但也遇到了麻烦。
使用Nuget软件包时,是否有一种方法可以避免NetStandard组件支持PCL?
这是.NET 4.6.2和4.7.1的已知问题,需要其中一些系统。其中一些可能会拉新的NetStandard2.0组件。
如果您不想添加那些NetStandard组件,则可以将目标定位到.NET 4.7.1,但是它仍然需要12个和.NET 4.7.2,则BIN文件夹只能包含您的DLL和PDB。有关更多详细信息,您可以参考以下线程:
net462引用netstandstard2.0-可以避免大量DLL?
实际上4.7.1也需要一些垫片才能加载.NETSTANDARD2.0组件,但只需要12个我们将要发布的工具是唯一的被复制到bin文件夹。在4.7.2上,与NetStandard的兼容性将是收件箱(一旦可以避免(bin文件夹只会包含您的dll和PDB。
在4.6.2中,您仍然需要那里的垫片,因为那是您的方式NetStandard库将能够绑定到桌面运行时。
.NET框架上的标准问题4.7.1
希望这会有所帮助。
您应该能够使用PackageTargetFallback
MSBUILD属性来指定要使用的资产:
https://learn.microsoft.com/en-us/nuget/reference/mmsbuild-targets#packagetargetfallback
请告诉我是否对您不起作用。