로컬 / 내부 NuGet 리포지토리 를 실행하고 싶습니다 . NuGet을 사용하여 더미 프로젝트에 기존 NuGet 패키지를 포함하고 패키지 파일을 스캔하여 로컬에서 캐시 된 .nupkg
파일 을 가져옴으로써 기존 NuGet 패키지를 “재사용”하는 방법을 알아 냈다고 생각 하지만 …
NuGet을 통해 .nupkg
가져온 종속성뿐만 아니라 모든 dll
종속성을 자동으로 포함하여 프로젝트에서 nuget 패키지 ( )를 어떻게 생성 합니까?
구체적으로 특별히:
- 솔루션 만들기
- 새 프로젝트 추가
- 다양한
.dll
파일 / 기타 프로젝트에 대한 참조 추가 <-이것은 누락 된 부분입니다. - 패키지 관리자 / cmdline / 무엇이든을 통해 NuGet 패키지 추가
- 뭔가 자동으로 생성
.nupkg
내가 찾은 것에서 당신은
- 종속성을 포함하도록
.csproj
파일을 수동으로 편집하십시오.<BuildPackage>true</BuildPackage>
- 수동으로
.nuspec
파일을 만들고 종속성을 수동으로 나열합니다 ( 유사? ). - 파일
nuget pack
에서 수동으로 실행.nuspec
그러나 모든 것이 수동이며 어리 석습니다. 반자동 솔루션조차도 여전히 어색하거나 반 수동입니다.
.nuspec
템플릿 만들기 -종속성을 포함하지 않고 메타 데이터 만 포함하는 것 같습니다.-
모든 프로젝트에 수동으로 추가해야하는 빌드 이벤트 (단계 # 5) 를 통한 너겟 팩 에는 고유 한 단점이 있습니다 .
"$(SolutionDir).nuget\NuGet.exe" pack "$(ProjectPath)" -Properties Configuration=Release move /Y *.nupkg "$(TargetDir)"
.nuspec
프로젝트 참조에서 매니페스트 를 자동으로 생성하는 것에 만족할 것입니다 . 그런 다음 이론적으로 + 너겟 빌드 이벤트를 빌드 프로젝트 / 너겟 패키지로 롤업 할 수 있습니다. 이것이 제가 정말로보고 싶은 것입니다.
답변
포인트 # 3 ( 다양한 .dll 파일 / 다른 프로젝트에 대한 참조 추가 <-이것은 누락 된 부분 )에는 실제로 두 가지 다른 문제가 있습니다. (1) 다양한 dll 파일에 대한 참조를 추가하고 (2) 다른 프로젝트에 대한 참조를 추가합니다. 동일한 솔루션.
여기 번호 (2)는 NuGet 2.5부터 일부 추가 지원을 받았습니다 . 프로젝트에 대한 NuGet 패키지를 만들 때 동일한 솔루션의 다른 프로젝트에 대한 참조를 포함하는 옵션을 추가 할 수 있습니다.
nuget pack projectfile.csproj -IncludeReferencedProjects
projectfile.csproj
NuGet 패키지로도 노출되는 솔루션의 다른 프로젝트를 참조하는 경우 이러한 프로젝트의 NuGet 패키지가 종속성으로 추가됩니다. NuGet 패키지로 자신을 노출 하지 않는 솔루션의 프로젝트를 참조하는 경우 해당 dll이이 NuGet 패키지에 포함됩니다.
(1)의 경우 NuGet 패키지로 사용할 수없는 dll을 프로젝트에 자주 추가하는 경우 이러한 파일로 고유 한 (내부) NuGet 패키지를 만들 수 있습니다. 그런 다음 이러한 dll을 파일 대신 NuGet 패키지로 추가하면이 NuGet 패키지는 프로젝트의 NuGet 패키지에서 종속성이됩니다.
답변
다른 Google 직원의 경우 NuGet.targets 파일을 사용하여 NuGet Pack을 실행하는 경우 다음을 사용할 수 있습니다.
<Target Name="PrePackage" BeforeTargets="BuildPackage">
<PropertyGroup>
<BuildCommand>$(BuildCommand) -IncludeReferencedProjects</BuildCommand>
</PropertyGroup>
</Target>
답변
이것 좀 봐!
내가 찾은 솔루션은 Visual Studio의 확장입니다 :
https://visualstudiogallery.msdn.microsoft.com/fbe9b9b8-34ae-47b5-a751-cb71a16f7e96/view/Reviews
Nuget Package NuGet Package 라는 새 프로젝트를 추가하기 만하면됩니다.
그런 다음 흥미로운 프로젝트를 참조 및 BOOOM에 추가합니다! 모든 종속성 및 파일 디렉토리가 자동으로 추가됩니다. NuSpec 데이터를 수정하려면 프로젝트에서 마우스 오른쪽 버튼을 클릭하고 속성으로 이동 한 다음 원하는 항목을 수정합니다. 생성 된 NuSpec 및 nupkg는 새 프로젝트의 obj 폴더 에 있습니다. 나는 그것이 도움이되기를 바랍니다;).
답변
이 주제에 대해 잘 작성된 기사를 찾았습니다. 종속성 계층 구조가있는 특정 패키지에 대해 동일한 문제가 있으며 지금까지 각각을 별도의 NuGet 패키지로 업로드했습니다 (무슨 시간 낭비)
방금 여기에서 찾은 솔루션을 테스트했습니다. https://dev.to/wabbbit/include-both-nuget-package-references-and-project-reference-dll-using-dotnet-pack-2d8p
그리고 NuGet 패키지 탐색기를 사용하여 NuGet 패키지를 검사 한 후 참조 된 프로젝트에서 생성 된 DLL이 실제로 존재합니다. 이 패키지를 실제로 NuGet에 제출하고 테스트하여 테스트하겠습니다.
도움이되는 경우를 대비 한 내 소스는 다음과 같습니다. https://github.com/jchristn/NuGetPackTest
그리고 테스트 NuGet 패키지 : https://www.nuget.org/packages/NuGetPackTest/1.0.0
솔루션이 잘 작동하는 것 같습니다. 참조 레이어가있을 때 어떤 모습 일지 모르겠습니다. 정말 털이 많고 빨라질 수 있다고 확신합니다.
프로젝트 TestLibrary를 참조하는 NuGetPackTest 라이브러리의 .csproj (간결성을 위해 일부 제거됨)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>netstandard2.0;netcoreapp3.0;netcoreapp3.1;net461</TargetFrameworks>
...
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<!-- added this line -->
<TargetsForTfmSpecificBuildOutput>$(TargetsForTfmSpecificBuildOutput);CopyProjectReferencesToPackage</TargetsForTfmSpecificBuildOutput>
</PropertyGroup>
<ItemGroup>
<!-- modified this ProjectReference to include the children ReferenceOutputAssembly and IncludeAssets -->
<ProjectReference Include="..\TestLibrary\TestLibrary.csproj">
<ReferenceOutputAssembly>true</ReferenceOutputAssembly>
<IncludeAssets>TestLibrary.dll</IncludeAssets>
</ProjectReference>
</ItemGroup>
<!-- added this section -->
<Target DependsOnTargets="ResolveReferences" Name="CopyProjectReferencesToPackage">
<ItemGroup>
<BuildOutputInPackage Include="@(ReferenceCopyLocalPaths->WithMetadataValue('ReferenceSourceTarget', 'ProjectReference'))"/>
</ItemGroup>
</Target>
</Project>