2017-11-24 16 views
0

라이브러리를 개발 중이며 여러 버전의 .NET Framework 용 NuGet 패키지를 만들고 싶습니다. 이 작업을 수행 할 전체 목록이있는 기사를 찾지 못했습니다.여러 .NET Framework 버전 용 NuGet 패키지 만들기

내가 시도한 첫 번째 옵션은 Release_Net45와 같은 구성 집합을 만드는 것입니다. 그런 다음 csproj를 편집하여 출력 디렉토리 (lib/net45 등)를 수정하고 각 구성에 대한 타겟 프레임 워크 버전을 수정했습니다. 그런 다음 각 구성을 구축했습니다. 그 후 나는 nuget 팩을 실행했고 패키지는 이미 패키지에 들어 있기 때문에 하나의 dll이 추가되지 않았다는 경고와 함께 성공적으로 생성되었습니다 ...

그런 다음 패키지의 TargetFrameworks 요소와 요소를 포함하도록 csproj를 편집하려고했습니다 메타 데이터를 Release 구성에 해당하는 PropertyGroup에 추가합니다. 편집 후 프로젝트를 다시로드하면 솔루션 탐색기에 종속성이라는 새 그룹이 나타납니다. msbuild/t : pack/p : Configuration = Release in Developer Command Prompt를 사용하여 패키지를 만들려고했지만 패키지 대상이 없다는 오류로 끝났습니다. 이를 수정하기 위해 NuGet.Build.Tasks.Pack 패키지를 추가 한 다음 패키지가 빌드되었습니다. 그러나 구성 관리자에서 구성을 보았을 때 갑자기 구성이 손상되었습니다.

내가 여러 대상 프레임 워크에 대한 패키지를 설정하는 등 고통스러운 :(이 작업을 수행하는 올바른 방법은 무엇입니까 될 것으로 기대하지 않았다?이 작업에 대한 완전한 가이드가 있습니까?

답변

1

TargetFramework/TargetFrameworks 속성은 SDK 기반 프로젝트에서만 지원되며 현재 .NET Standard, .NET Core 및 ASP.NET Core 프로젝트 용 프로젝트 템플릿 만이 SDK 기반 프로젝트 형식을 사용하므로 .NET 표준 라이브러리를 만든 다음 편집 할 수 있습니다 csproj (프로젝트에서 오른쪽 클릭> 편집)

최소 예는 다음과 같습니다.

<Project Sdk="Microsoft.NET.Sdk"> 
    <PropertyGroup> 
    <TargetFrameworks>net45;net461</TargetFrameworks> 
    </PropertyGroup> 
</Project> 

많은 기본값과 추가 빌드 논리를 제공하는 Sdk 특성이 있음을 확인할 수 있습니다. 폴더 구조에서 .cs 파일을 지정할 필요가 없으며 프로젝트의 속성 페이지를 사용하여 NuGet 관련 속성을 설정할 수 있습니다.

VS 2017이 .NET 프로젝트를위한 두 개의 별개의 프로젝트 시스템과 함께 제공되기 때문에 종속성 노드가 표시되는 이유는 오랜 시간 동안 VS에 ​​있었고 새로운 것이 새 프로젝트에서 개발 되었기 때문입니다 기존 프로젝트 시스템의 모든 기능을 아직 지원하지는 않지만 새로운 의존성 모델, NuGet의 속성 페이지 및 프로젝트가로드되는 동안 프로젝트 파일 편집 지원과 같은 추가 기능이있는 프로젝트 시스템 모델 (CPS) 로드 할 프로젝트 시스템을 선택하려면 프로젝트 파일에 TargetFramework 또는 TargetFrameworks이 있는지 여부를 기준으로합니다.

+0

설명해 주셔서 감사합니다. 그렇다면 여러 대상 프레임 워크에 맞게 .NET Framework 용 프로젝트를 설정하는 올바른 방법은 무엇입니까? – Maxim

+0

현재 공개적으로 문서화 된 것은 없습니다. 게시 한 코드를'xyz.csproj' 파일에 복사하고 Visual Studio에서 열어서 얻을 수 있습니다. 고전적인 csproj에서 sdk 기반 csproj 로의 마이그레이션에 대한 좋은 마이그레이션 스토리도 없습니다. 대부분 csproj 파일을 손으로 편집하고 (무엇을해야 할지를 아는 것이 두렵습니다). –

+0

하지만 실제로 잘 작동합니다. Newtonsoft.Json도이 접근 방식을 사용하고 있으며 심지어 사용자 지정 논리를 사용하여 이식 가능한 클래스 라이브러리를 구축 할 수도 있습니다. –