C# 在Visual Studio 16.6中将仅内容包导入到DotNet Core 3.1项目

C# 在Visual Studio 16.6中将仅内容包导入到DotNet Core 3.1项目,c#,visual-studio,.net-core,nuget,nuget-spec,C#,Visual Studio,.net Core,Nuget,Nuget Spec,我定义并创建了一个纯内容包,用于在不同项目之间共享JSON模式。我使用nuget.exe对其进行了打包,并成功地将其添加到.NETFramework4.6库项目中 但当我试图将其添加到DotNet Core 3.1库项目(NUnit测试)时,出现了以下错误: NU1212 Invalid project-package combination for <package name>. DotnetToolReference project style can only contain

我定义并创建了一个纯内容包,用于在不同项目之间共享JSON模式。我使用
nuget.exe
对其进行了打包,并成功地将其添加到.NETFramework4.6库项目中

但当我试图将其添加到DotNet Core 3.1库项目(NUnit测试)时,出现了以下错误:

NU1212 Invalid project-package combination for <package name>. DotnetToolReference project style can only contain references of the DotnetTool type
模式示例:

{
  "$schema": "https://json-schema.org/draft/2019-09/schema",

  "$defs": {
    "ArrayItem": {
      "type": "object"
    }
  },

  "title": "dataset object",
  "type": "object",

  "properties": {
    "Data": {
      "type": "array",
      "items": {
        "$ref": "#/$defs/ArrayItem"
      },
      "default": []
    }
  },
  "required": [ "Data" ]
}

num1212
错误确实指向了
dotnet工具安装
,它似乎不是由您的软件包直接导致的。您确定通过NuGet软件包管理器或正确添加了软件包吗?它在.NET Core 3.1库或NUnit项目类型中不可复制

正如@Perry Qian MSFT所建议的,您应该始终确保在添加新的NuGet包之前完全删除旧的NuGet包,特别是如果您没有在NuSpec中更改包的版本。一个常见的问题是使用旧的缓存包。使用以下命令之一

  • dotnet.exe中
    使用
    locals--清除所有
  • nuget.exe中
    使用
    locals-清除所有
  • 在Visual Studio>=2017中,转到工具>NuGet软件包管理器>软件包管理器设置,然后单击清除所有NuGet缓存
问题是如何创建与DotNet Core 3.1库兼容的纯内容Nuget软件包

NuGet 4.0+与
PackageReference
一起使用
contentFiles
,请参见此

内容文件包含在使用元素的包中,并在目标属性中指定内容文件夹。但是,当使用PackageReference将包安装到项目中时,这些文件将被忽略,而PackageReference使用元素

为了兼容性,您可以继续将文件复制到
content
目录,但也必须将它们复制到
contentFiles
目录。您必须确保它们位于
contentFiles\any\any\
下,否则它们将不会被提取到具有任何目标框架的项目中

<file src="JsonSchemas\*.*" target="contentFiles\any\any\JsonSchemas" />
下面是您的示例NuSpec,它适用于
contentFiles
,也适用于.NET Core 3.1

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>Package.JsonSchemas</id>
        <version>0.0.1</version>
        <authors>me</authors>
        <owners>me</owners>
        <releaseNotes>Fill in later</releaseNotes>
        <description>Set of JSON schemas.</description>
        <tags>json, json-schema, tdv</tags>
        <contentFiles>
            <files include="any\any\JsonSchemas\*.json" buildAction="Content" copyToOutput="true" flatten="false" />
        </contentFiles>
    </metadata>
    <files>
        <file src="JsonSchemas\*.*" target="content\JsonSchemas" />
        <file src="JsonSchemas\*.*" target="contentFiles\any\any\JsonSchemas" />
    </files>
</package>

Package.JsonSchemas
0.0.1
在链接后,建议不要显式指定依赖项类型以实现向后兼容性,因此我将其忽略

包类型在.nuspec文件中设置。对于向后兼容性,最好不要显式地设置依赖项类型,而是在没有指定类型时依赖NuGet(假定为该类型)


num1212
错误确实指向了
dotnet工具安装
,它似乎不是由您的软件包直接导致的。您确定通过NuGet软件包管理器或正确添加了软件包吗?它在.NET Core 3.1库或NUnit项目类型中不可复制

正如@Perry Qian MSFT所建议的,您应该始终确保在添加新的NuGet包之前完全删除旧的NuGet包,特别是如果您没有在NuSpec中更改包的版本。一个常见的问题是使用旧的缓存包。使用以下命令之一

  • dotnet.exe中
    使用
    locals--清除所有
  • nuget.exe中
    使用
    locals-清除所有
  • 在Visual Studio>=2017中,转到工具>NuGet软件包管理器>软件包管理器设置,然后单击清除所有NuGet缓存
问题是如何创建与DotNet Core 3.1库兼容的纯内容Nuget软件包

NuGet 4.0+与
PackageReference
一起使用
contentFiles
,请参见此

内容文件包含在使用元素的包中,并在目标属性中指定内容文件夹。但是,当使用PackageReference将包安装到项目中时,这些文件将被忽略,而PackageReference使用元素

为了兼容性,您可以继续将文件复制到
content
目录,但也必须将它们复制到
contentFiles
目录。您必须确保它们位于
contentFiles\any\any\
下,否则它们将不会被提取到具有任何目标框架的项目中

<file src="JsonSchemas\*.*" target="contentFiles\any\any\JsonSchemas" />
下面是您的示例NuSpec,它适用于
contentFiles
,也适用于.NET Core 3.1

<?xml version="1.0"?>
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
    <metadata>
        <id>Package.JsonSchemas</id>
        <version>0.0.1</version>
        <authors>me</authors>
        <owners>me</owners>
        <releaseNotes>Fill in later</releaseNotes>
        <description>Set of JSON schemas.</description>
        <tags>json, json-schema, tdv</tags>
        <contentFiles>
            <files include="any\any\JsonSchemas\*.json" buildAction="Content" copyToOutput="true" flatten="false" />
        </contentFiles>
    </metadata>
    <files>
        <file src="JsonSchemas\*.*" target="content\JsonSchemas" />
        <file src="JsonSchemas\*.*" target="contentFiles\any\any\JsonSchemas" />
    </files>
</package>

Package.JsonSchemas
0.0.1
在链接后,建议不要显式指定依赖项类型以实现向后兼容性,因此我将其忽略

包类型在.nuspec文件中设置。对于向后兼容性,最好不要显式地设置依赖项类型,而是在没有指定类型时依赖NuGet(假定为该类型)


请在您的nuspec文件中使用它们:
您好,有关于此问题的更新吗?如果那家伙的回答能帮助你解决这个问题,请不要忘记标记:)嗨@PerryQian MSFT,我按照你和那家伙的建议做了。我甚至只是从那个家伙的答案中复制并粘贴了nuspec定义,但在VisualStudio(现在是16.7)中仍然会收到相同的错误消息。还有两个建议:首先尝试使用最新版本打包项目。第二,在安装项目的新版本之前,您应该确保您的项目已经从中删除--执行一个干净的步骤。然后,.是的,谢谢,首先清除所有Nuget缓存,然后重新安装帮助包。请在您的nuspec文件中使用它们:
您好,有关于此问题的更新吗?如果那家伙的回答能帮助你解决这个问题,请不要忘记标记:)嗨@PerryQian MSFT,我按照你和那家伙的建议做了。我甚至只是从那个家伙的答案中复制并粘贴了nuspec定义,我仍然在VisualStudio(现在是16.7)中收到相同的错误消息