![](/img/trans.png)
[英]Making Framework (not Core, not Standard) NuGet packages with VS2017
[英]Manage nuget packages with PackageReferences when .Net Framework+Standard+Core combined
題:
如何在3個平台的VisualStudio2017
解決方案中管理nuget包:
?
我喜歡PackageReference
方法,但我不知道如何使用它。 他們談論:
<ItemGroup>
<!-- ... -->
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0" />
<!-- ... -->
</ItemGroup>
.Net Framework 4.6
時如何管理版本? .net standard
庫的控制台.net core
應用程序時遇到了問題。 另外,我想提一下,我發現了幾篇文章,說明.csproj
s又回來了,不需要.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個brances使用的基類( 標准 )( FWK , Core )。 代碼中不需要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
屬性來解決這個問題。 例如,我有一個目標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
目標將列出依賴項。 我還可以為每個目標框架列出完全不同的依賴項。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.