如何将特定PackageReference的版本分配给属性

时间:2018-06-20 10:16:35

标签: msbuild

我正在尝试获取通过PackageReference引用的特定软件包的版本,以便我可以引用其中一个软件包内的工具。我可以使用Message任务来编写版本:

<Message Importance="High" Text="@(PackageReference-&gt;%(PackageReference.Version))" Condition="'%(PackageReference.Identity)' == 'Google.Protobuf.Tools'" />

如何在属性内检索该值?

csproj的相关部分如下所示:

<ItemGroup>
  <PackageReference Include="Google.Protobuf" Version="3.5.0" />
  <PackageReference Include="Google.Protobuf.Tools" Version="3.5.0" />
  <PackageReference Include="Grpc" Version="1.8.0" />
  <PackageReference Include="Grpc.Tools" Version="1.8.0" />
</ItemGroup>

<PropertyGroup>
  <ProtobufCompiler>$(UserProfile)/.nuget/packages/Google.Protobuf.Tools/3.5.0/tools/windows_x64/protoc.exe</ProtobufCompiler>
  <GrpcCSharpPlugin>$(UserProfile)/.nuget/packages/Grpc.Tools/1.8.0/tools/windows_x64/grpc_csharp_plugin.exe</GrpcCSharpPlugin>
</PropertyGroup>

2 个答案:

答案 0 :(得分:1)

我发现我可以为此使用CreateProperty任务:

<CreateProperty Value="%(PackageReference.Version)" Condition="%(PackageReference.Identity) == 'Google.Protobuf.Tools'">
  <Output TaskParameter="Value" PropertyName="GoogleProtobufToolsVersion" />
</CreateProperty>

答案 1 :(得分:0)

最新的Grps.Tools在构建过程中调用proto编译器。

<ItemGroup>
  <PackageReference Include="Grpc.Tools" Version="2.31.0">
    <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
  </PackageReference>
</ItemGroup>

<ItemGroup>
  <Protobuf Include="my.proto" GrpcServices="None">
</Protobuf>