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に適用するにはどうすればよいですか?私のアセンブリバージョンは正しいが、私のNugetバージョンは常に1.0.0.0のままです。

注意CSProj-Fileではなく、私のアセンブリ情報にC#-Fileを使用しています。

可能性がありますか?

これを共有したいですか?link

+2

https://github.com/lextm/sharpsnmplib/blob/10.0.2/SharpSnmpLib/SharpSnmpLib.csproj#L26パッケージのバージョンはプロジェクトの「Version」タグに由来しているため、修正する必要があります。 –

+0

私はcsproj-fileの代わりにAssemblyInfo.csを使用しています。しかし、私はそれに相当するものを見つけることができません。 [アセンブリ:AssemblyVersion( "4.0.0.0"))のようにsthする必要があります。 – Peter

+0

"あるはずですが"まだありません。あなたが(私はそのトリックを使用しているプロジェクトを持っているので)望むなら、あなたは '.nuspec'を使用することができます。 –

答えて

2

MSBuildの集積Packターゲットは(順番に順番にVersionSuffixサフィックスもよいVersionPrefixにデフォルト設定されVersionからデフォルト設定され、具体的にPackageVersion)プロジェクト内のMSBuildのプロパティから値を読み出します。

新しいプロジェクト形式は、NuGetパッケージのメタデータを決定するのと同じ構成からこれらのアセンブリ属性を生成するため、この値をアセンブリ属性から読み取るための既定のサポートがあります。

ただし、msbuild /t:Pack中に組み込まれてアセンブリのIDを読み取っcsprojファイルにカスタムターゲットを追加することで、ビルドを拡張することができます。このターゲットは唯一の「フル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上でmsbuild.exe(ビジュアルスタジオ開発者コマンドプロンプト)またはlinux/Macのmono 5.2+です。これは現在、dotnet pack(MSBuildの.NETコアバージョン)では機能しません。

+0

ありがとうございます:)! – Peter

関連する問題