当使用nuspec文件时,dotnet包会创建与.Net Core项目不兼容的软件包

时间:2018-09-26 19:10:57

标签: c# .net .net-core nuget package

我正在创建一个NuGet程序包,其中包含一个.Net Standard DLL和一个配置文件。该项目应该同时支持.Net Core和.Net Framework。

简而言之,使用dotnet pack .nuspec 文件打包此DLL和配置文件,将创建一个与.Net Core不“完全兼容”的程序包:

enter image description here

更多详细信息在这里:

在项目 .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 设置为始终复制,该方法取自herehere,但目前尚不可行。

作为旁注,我尝试使用dotnet pack并为它提供 .nuspec 文件的路径之前,我说的是相同的行为,但是当我将路径更改为 .csproj

是否有人知道为什么在使用 .nuspec 文件打包该软件包时,在使用此软件包的.Net Core客户端中出现此警告?

非常感谢您的耐心和帮助!

1 个答案:

答案 0 :(得分:0)

根据https://docs.microsoft.com/en-us/nuget/create-packages/supporting-multiple-target-frameworkshttps://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)。