簡體   English   中英

當.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版本兼容性問題,我無法運行引用.net standard庫的控制台.net core應用程序時遇到了問題。

另外,我想提一下,我發現了幾篇文章,說明.csproj s又回來了,不需要.xprojproject.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個brances使用的基類( 標准 )( FWKCore )。 代碼中不需要mutitargeting或指令(條件編譯)。 暗示應該通過復制粘貼和修改從頭開始創建新解決方案。 仍然不是100%肯定這個決定的合理性。

但這個問題意味着要采取這種方法: Framework + Standard + Core


我希望這個問題是合理的; 我的意思是在這種情況下有效管理nuget包是一個成功的跨平台項目的良好開端。 謝謝!

注意:我假設你在這里使用新的SDK csproj格式,例如:

<TargetFrameworks>netstandard1.3;net46;netcoreap1.0</TargetFrameworks>

如果您引用的東西存在並且與項目的目標平台相同,那么它應該可以正常工作 但是,除非你實際上在Framework與Standard vs Core中做了一些不同的事情 ,否則你可能只是針對Standard,而實際上:許多lib現在都是針對netstandard2.0的最小值。 這對您來說可能是也可能是不可能的。

版本在4.6上沒有任何不同,除非特定包有問題,但是:您可以通過在<ItemGroup>或特定的<PackageReference>元素上使用Condition屬性來解決這個問題。 例如,我有一個目標net461netstandard2.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目標將列出依賴項。 我還可以為每個目標框架列出完全不同的依賴項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM