如何从 MSBuild 自动增加程序集或程序集文件版本?

2023-12-07

限制条件是: 使用 Visual Studio 2017。 最终需要从调用 MSBuild 的 powershell 脚本中调用。

不确定其相关性,但需要能够构建以下内容:

  • ASP.NET 461
  • asp.net-core 1.1 和 2.0 程序集

迄今为止不成功的尝试:

  • 如何拥有自动递增的版本号(Visual Studio)?
  • 构建过程中的代码生成- 描述为 Microsoft 关于在 MSBuild 中使用“TextTemplate”的最新文档。各州需要复制某些 DLL 来构建服务器。文件未位于文档中指定的位置,并且不知道在哪里复制它们,我已经找到了所有文件。额外修改.csproj's import Microsoft.TextTemplating.targets正确位置的路径,但在运行 MSBuild 时我得到了。 “错误 MSB4018:“TransformTemplates”任务意外失败。”
  • 这个 SO 答案 - MSBuild 支持 Visual Studio 2017 RTM 中的 T4 模板

尝试示例 of “构建过程中的代码生成”这适用于从 VS 构建,但不适用于 MSBuild:

放置在项目的根目录-handleVersioning.tt:

<#@ template language="C#" #>

using System.Reflection;

[assembly: AssemblyVersion("1.0.0.*")]
[assembly: AssemblyFileVersion("<#= this.Year #>.<#= this.Month #>.<#= this.Day #>.<#= this.Minute #>")]
<#+
    int Year = DateTime.UtcNow.Year;
    int Month = DateTime.UtcNow.Month;
    int Day = DateTime.UtcNow.Day;
    int Minute = unchecked((int)DateTime.UtcNow.TimeOfDay.TotalMinutes);
#>

.csproj:

<Import Project="...hardcoded...\Microsoft.CSharp.targets" />
<!-- This is the important line: -->  
<Import Project="...hardcoded...\TextTemplating\Microsoft.TextTemplating.targets" />

<PropertyGroup>  
    <TransformOnBuild>true</TransformOnBuild>  
    <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
</PropertyGroup> 

像这样调用:msbuild myProject.csproj /t:TransformAll


您可以编写简单的控制台应用程序,然后在“项目属性”>“构建事件”中添加“预构建事件命令行”,如下所示:“D:\SomePath\MyAssemblyInfoPatcher.exe”“$(ProjectDir)Properties\AssemblyInfo.cs”

示例应用程序代码(适用于 VS 2022)

using System;
using System.IO;
using System.Linq;

namespace MyAssemblyInfoPatcher
{
    internal class Program
    {
        static void Main(string[] args)
        {
            if (args.Length > 0)
            {
                string path = args[0].ToString();
                Console.WriteLine(string.Format("Current App version is set to: {0}", path));
                string now_date = DateTime.Now.ToString("yyyy.MM.dd.HHmm");
                if (File.Exists(path))
                {
                    string _AssemblyVersion = string.Empty;
                    string _AssemblyFileVersion = string.Empty;

                    var lines = File.ReadLines(string.Format(path));
                    for (int i = 0; i < lines.Count(); i++)
                    {
                        if (lines.ElementAt(i).ToString().StartsWith("[assembly: AssemblyVersion"))
                        {
                            _AssemblyVersion = lines.ElementAt(i).ToString();
                        }
                        else if (lines.ElementAt(i).ToString().StartsWith("[assembly: AssemblyFileVersion"))
                        {
                            _AssemblyFileVersion = lines.ElementAt(i).ToString();
                        }
                    }

                    string _replace_assembly = File.ReadAllText(path);

                    if (_AssemblyVersion != string.Empty)
                    {
                        _replace_assembly = _replace_assembly.Replace(_AssemblyVersion, string.Format("[assembly: AssemblyVersion(\"{0}\")]", now_date));
                    }
                    if (_AssemblyFileVersion != string.Empty)
                    {
                        _replace_assembly = _replace_assembly.Replace(_AssemblyFileVersion, string.Format("[assembly: AssemblyFileVersion(\"{0}\")]", now_date));
                    }

                    File.WriteAllText(path, _replace_assembly);
                }
            }   
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 MSBuild 自动增加程序集或程序集文件版本? 的相关文章

随机推荐

  • JFreeChart:缩放图表时添加并同步滚动条(Eclipse 插件/SWT)

    我正在使用 JFreeChart 库在 Eclipse 视图中绘制某些内容 目前我的视图初始化代码如下所示 Override public void createPartControl Composite parent JFreeChart
  • 字符串中分隔的空格分隔的单词[重复]

    这个问题在这里已经有答案了 我有一个以下格式的文本字符串 str word1 word2 word3 word4 所以我想将每个单词从字符串中分离出来 两个单词之间用空格分隔 我怎么做 有没有内置函数可以做到这一点 最简单的是使用explo
  • filedialog、tkinter 和打开文件

    我第一次使用 Python3 为程序编写浏览按钮 我一直在搜索互联网和这个网站 甚至 python 标准库 我找到了示例代码和非常肤浅的解释 但我找不到任何可以直接解决我遇到的问题的内容 也找不到足够好的解释 以便我可以根据自己的需要自定义
  • 扩展后删除不需要的字符

    我有一些页面是通过从 cgi 串起的查询来调用的 xyz cgi page abc html 我遇到的问题是 我收到了对确实存在的页面的机器人请求 但该请求在 html结果是 404 有办法进去吗 htaccess剥离之后的一切 html扩
  • 有人可以解释一下 mult 在连接中执行更新时如何在 data.table 中工作(使用 .EACHI 和 mult)

    我再次努力理解mult参数在执行连接更新时起作用 我想做的是实现中定义的左连接lj 出于性能原因 我想更新左表 不平凡 的部分是 当左表和右表有一个共同的列时 不考虑连接列 我想使用右表中的第一个值来覆盖左表 我想mult会帮助我处理这个多
  • 在应用程序状态保存期间,有哪些好方法可以解决 SKAction 代码块的编码限制?

    Problem 当节点层次结构被编码时 这在应用程序状态保存或 游戏保存 期间很常见 运行的节点SKAction带有代码块的动作必须特殊处理 因为代码块不能被编码 示例1 动画后延迟回调 在这里 一名兽人被杀 它以动画方式淡出 然后将其自身
  • 类型错误:“str”不支持缓冲区接口

    plaintext input Please enter the text you want to compress filename input Please enter the desired filename with gzip op
  • 使用 jQuery 解析 PHP 脚本返回的 XML(imgur.com API)

    这是我的 jQuery var docname doc val function parseXml xml xml find rsp each function alert success submit click function aja
  • Chrome 自动化扩展程序崩溃了

    我在 C 中使用 Selenium 来针对 Google Chrome 进行自动化 我正在使用最新版本Chrome 78 0 3904 70 Selenium Webdriver 3 141 0 and Selenium Chrome We
  • 忽略根 RouterModule 中的路径

    我正在使用 Angular 9 我的根目录中有一个 JSON 文件 我不想将其包含在应用程序中 换句话说 src app assets index html do not include this file json 这意味着http ex
  • Clearcase find 命令先决条件

    我该如何使用cleartool find搜索一个裸vob 我必须始终首先定义视图吗 我通常使用 CCRC 在这种情况下 我正在查找特定分支类型的所有文件的列表 EDIT 这一页 says 通常 您从目录树中的所有对象开始 如下所示 你的观点
  • 如何在 Dialogflow NodeJS 客户端中设置自定义平台

    我使用创建了一个网络钩子对话流履行根据平台正确返回不同的数据 包括我为另一服务创建的自定义数据 我已经测试了我的网络钩子并且知道如果我更改originalDetectIntentRequest source对于我的自定义有效负载中使用的平台
  • 可重复使用的复选框部分视图

    我有一个部分视图 它使用类 CheckBoxModel 的列表 CheckBoxListModel 以及字符串和布尔值来创建复选框列表 该代码用于创建复选框并在页面发布时将选定的复选框发送回控制器 我正在尝试找到一种方法使我的部分可重用 正
  • 将 C# 应用程序包装在 .msi 安装程序中

    我已在 Visual Studio 2017 中创建了一个 C 应用程序 现在我想将我的应用程序作为单个 Windows 安装程序文件进行分发 我希望有一个简单的一键式解决方案 选择我想要包含的所有文件 gt 瞧 这是安装程序 但好像没那么
  • 如何在 PHP 中运行这个正则表达式?

    我在网上复制了这个复杂的 PHP a z0 9 a z0 9 a z0 9 a z0 9 a z0 9 a z0 9 a z0 9 a z0 9 我如何在 PHP 中运行它 我试试这个 test Joe Doe lt email prote
  • 如何在Vue组件中导入外部函数?

    我是 javascript 和 vue js 的新手 在尝试在现有程序中添加新功能时遇到一些问题 我已将我的新函数 与其他函数 放在一个单独的文件中 export const MyFunctions MyFunction function
  • 如何让我的应用程序读取应用程序配置而不是 machine.config?

    我在用 c 创建的应用程序中添加了一个单词 该应用程序正在访问 Web 服务 并且如果安装在 Program Files 文件夹之外 则可以完美运行 奇怪的是 当我将其安装在 Program Files 文件夹中时 客户端无法读取 appl
  • 避免空检查条件运算符样板的最佳实践

    当无法使用 null 对象时 替换条件运算符 null 检查样板的最佳实践是什么 public String getEmployeeName return employee null null employee getName Java 8
  • Android - 想要限制编辑文本中的某些字符

    我遇到了以下场景 我有一个编辑文本及其密码字段 我想限制一些字符 例如 a z A Z 1 0 和一些特殊字符 我将此 edittext 的 inputType 设置为 textPassword 并使用 Numberkeylistner 来
  • 如何从 MSBuild 自动增加程序集或程序集文件版本?

    限制条件是 使用 Visual Studio 2017 最终需要从调用 MSBuild 的 powershell 脚本中调用 不确定其相关性 但需要能够构建以下内容 ASP NET 461 asp net core 1 1 和 2 0 程序