서로 다른 프로젝트간에 JSON 스키마를 공유하기 위해 콘텐츠 전용 패키지를 정의하고 만들었습니다. 을 사용하여 패키지화했으며 nuget.exe
.Net Framework 4.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
Nuget 지원 문서 ( 패키지 유형 , 콘텐츠 파일 )에는 콘텐츠 전용 패키지에 대한 제한 사항 ( "호환된다고 가정하는"것 이상)이 나열되어 있지 않습니다. 질문은 DotNet Core 3.1 라이브러리 호환 콘텐츠 전용 Nuget 패키지를 어떻게 생성합니까?
이 질문 에서 제안한 것처럼 로컬 데이터 소스를 제외한 모든 데이터 소스를 비활성화하려고 시도했지만 아무런 차이가 없습니다.
다음은 .nuspec
파일 내용입니다.
<?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>
<packageTypes>
<packageType name="Dependency" />
</packageTypes>
<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="JsonSchemas\*.json" buildAction="Content" copyToOutput="true" flatten="false" />
</contentFiles>
</metadata>
<files>
<file src="JsonSchemas\*.*" target="content\JsonSchemas" />
</files>
</package>
스키마 예 :
{
"$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" ]
}
NU1212
오류에 지점을하지 dotnet tool install
, 직접 패키지에 의해 야기 될 것 같지 않습니다. NuGet 패키지 관리자 또는 콘솔을 통해 패키지를 올바르게 추가하고 있습니까? .NET Core 3.1 라이브러리 또는 NUnit 프로젝트 유형에서는 재현 할 수 없습니다.
@Perry Qian-MSFT가 제안했듯이, 특히 NuSpec에서 패키지 버전을 변경하지 않은 경우 새 패키지를 추가하기 전에 항상 이전 NuGet 패키지가 완전히 제거되었는지 확인해야합니다. 캐시 된 이전 패키지가 대신 사용되는 것은 일반적인 문제입니다. 모든 NuGet 패키지 캐시 를 지우 려면 다음 명령 중 하나를 사용하십시오.
dotnet.exe
사용locals --clear all
nuget.exe
사용locals -clear all
질문은 DotNet Core 3.1 라이브러리 호환 콘텐츠 전용 Nuget 패키지를 어떻게 생성합니까?
NuGet 4.0와 PackageReference
용도는 contentFiles
이 참조 참조 .
콘텐츠 파일은 요소를 사용하여 패키지에 포함되며 대상 속성에 콘텐츠 폴더를 지정합니다. 그러나 패키지가 대신 요소를 사용하는 PackageReference를 사용하여 프로젝트에 설치된 경우 이러한 파일은 무시 됩니다 .
content
호환성을 위해 파일을 디렉토리에 계속 복사 할 수 있지만 contentFiles
디렉토리에도 복사해야합니다 . 아래에 있는지 확인해야합니다 contentFiles\any\any\
. 그렇지 않으면 대상 프레임 워크가있는 프로젝트로 추출되지 않습니다.
<file src="JsonSchemas\*.*" target="contentFiles\any\any\JsonSchemas" />
패키지 내의 경로는 아래에 제공되므로 첫 번째 경로 세그먼트는 코드 언어를 나타내고 두 번째는 대상 프레임 워크 모니 커를 나타냅니다. 당신은 any
boh 케이스에서 사용해야 합니다.
/contentFiles/{codeLanguage}/{TxM}
아래는 contentFiles
.NET Core 3.1에서도 작동하는 NuSpec 샘플 입니다.
<?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>
링크 한 동일한 소스 에서 이전 버전과의 호환성을 위해 종속성 유형을 명시 적으로 지정하지 않는 것이 좋습니다. 따라서 생략했습니다.
패키지 유형은 .nuspec 파일에서 설정됩니다. 이전 버전과의 호환성을 위해서는 종속성 형식을 명시 적으로 설정 하지 않고 형식이 지정되지 않은 경우이 형식을 가정하여 NuGet에 의존하는 것이 가장 좋습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다