问题:
如何在具有3个平台的VisualStudio2017
解决方案中管理nuget软件包:
?
我喜欢PackageReference
方法,但是我不知道如何使用它。他们谈论:
<ItemGroup>
<!-- ... -->
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" />
<!-- ... -->
</ItemGroup>
.Net Framework 4.6
时如何管理版本?.net core
lib的控制台.net standard
应用时,我也遇到了这个问题。此外,我想提到我遇到了几篇文章,这些文章指出.csproj
又回来了,不需要使用.xproj
,project.json
。就个人而言,我喜欢这种想法来像以前一样处理.csproj
。
上下文:
我不是讲英语的人,并且对非琐碎的nuget用法和.Net
Core
/ Standard
开发非常陌生。
我正准备将.Net Framework
应用程序移植到.Net
Framework
+ Standard
+ Core
。
现在,这只是一个 WPF 应用程序。但是在将来,它打算保留相同的 WPF 应用程序,但还要从现有逻辑中继承一个新的.Net Core
分支。
我不确定确切的新.Net Core
分支的计划是什么。最有可能的计划是创建一个ASP.Net Core
网站。
我可以确定的是,任务是保持逻辑以.Net Framework
(使用 WPF UI)运行,并将其实现为.Net Core
。
由于简单,我决定使用Framework
+ Standard
+ Core
的组合作为解决方案。我的意思是这个概念很容易理解:2个分支( FWK , Core )使用的基类( standard )。
在代码中不需要多目标或指令(条件编译)。
暗示应通过复制粘贴和修改从头创建新解决方案。
仍不能100%确信此决定的合理性。
但是这个问题暗示着应该采用这种方法:Framework
+ Standard
+ Core
。
我希望这个问题是合理的;我的意思是,在这种情况下,对nuget软件包的有效管理是成功进行跨平台项目的良好起点。谢谢!
答案 0 :(得分:3)
注意:我假设您在这里使用新的SDK csproj格式,例如:
<TargetFrameworks>netstandard1.3;net46;netcoreap1.0</TargetFrameworks>
如果您所引用的事物与项目一样都存在并定位到目标,那么它应该正常工作。但是,除非您实际上在Framework vs Standard vs Core中做了一些不同的事情,否则您最好只针对Standard,实际上:许多库现在至少以netstandard2.0
为基础。这可能对您来说可能或不可能。
版本在4.6上没有任何区别,除非特定的软件包存在问题,但是:您可以通过在Condition
或特定的{{1}上使用<ItemGroup>
属性来解决此问题}元素。例如,我有一个针对<PackageReference>
和net461
的库;碰巧的是,我正在使用的所有都已内置到net461 中,因此为了避免任何下游依赖性,我可以这样做:
netstandard2.0
这给了我(很生气)
但是我本可以将所有内容都保留为:
<ItemGroup Condition="'$(TargetFramework)'=='net461'">
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
<ItemGroup Condition="'$(TargetFramework)'!='net461'">
<PackageReference Include="System.Data.Common" Version="4.3.0" />
<PackageReference Include="System.Reflection" Version="4.3.0" />
<PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
<PackageReference Include="System.Reflection.Emit.ILGeneration" Version="4.3.0" />
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.3.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
<PackageReference Include="System.Security.Permissions" Version="4.5.0" />
</ItemGroup>
,它将正常工作-只是: <ItemGroup>
<PackageReference Include="System.Data.Common" Version="4.3.0" />
<PackageReference Include="System.Reflection" Version="4.3.0" />
<PackageReference Include="System.Reflection.Emit" Version="4.3.0" />
<PackageReference Include="System.Reflection.Emit.ILGeneration" Version="4.3.0" />
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="4.3.0" />
<PackageReference Include="Microsoft.CSharp" Version="4.5.0" />
<PackageReference Include="System.Security.Permissions" Version="4.5.0" />
</ItemGroup>
目标将列出依赖项。我还可以列出每个目标框架完全不同的依赖项。