2017-10-31 6 views
0

Visual Studio 2017에서 새로운 CSProj 형식을 사용하여 CreateLocalPackages이라는 새 구성을 처리 할 대상 파일을 작성했습니다. 이 패키지는 특정 로컬 폴더에 NuGet 패키지를 만들고 해당 폴더의 솔루션 패키지 중 가장 높은 번호보다 하나 높은 버전 번호를 자동으로 증가시킵니다.NuGet 패키지 종속성에 올바른 버전이 나열되도록 빌드 별 버전 번호를 설정하는 방법

내 솔루션에는 여러 프로젝트가 있고 각각은 NuGet 패키지를 만들고 일부는 솔루션의 다른 프로젝트에 종속됩니다. 로컬 패키지 디렉토리에이 파일이 예를 들어

:

BaseLibrary.2.1.0.1-betalocal.nupkg 
BaseLibrary.2.1.0.1-betalocal.symbols.nupkg 
BaseLibrary.Specialized.2.1.0.1-betalocal.nupkg 
BaseLibrary.Specialized.2.1.0.1-betalocal.symbols.nupkg 

그것은 CreateLocalPackages 구성 깨끗하게 지어진 그 다음에이 패키지를 만들도록 선택할 것입니다 : 내가 가진

BaseLibrary.2.1.0.2-betalocal.nupkg 
BaseLibrary.2.1.0.2-betalocal.symbols.nupkg 
BaseLibrary.Specialized.2.1.0.2-betalocal.nupkg 
BaseLibrary.Specialized.2.1.0.2-betalocal.symbols.nupkg 

Visual Studio에서 BaseLibrary\BaseLibrary.Specialized\obj\project.assets.json 파일을 만들어 MSBuild 대상에 연결하고 $ (Version)을 2.1.0.2으로 변경하여를 일으키는 것을 제외하고는이 작업이 훌륭했습니다.대신이 종속성을 참조하십시오 : BaseLibrary.2.1.0-betalocal. Visual Studio는 MSBuild를 호출하여 프로젝트를 빌드하기 전에 NuGet 복원 단계에서 project.assets.json을 생성합니다.

내가 일찍 Restore 대상 체인에서 전화를받을하기 위해 내 버전 번호 로직 BeforeTargets="CollectPackageReferences;_ComputeTargetFrameworkItems"를 실행 시도하지만 NuGet 패키지 참조를 복원 (그리고 project.assets.json을 생성)하기 위해 MSBuild /t:Restore를 호출 비주얼 스튜디오처럼 보이지 않는다. 자체 논리가 있는지 또는 다른 도구를 호출하는지는 알 수 없습니다.

나는 단지 VS에게 Rebuild하도록 말하고, 새로운 버전을 알아 내고, 빌드하고, 모든 의존성 버전을 나열한 패키지를 작성할 수 있기를 바랍니다.

답변

1

NuGet 패키지 의존성 난 당신이 올바른 이해한다면

, 당신은 버전 번호 로직 목표를 호출 할 올바른 버전을 나열 그래서 나는 projectReference에 대한 빌드 별 버전 번호를 설정하려면 어떻게 CreateLocalPackages VS/MSBuild 전에 Restore 대상.

당신은 목표 전에 MSBuild에서의 코드를 따라 _GenerateRestoreProjectSpec 복원 또는 실행되는 MSBuild에서 대상을 추가 할 수 있습니다 * csproj 파일 :.

<Target Name="VersionNumberLogicBeforeRestore" 
      BeforeTargets="Restore"> 
    <Message Text="Version Number Logic Before Restore!" Importance="high" /> 
    </Target> 

또는 그러나

<Target Name="VersionNumberLogicBeforeRestore" 
      BeforeTargets="_GenerateRestoreProjectSpec"> 
    <Message Text="Version Number Logic Before Restore!" Importance="high" /> 
    </Target> 

이 만 Visual Studio가 아닌 dotnet cli에서 작동합니다. 여전히이.에서 그렇지 15.5 취하면

dotnet restore "xx.csproj" 

게다가, NuGet 복원 변화는 15.4의 일부가 될 것입니다.

자세한 내용은 Add support for pre restore MSBuild target that Visual Studio triggers을 참조하십시오.

그래서이 시점에서 우리는 Restore보다 먼저 버전 번호 로직 타겟을 호출하기 위해 dotnet cli를 사용해야하고 dotnet cli를 사용하여 프로젝트를 빌드 할 수 있습니다.

+0

'CreateLocalPackages' 구성에 버전 번호 로직 만 있으므로 디버그 또는 릴리스 구성 (즉, 일반 변경, 빌드, 실행, 디버그 개발주기)의 각 빌드가 버전을 증가시키지 않으므로 패키지를 만듭니다. 특정 구성을 사용하도록'dotnet restore '를 어떻게 말할 수 있습니까? NuGet는 이제 여러 .NET 프레임 워크 버전, 지원되지 않는 여러 구성을 지원하기 때문에 –

+0

@JeremyMorton은, 내 지식, 우리는 특정 구성을 사용하는'DOTNET의 restore'을 말할 수 없습니다. https://stackoverflow.com/questions/45635618/nuget-with-build-configurations/45667723#45667723 –