我正在创建一个NuGet程序包,其中包含一个.Net Standard DLL和一个配置文件。该项目应该同时支持.Net Core和.Net Framework。
简而言之,使用dotnet pack
和 .nuspec 文件打包此DLL和配置文件,将创建一个与.Net Core不“完全兼容”的程序包:>
更多详细信息在这里:
在项目 .csproj 中,我添加了 .nuspec 文件参考:
<NuspecFile>.\MyProject.nuspec</NuspecFile>
在其旁边有以下 .nuspec 文件:
<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<metadata>
<id>MyProject</id>
<version>1.0.0</version>
<authors> </authors>
<description>some text</description>
</metadata>
<files>
<file src="MyProject.targets" target="Build\"/>
<file src="NLog.config" target="Build\" />
<file src="bin/Release/MyProject.dll" target="lib\dotnet"/>
</files>
<dependencies>
<dependency id="newtonsoft.json" version="11.0.2" />
<dependency id="nlog" version="4.5.10" />
</dependencies>
</package>
然后在这两个旁边,我有一个 .targets 文件:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="NLog.config">
<Link>NLog.config</Link>
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
我正在VSTS中使用dotnet pack
命令将此文件打包到nuget程序包中,并为它提供了我 .csproj 文件的路径。
我正在尝试执行这种复杂的方法,因为我希望将NLog.config自动包含在安装此软件包的项目中,并将此配置文件属性 Copy to Output Directory 设置为始终复制,该方法取自here和here,但目前尚不可行。
作为旁注,我尝试使用dotnet pack
并为它提供 .nuspec 文件的路径之前,我说的是相同的行为,但是当我将路径更改为 .csproj 。
是否有人知道为什么在使用 .nuspec 文件打包该软件包时,在使用此软件包的.Net Core客户端中出现此警告?
非常感谢您的耐心和帮助!
答案 0 :(得分:0)
根据https://docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworks和https://docs.microsoft.com/en-us/nuget/reference/target-frameworks#supported-frameworks,nuget包中的文件夹结构应该为\lib\netstandard1.6
或\lib\netstandard2.0
或您针对其编译的任何版本(因为pinkfloydx33已经尝试指向出来)。 \lib\dotnet
已过时(https://docs.microsoft.com/en-us/nuget/reference/target-frameworks#deprecated-frameworks),我不知道是否已删除对其的支持。
我尚未对此进行测试,因此,如果同时没有解决问题,可以尝试一下。
另一种取得进展的方法是检查并比较实际生成的软件包(使用nuspec和不使用nuspec)。