C# 在Visual Studio 16.6中将仅内容包导入到DotNet Core 3.1项目
我定义并创建了一个纯内容包,用于在不同项目之间共享JSON模式。我使用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
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缓存
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)中收到相同的错误消息