首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >检索msbuild中的nupkg版本号

检索msbuild中的nupkg版本号
EN

Stack Overflow用户
提问于 2017-05-09 08:07:53
回答 2查看 1K关注 0票数 2

我在VS2017中修改了一个csproj文件,以便在我的.NET 4.5项目发布时创建一个Nuget包。下一个自动化步骤是将此包添加到网络共享上的私有提要中。下面是我使用的命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Exec Command="nuget.exe pack -Properties &quot;Configuration=Release&quot; -Symbols $(ProjectName).csproj" />
<Exec Command="nuget.exe add $(ProjectName).$(ProductVersion).nupkg -source \\MYSERVER\Nuget packages" />

第1行工作并生成表单productname.nn的nupkg文件。

但是,第2行没有返回ProductVersion令牌的值(这是我的猜测)。

我很难找到MSBUILD令牌的引用(这本身是有用的),但我真正需要知道的是版本的正确的MSBUILD令牌/变量/属性--这与生成的Nuget包的值相同。

EN

回答 2

Stack Overflow用户

发布于 2017-05-13 10:13:26

我研究了Martin建议的$(PackageVersion),但是即使安装了Nuget 4.10,它也不会适用于旧的项目。另外,我无法让Troopers样本按照我想要的方式工作,最后我得到了一个here帖子的变体。我对它进行了修改,使我获得了程序集版本,而不是文件版本。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <UsingTask TaskName="GetVersionParts" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
      <AssemblyPath ParameterType="System.String" Required="true" />
      <MajorVersion ParameterType="System.Int32" Output="true" />
      <MinorVersion ParameterType="System.Int32" Output="true" />
      <BuildVersion ParameterType="System.Int32" Output="true" />
    </ParameterGroup>
    <Task>
      <Using Namespace="System.Reflection" />
      <Code Type="Fragment" Language="cs">
        <![CDATA[
        Version v = AssemblyName.GetAssemblyName(this.AssemblyPath).Version;

        this.MajorVersion = v.Major;
        this.MinorVersion = v.Minor;
        this.BuildVersion = v.Build;    
      ]]>
      </Code>
    </Task>
  </UsingTask>
  <Target Name="AfterBuild" Condition=" '$(Configuration)' == 'Release'">
    <Message Text="**** After-build process starting ****" />
    <Exec Command="nuget.exe pack -Properties &quot;Configuration=Release&quot; -Symbols $(ProjectName).csproj" />
    <GetVersionParts AssemblyPath="$(OutputPath)$(AssemblyName).dll">
      <Output TaskParameter="MajorVersion" PropertyName="MajorVersionNumber" />
      <Output TaskParameter="MinorVersion" PropertyName="MinorVersionNumber" />
      <Output TaskParameter="BuildVersion" PropertyName="BuildVersionNumber" />
    </GetVersionParts>
    <Exec Command="nuget.exe add $(MSBuildProjectName).$(MajorVersionNumber).$(MinorVersionNumber).$(BuildVersionNumber).nupkg -source  &quot;\\My feed server\Shared location&quot;" />
    <Exec Command="move *.symbols.nupkg &quot;\\My feed server\Shared location\Symbols&quot;" />
    <Message Text="**** After-build process completed ****" />
  </Target>

虽然这样做有效,但我还是觉得应该更容易些。

进一步阅读

https://learn.microsoft.com/en-us/visualstudio/msbuild/msbuild-inline-tasks https://learn.microsoft.com/en-us/visualstudio/msbuild/common-msbuild-project-properties https://learn.microsoft.com/en-us/nuget/tools/nuget-exe-cli-reference#add

票数 2
EN

Stack Overflow用户

发布于 2017-05-09 23:38:44

您可以使用此宏获得程序集版本。例如,我在生成后事件之前调用它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--Macro to get the version -->
<Target Name="PostBuildMacros">
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
        <Output TaskParameter="Assemblies" ItemName="CurrentAssembly" />
    </GetAssemblyIdentity>
    <ItemGroup>
        <VersionNumber Include="%(CurrentAssembly.Version)" />
    </ItemGroup>
</Target>
<!-- override PostBuildEvent to call PostBuildMacros -->
<PropertyGroup>
    <PostBuildEventDependsOn>
        $(PostBuildEventDependsOn);
        PostBuildMacros;
    </PostBuildEventDependsOn>
    <PostBuildEvent>
        ...
    </PostBuildEvent>
</PropertyGroup>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43874823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文