我将配置文件259的PCL更新为.NET Standard 1.0,并希望相应地更新相应的NuGet包。我将包含实际DLL的文件夹从portable-net45+win8+wp8+wpa81
更改为netstandard1.0
,,但我不太确定如何构建软件包的依赖关系。
如果我使用.NET Core CLI创建一个包(dotnet pack
),那么nuspec文件中的dependencies部分就是这样的:
<dependencies>
<group targetFramework="netstandard1.0">
<dependency id="NETStandard.Library" version="1.6.0" />
</group>
</dependencies>
但是,当我将此软件包安装到仍使用packages.config的经典.NET 4.5或PCL项目时,此文件会被污染&#34;来自NETStandard.Library
元数据包的所有依赖项,如下所示:
不幸的是,用于.NET Core / .NET Standard的NuGet包的official documentation尚未编写。
答案 0 :(得分:4)
对于我维护的同时针对.NET Core和.NET 4.5的软件包,我必须解决这个问题。我使用的方法涉及你问题的两个方面:
netstandard1.X
和net45
之间拆分依赖关系。最初,使用NETStandard.Library
元数据包来轻松定位前者。NETStandard.Library
替换为我实际需要的特定包的引用。在第一步中,我的project.json看起来像这样:
{
"dependencies": {
"MyOtherLibrary": "1.0.0"
},
"frameworks": {
"net45": {
"frameworkAssemblies": {
"System.Collections":"4.0.0.0"
}
},
"netstandard1.3": {
"dependencies": {
"NETStandard.Library": "1.6.0"
}
}
}
}
任何本身已与这两个框架兼容的依赖项都在dependencies
中,而特定的.NET Core或.NET 4.5依赖项会根据需要放在各自的部分中。
使用dotnet pack
,这正是我所需要的:一个.nupkg
可以安装在任一类型的项目中,只提供它对该框架所需的内容。
在第二步中,我将NETStandard.Library
替换为.NET Core实际需要的几个包:
{
"dependencies": {
"MyOtherLibrary": "1.0.0"
},
"frameworks": {
"net45": {
"frameworkAssemblies": {
"System.Collections":"4.0.0.0"
}
},
"netstandard1.3": {
"dependencies": {
"System.Threading.Tasks": "4.0.11",
"System.Net.Http": "4.1.0"
}
}
}
}
这第二步并不是必需的,但是为两个平台生成一个具有最小依赖性的包是很好的。 NETStandard.Library
在开发阶段很有用,因为您不太确定在核心API中需要使用的内容。