2017-12-14 17 views
1

TFS-Build에 /t:pack 인 너겟 패키지를 만들고 있습니다. <TargetFramework>netstandard2.0</TargetFramework>을 사용하고 있기 때문에 Nuget-Pack-Step을 사용할 수 없습니다.msbuild/t : pack Nuget-Package는 항상 동일한 버전입니다.

AssemblyVersion을 Nuget-Package에 어떻게 적용 할 수 있습니까? 내 어셈블리 버전은 맞지만 내젠 버전은 항상 1.0.0.0으로 남습니다.

참고 CSProj- 파일 대신 내 어셈블리 정보로 C#-File을 사용하고 있습니다.

어떤 가능성이 있습니까?

공유하고 싶은 분은 link입니다.

+2

https://github.com/lextm/sharpsnmplib/blob/10.0.2/SharpSnmpLib/SharpSnmpLib.csproj#L26 패키지 버전은 프로젝트의 버전 태그에서 가져온 것이므로 수정해야합니다. –

+0

csproj-file 대신 AssemblyInfo.cs를 사용하고 있습니다. 그러나 나는 그것에 상응하는 것을 찾을 수 없다. [어셈블리 : AssemblyVersion ("4.0.0.0")처럼 sth이어야합니다. – Peter

+0

"있어야"하지만 아직 없습니다. 원한다면'.nuspec'을 사용할 수 있습니다 (그 트릭을 사용하는 프로젝트를 가지고 있기 때문에). –

답변

2

MSBuild를 통합 Pack 타겟 (차례 차례로 VersionSuffix 접미사 될 수 VersionPrefix 디폴트로 Version에서 디폴트 인 것으로 특정 PackageVersion) 프로젝트 내부의 MSBuild 특성으로부터 그 값을 판독한다.

새 프로젝트 형식은 NuGet 패키지 메타 데이터를 결정하는 동일한 구성에서 이러한 어셈블리 특성을 생성하기 때문에 어셈블리 특성에서이 값을 읽는 즉시 사용할 수있는 지원이 있습니다.

그러나, 당신은 csproj의 msbuild /t:Pack 동안 내장 조립의 신원을 읽고 파일에 사용자 지정 대상을 추가하여 빌드를 확장 할 수 있습니다 :이 대상은 "전체 MSBuild에서"에서 실행됩니다

<Project> 

    <PropertyGroup> 
    <TargetFramework>netstandard2.0</TargetFramework> 
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo> 
    <GenerateNuspecDependsOn>$(GenerateNuspecDependsOn);ReadPackageVersionFromOutputAssembly</GenerateNuspecDependsOn> 
    </PropertyGroup> 

    <Target Name="ReadPackageVersionFromOutputAssembly" DependsOnTargets="Build"> 
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)"> 
     <Output TaskParameter="Assemblies" ItemName="PackAssembly" /> 
    </GetAssemblyIdentity> 
    <PropertyGroup> 
     <PackageVersion>%(PackAssembly.Version)</PackageVersion> 
    </PropertyGroup> 
    </Target> 

</Project> 

주, 즉, Windows의 경우 Visual Studio 개발자 명령 프롬프트 인 msbuild.exe이거나 Linux/Mac의 경우 mono 5.2+입니다. 현재 dotnet pack (.NET Core 버전의 MSBuild)에서는 작동하지 않습니다.

+0

고맙습니다! :)! – Peter