Tro*_*ald 2 .net c# nuget .net-core .net-standard
我有一个目前使用.NET 4.0构建并部署到Nuget的库.该库没有很多依赖项,似乎在.NET Standard和Core项目中也能很好地工作.
手动添加到标准或核心项目时,库会引发兼容性错误.通过修改.csproj文件以删除不需要的引用来解决此问题.它现在看起来像这样.
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
这似乎解决方案似乎使核心和标准的库功能正确.当手动将库添加到Standard或Core项目时,兼容性警告现在已经消失,即使该库仍使用.NET 4.0构建.但是,在发布到Nuget,然后通过Nuget下载库后,我仍然收到此警告.
"警告****包'******'使用'.NETFramework,Version = v4.6.1'而不是项目目标框架'.NETCoreApp,Version = v2.0'恢复.此包可能不是与您的项目完全兼容."
在经历了很多烦恼和调查之后,我意识到该库似乎仍然适用于标准和核心项目,但我不确定它是否使用.NET 4.6.1来实际运行基于此警告的库.
所以我的问题是,如何正确地将程序包部署到Nuget以正确定位多个运行时?我是否需要在每个运行时中构建多个项目?如果是这样,我可以将其打包为一个包仍然,或者我是否需要为每个运行时使用不同的版本?不确定这里的最佳做法是什么.
最简单的方法是更改csproj以使用新的SDK格式,并使用<TargetFrameworks>.例如,这里是Dapper的项目文件,它为3个TFM构建 - 关键是:
<TargetFrameworks>net451;netstandard1.3;netstandard2.0</TargetFrameworks>
Run Code Online (Sandbox Code Playgroud)
加之通过一些决定Condition是影响其包装或装配引用添加每个TFM属性-你可以看到这些条件的结果,在"相关性"观点上的NuGet 这里.当您dotnet pack -c Release在IDE中使用"在构建时生成NuGet包"选项(包选项卡,项目属性)构建IDE时,它将.nupkg在构建输出中为您生成,它将在内部包含3个TFM.
| 归档时间: |
|
| 查看次数: |
1157 次 |
| 最近记录: |