C# 多框架.NET核心库(VS2015更新3)
我试图使用VS2015 Update 3创建一个简单的.NET核心库,但我发现很难找到有关某些细节的最新文档 此库应该由.NET核心库和传统的“完整的”.NET 4.6.2库和/或桌面应用程序(控制台/WPF)使用 为此,库的project.json的相关部分如下所示:C# 多框架.NET核心库(VS2015更新3),c#,.net,nuget,C#,.net,Nuget,我试图使用VS2015 Update 3创建一个简单的.NET核心库,但我发现很难找到有关某些细节的最新文档 此库应该由.NET核心库和传统的“完整的”.NET 4.6.2库和/或桌面应用程序(控制台/WPF)使用 为此,库的project.json的相关部分如下所示: "dependencies": { "NETStandard.Library": "1.6.0" }, "frameworks": { "netstandard1.5": { "imports": [ "dnxc
"dependencies": {
"NETStandard.Library": "1.6.0"
},
"frameworks": {
"netstandard1.5": {
"imports": [ "dnxcore50", "dotnet4.6.2" ]
},
"net462": {
"frameworkAssemblies": {
"System.Xml": "4.0.0.0",
"System.Xml.Linq": "4.0.0.0"
}
}
在这里,我将netstandard
从1.6降级到1.5,以考虑到.NET 4.6.2的兼容性,并且(这可能是可以避免的)将dotnet4.6.2添加到imports
好了,要使用这个库,我基本上有以下选择:
- 我可以在同一个解决方案中直接引用whithin的项目,例如,在创建用于测试的.NET核心库时(例如,对于xUnit测试库,请参阅)
- 我可以将库打包到一个NuGet中,将其添加到本地NuGet提要()中,然后将其作为任何其他NuGet包使用。要打包库,我只需在
的同一目录下键入project.json
;然后,我可以将生成的包安装到本地提要中,并使用它dotnetpack
net462
指定为框架,当我尝试导入生成的包时,似乎也会收到一个错误,告诉我:
Package ... is not compatible with net462 (.NETFramework,Version=v4.6.2). Package ... supports: netstandard1.6 (.NETStandard,Version=v1.6)
One or more packages are incompatible with .NETFramework,Version=v4.6.2.
然而,我的软件包似乎正确地列出了其nuspec中的组(我可以将生成的.nupkg重命名为.zip并检查其内容),例如:
因此,我想我在创建库或其包时遗漏了一些东西。我知道这一切都很新,但有人能证实或纠正我上面的假设,并解释我如何从多个平台使用.NET Core库吗?对于我自己的库(),几天前我对.NET标准进行了“移植”,最后提供了两个NuGet包(一个用于.NET 4.x,一个用于.NET Core)。另一方面,如果你的解决方案有效,它看起来会更优雅。我可能已经找到了一个解决方案:似乎即使我删除并重新创建了本地NuGet提要,缓存中的某个地方也留下了一些东西,因此我对.NET核心库所做的更改不会被用户代码发现。我增加了我修改过的库的版本号,它成功了。尽管如此,在这个新环境中的任何其他经验或建议都是受欢迎的。我必须补充一点,根据我的发现,从另一个.NET核心库中引用一个.NET核心库用于在同一解决方案中测试它并不总是有效的。特别是当被测试的库导入其他类似库的包时,我无法编译,就好像我什么都没有导入一样。然而,导入是正确的。试图直接从bin文件夹导入DLL,但没有任何更改。
<dependencies>
<group targetFramework=".NETFramework4.6.2">
<dependency id="NETStandard.Library" version="[1.6.0, )" />
</group>
<group targetFramework=".NETStandard1.5">
<dependency id="NETStandard.Library" version="[1.6.0, )" />
</group>
</dependencies>
<frameworkAssemblies>
<frameworkAssembly assemblyName="System.Xml" targetFramework=".NETFramework4.6.2" />
<frameworkAssembly assemblyName="System.Xml.Linq" targetFramework=".NETFramework4.6.2" />
</frameworkAssemblies>