【问题标题】:dotnet pack creates package that is not compatible with .Net Core project when using nuspec filedotnet pack 使用 nuspec 文件时创建的包与 .Net Core 项目不兼容
【发布时间】:2019-03-02 15:17:48
【问题描述】:

我正在创建一个 NuGet 包,其中包含一个 .Net 标准 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 自动包含到安装此软件包的项目中,并将此配置文件属性 复制到输出目录 设置为 始终复制,取自herehere 的方法,但目前还不行。

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

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

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

【问题讨论】:

  • 东西应该放在 \lib\NetStandard16(或类似的)文件夹中。正如您的 nuspec 中定义的那样,您只是在为 netcore 放置东西。 Visual Studio 后退并给你这个警告作为权宜之计,直到每个人都更新
  • 1) 出于好奇,您为什么在 csproj 文件中使用 nuspec 文件而不是 NuGet metadata properties? 2) NuGet 不会为 .NET Core 自动安装文件(据我所知)。我的理解是 NuGet 已经放弃了对 .NET 核心的支持
  • @willwolfram18 我使用了 NuGet 元数据属性,但此警告消失了,一切正常,并且 NLog.config 文件已正确安装在客户端项目中,唯一的例外是未设置到Copy always到输出目录。
  • @pinkfloydx33 因为我阅读了this topic here,所以我尝试遵循它建议的相同结构,但没有结果。我只为 .Net Standard 放置东西,以便它们可以安装在 .Net Core 和 .Net Framework 客户端上。

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


【解决方案1】:

根据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)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    • 2019-04-27
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    相关资源
    最近更新 更多