当 .Net Framework+Standard+Core 组合时使用 PackageReferences 管理 nuget 包
Manage nuget packages with PackageReferences when .Net Framework+Standard+Core combined
问题:
如何在具有 3 个平台的 VisualStudio2017
解决方案中管理 nuget 包:
- .Net 标准 1.3
- .Net Framework 4.6
- .Net Core 1.0
?
我喜欢 PackageReference
方法,但我不知道如何使用它。他们谈论:
<ItemGroup>
<!-- ... -->
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" />
<!-- ... -->
</ItemGroup>
- 这是否意味着通常每个 Framework/Standard/Core 我至少需要 3 个 PackageReferences?
- 当我们卡在
.Net Framework 4.6
时如何管理版本?
- 我也 运行 遇到了这个问题,因为 nuget[=86,我无法 运行 一个控制台
.net core
引用 .net standard
lib 的应用程序=]版本兼容性问题。
此外,我想提一下,我看到几篇文章说 .csproj
回来了,不需要 .xproj
、project.json
。就个人而言,我喜欢这个想法来像以前一样处理 .csproj
s。
上下文:
我的母语不是英语,我对重要的 nuget 用法和 .Net
Core
/Standard
开发非常陌生。
我正准备将 .Net Framework
应用程序移植到 .Net
Framework
+Standard
+Core
。
这现在只是一个 WPF 应用程序。但在未来,它打算保持相同的 WPF 应用程序,但也有一个新的 .Net Core
b运行ch,从现有逻辑中提升。
我不确切知道可能的新 .Net Core
b运行ch 的计划是什么。最有可能的是,计划是创建一个 ASP.Net Core
网站。
我确切知道的是,任务是保持逻辑 运行ning 为 .Net Framework
(使用 WPF UI)并将其实现为.Net Core
.
我决定使用 Framework
+Standard
+Core
的组合作为解决方案,因为它很简单。我的意思是这个概念很容易理解:base 类 (standard) used by 2 b运行ces (FWK, 核心)。
代码中不需要多目标或指令(条件编译)。
这意味着新的解决方案应该通过复制粘贴和修改从头开始创建。
仍然不能 100% 确定这个决定的合理性。
但问题暗示要采用这种方法:Framework
+Standard
+Core
.
我希望这个问题是合理的;我的意思是在这种情况下有效管理 nuget 包是成功的跨平台项目的良好开端。谢谢!
注意:我假设您在这里使用的是新的 SDK csproj 格式,例如:
<TargetFrameworks>netstandard1.3;net46;netcoreap1.0</TargetFrameworks>
如果您引用的东西 存在并且目标 所有与您的项目相同的平台,它应该 正常工作 。但是,除非您实际上在 Framework vs Standard vs Core 中做 不同的事情 ,否则您最好只针对 Standard,而实际上:许多库现在都在变基 netstandard2.0
作为最低限度。这对您来说可能可行,也可能不可行。
版本在 4.6 上没有任何不同,除非特定包有问题,但是:您可以通过在 <ItemGroup>
或特定 [=] 上使用 Condition
属性来解决这个问题16=] 元素。例如,我有一个针对 net461
和 netstandard2.0
的库;碰巧的是,我使用的所有东西 都已经内置到 net461 中,因此为了避免任何下游依赖,我可以这样做:
<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>
这给了我(在 nuget 中):
但是;我本可以保留一切:
<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>
它会工作得很好——只是:net461
目标会列出依赖项。我也可以列出每个目标框架完全不同的依赖项。
问题:
如何在具有 3 个平台的 VisualStudio2017
解决方案中管理 nuget 包:
- .Net 标准 1.3
- .Net Framework 4.6
- .Net Core 1.0
?
我喜欢 PackageReference
方法,但我不知道如何使用它。他们谈论:
<ItemGroup>
<!-- ... -->
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" />
<!-- ... -->
</ItemGroup>
- 这是否意味着通常每个 Framework/Standard/Core 我至少需要 3 个 PackageReferences?
- 当我们卡在
.Net Framework 4.6
时如何管理版本? - 我也 运行 遇到了这个问题,因为 nuget[=86,我无法 运行 一个控制台
.net core
引用.net standard
lib 的应用程序=]版本兼容性问题。
此外,我想提一下,我看到几篇文章说 .csproj
回来了,不需要 .xproj
、project.json
。就个人而言,我喜欢这个想法来像以前一样处理 .csproj
s。
上下文:
我的母语不是英语,我对重要的 nuget 用法和 .Net
Core
/Standard
开发非常陌生。
我正准备将 .Net Framework
应用程序移植到 .Net
Framework
+Standard
+Core
。
这现在只是一个 WPF 应用程序。但在未来,它打算保持相同的 WPF 应用程序,但也有一个新的 .Net Core
b运行ch,从现有逻辑中提升。
我不确切知道可能的新 .Net Core
b运行ch 的计划是什么。最有可能的是,计划是创建一个 ASP.Net Core
网站。
我确切知道的是,任务是保持逻辑 运行ning 为 .Net Framework
(使用 WPF UI)并将其实现为.Net Core
.
我决定使用 Framework
+Standard
+Core
的组合作为解决方案,因为它很简单。我的意思是这个概念很容易理解:base 类 (standard) used by 2 b运行ces (FWK, 核心)。
代码中不需要多目标或指令(条件编译)。
这意味着新的解决方案应该通过复制粘贴和修改从头开始创建。
仍然不能 100% 确定这个决定的合理性。
但问题暗示要采用这种方法:Framework
+Standard
+Core
.
我希望这个问题是合理的;我的意思是在这种情况下有效管理 nuget 包是成功的跨平台项目的良好开端。谢谢!
注意:我假设您在这里使用的是新的 SDK csproj 格式,例如:
<TargetFrameworks>netstandard1.3;net46;netcoreap1.0</TargetFrameworks>
如果您引用的东西 存在并且目标 所有与您的项目相同的平台,它应该 正常工作 。但是,除非您实际上在 Framework vs Standard vs Core 中做 不同的事情 ,否则您最好只针对 Standard,而实际上:许多库现在都在变基 netstandard2.0
作为最低限度。这对您来说可能可行,也可能不可行。
版本在 4.6 上没有任何不同,除非特定包有问题,但是:您可以通过在 <ItemGroup>
或特定 [=] 上使用 Condition
属性来解决这个问题16=] 元素。例如,我有一个针对 net461
和 netstandard2.0
的库;碰巧的是,我使用的所有东西 都已经内置到 net461 中,因此为了避免任何下游依赖,我可以这样做:
<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>
这给了我(在 nuget 中):
但是;我本可以保留一切:
<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>
它会工作得很好——只是:net461
目标会列出依赖项。我也可以列出每个目标框架完全不同的依赖项。