首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在MSBuild中从程序集中获取AssemblyInformationalVersion的正确方法是什么?

在MSBuild中从程序集中获取AssemblyInformationalVersion的正确方法是使用AssemblyInfo Task。AssemblyInfo Task是一个MSBuild任务,用于读取程序集的元数据信息。

要使用AssemblyInfo Task获取AssemblyInformationalVersion,需要在项目文件(.csproj、.vbproj等)中添加以下代码:

代码语言:txt
复制
<UsingTask TaskName="AssemblyInfo" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll" />

<Target Name="GetAssemblyInformationalVersion">
  <AssemblyInfo
    CodeLanguage="CS"
    OutputFile="AssemblyInfo.txt"
    AssemblyFiles="@(AssemblyFiles)"
    AdditionalProperties="AssemblyInformationalVersion"
  />
</Target>

上述代码中,AssemblyFiles是一个ItemGroup,用于指定要获取元数据信息的程序集文件。可以根据需要添加多个程序集文件。

执行上述代码后,AssemblyInfo Task会将程序集的元数据信息写入到AssemblyInfo.txt文件中。可以在后续的任务中读取该文件,获取AssemblyInformationalVersion。

需要注意的是,AssemblyInformationalVersion是程序集的一个自定义版本号,通常用于标识程序集的发布版本。在使用AssemblyInfo Task获取AssemblyInformationalVersion之前,需要确保程序集的AssemblyInfo.cs或AssemblyInfo.vb文件中已经定义了该版本号。可以在AssemblyInfo文件中添加类似以下代码:

代码语言:txt
复制
[assembly: AssemblyInformationalVersion("1.0.0")]

以上代码中,"1.0.0"是一个示例的版本号,可以根据实际情况进行修改。

推荐的腾讯云相关产品:腾讯云云服务器(CVM)、腾讯云对象存储(COS)、腾讯云数据库(TencentDB)等。具体产品介绍和链接地址可以参考腾讯云官方网站。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

获取.NET Core应用的版本号

基于以上的定义,我们来看看程序运行时怎么获取这些信息 1. AssemblyVersion 取得AssemblyVersion有两种方法。...如果你不在一个static方法里获取版本号,可以用: GetType().Assembly.GetName().Version.ToString() 但是如果你想要在static方法里使用,可能就得创建一个别的类型...其实读取AssemblyVersion还有另一个方法: Assembly.GetEntryAssembly().GetName().Version 这个方法在static或非static方法里都可以使用...用它来标记相同AssemblyVersion但由不同build产生的程序集。 在Windows中,可以用文件属性对话框看到它。 如果可能的话,让MSBuild去自动生成它。...AssemblyInformationalVersion 程序集所在的产品版本。这是你用来给用户显示的版本号。这可以是个字符串,比如'1.0 Release Candidate'。

5.3K40

从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建

,从名称上就可以看出,这一名词包含了软件的开发与运营。...根据测试的结果,确定新代码和原有代码能否正确地集成在一起 持续交付(Continuous Delivery):持续交付是一种自动化的软件交付手段,在持续集成的基础上,代码库中的代码已经做好了部署到正式环境的准备...DevOps 方法论也是必须的,所以在这几篇的博客内容中,我也会完成对于后续功能的实践分享 3.2、前期调研 与持续集成的场景存在一些的差异,我们在实际的开发中,并不会在新的功能分支上按照每个开发人员再建立单独的分支...,对于 .NET Core 应用,完全可以采用 .NET Core CLI 中的各种命令来实现,而对于 .NET Framework 程序来说,则需要一个执行应用程序生产的平台,MSBuild 就是这样的一个工具...CI/CD是什么?

83631
  • 从零开始针对 .NET 应用的 DevOps 运营实践 - 运行环境搭建

    ,从名称上就可以看出,这一名词包含了软件的开发与运营。...根据测试的结果,确定新代码和原有代码能否正确地集成在一起 持续交付(Continuous Delivery):持续交付是一种自动化的软件交付手段,在持续集成的基础上,代码库中的代码已经做好了部署到正式环境的准备...DevOps 方法论也是必须的,所以在这几篇的博客内容中,我也会完成对于后续功能的实践分享 3.2、前期调研 与持续集成的场景存在一些的差异,我们在实际的开发中,并不会在新的功能分支上按照每个开发人员再建立单独的分支...,对于 .NET Core 应用,完全可以采用 .NET Core CLI 中的各种命令来实现,而对于 .NET Framework 程序来说,则需要一个执行应用程序生产的平台,MSBuild 就是这样的一个工具...CI/CD是什么?

    84931

    《CLR via C#》Part1之Chapter2 生成、打包、部署及管理应用程序及类型(二)

    CLR总是首先加载包含“清单”元数据表的文件,再根据“清单”来获取程序集中的其他文件的名称。(清单是一组元数据表的集合)。...总之,程序集是进行重用、版本控制和应用安全性设置的一个基本单元,它允许将类型和资源文件划分到单独的文件中。...使用Visual Studio IDE将程序集添加到项目中 1,右键“添加引用”   2,为了使自己的程序集出现在“.NET”选项卡的列表中,请在注册表中添加以下子项:HKEY_LOCAL_MACHINE...为程序集添加资源文件 程序集版本资源信息 AssemblyFileVersion 这个版本号存储在Win32版本资源中,它仅供参考,CLR既不会检查,也不会关心这个版本号; AssemblyInformationalVersion...AssemblyVersion 这个版本号存储在AssemblyDef清单元数据列表中,CLR在绑定到强命名程序集时,会使用这个版本号。它唯一的标识了一个程序集。

    60220

    .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖

    (注意到项目文件中我有额外引用一个其他的 NuGet 包 Ben.Demystifier,这是为了演示将依赖进行合并而添加的 NuGet 包,具体是什么都没有关系,我们只是在演示依赖的合并。)...如果你希望在你的项目当中进行尝试,可以把所有 /log 参数之后的那些程序集名称改为你自己的名称。 那么在编译的时候使用命令 msbuild /t:ILMerge 就可以完成程序集的合并了。...,如果是控制台程序,则为 exe /out 输出文件的名称(或路径)(此路径可以和需要合并的程序集名称相同,这样在合并完之后会覆盖同名称的那个程序集) /log 所有需要合并的程序集名称(或路径) /targetplatform...目标平台,如果是 .NET Framework 4.0 - .NET Framework 4.8 之间,则都是 v4 在合并完成之后,我们反编译可以发现程序集中已经包含了依赖程序集中的全部类型了。...,而不是在 MSBuild 中使用 Exec 来间接执行 ILRepack 的任务。

    2.9K30

    .NET SDK-Style 项目(Core、Standard、.NET5)中的版本号

    .NET SDK-Style 项目(Core、Standard、.NET5)中的版本号 独立观察员 2020 年 12 月 24 日 之前 .NET Framework 时,项目版本号等信息是存储在 AssemblyInfo.cs...文件中,通过程序集特性进行设置: .NET Core 之后,.NET 项目采用了新式的 SDK-Style 模式,将这些版本信息之类的也包含在项目文件里了,默认不再生成和使用 AssemblyInfo.cs...虽然也有方法来恢复以前使用 AssemblyInfo.cs 的方式,但正所谓入乡随俗,既然人家改了模式,还是按规范来吧。...的特色): 具体信息就是生成在 .csproj 的 PropertyGroup 节点内: 程序集版本(AssemblyVersion)和以前一样(也支持通配符 *),包版本(Version)对应以前的程序集信息版本...(AssemblyInformationalVersion),程序集文件版本(FileVersion)对应以前的(AssemblyFileVersion): 另外,这里是在 WPF 中绑定了程序集版本信息

    48110

    MSBuild入门

    MSBuild是什么? MSBuild全称(Microsoft Build Engine),是用于构建应用程序的平台。您可能不知道它,但是如果您在使用VS做开发,那么一定时时刻刻在使用它。...我想从MSBuild中得到什么 第一解决我上面说疑惑; 第二理解项目中这些文件是如何组织在一起并生成最终程序的(就像在WPF上Build是生成出来exe,而WP7则是出来一个XAP包,为何?)...MSBuild任务:   Build过程中的一些原子操作(如CSC、MakeDir) MSBuild目标:   按特定的顺序将任务组织在一起,并允许在命令行单独指定各个部分。...> 用MSbuild执行此项目文件,如期正确打印信息。...MSBuild目标 上面的一个例子中Target元素就是MSBuild目标,此目标按照编译源代码、打印编译好的程序文件名、执行该文件这个顺序组织了这三个任务。这就是目标所要做的事情。

    1.6K80

    dotnet publish

    输出包括以下资产: 扩展名为 dll 的程序集中的中间语言 (IL) 代码。 包含项目所有依赖项的 .deps.json 文件。....runtimeconfig.json 文件,其中指定了应用程序所需的共享运行时,以及运行时的其他配置选项(例如垃圾回收类型)。 应用程序的依赖项,将这些依赖项从 NuGet 缓存复制到输出文件夹。...dotnet publish 命令的输出可供部署至托管系统(例如服务器、电脑、Mac、笔记本电脑)以便执行。 若要准备用于部署的应用程序,这是唯一正式受支持的方法。...建议在发布配置文件中而不是在命令行中指定 PublishReadyToRun。 PublishSingleFile 将应用打包到特定于平台的单个文件可执行文件中。...有关单文件发布的详细信息,请参阅单文件捆绑程序设计文档。 自 .NET Core 3.0 SDK 起可用。 建议在项目文件中而不是在命令行中指定此选项。

    2.2K10

    理解 C# 项目 csproj 文件格式的本质和编译流程

    Visual Studio 是怎么让 csproj 中的内容正确显示出来的呢?更深入的,我能够自己扩展 csproj 的功能吗? 本文将直接从 csproj 文件格式的本质来看以上这些问题。...传统 csproj 文件中有大量的重复或者相似内容,只为 msbuild 和 Visual Studio 能够识别整个项目的属性和结构,以便正确编译项目。...是什么导致了这样的差异?在了解 csproj 文件中各个部件的作用之前,这似乎很难回答。...随后根据 PropertyGroup 里面设置的属性正确显示属性面板中的状态,根据 ItemGroup 中的项正确显示解决方案管理器中的引用列表、文件列表。...项目文件中的已知属性(知道了这些,就不会随便在 csproj 中写死常量了) - 吕毅 让一个 csproj 项目指定多个开发框架 - 吕毅 从以前的项目格式迁移到 VS2017 新项目格式 - 林德熙

    2.6K10

    如何在 .NET 库的代码中判断当前程序运行在 Debug 下还是 Release 下

    那么有办法得知使用此库的程序是 Debug 配置还是 Release 配置下编译的呢?本文将介绍一个比较靠谱的方法(适用于 .NET Standard)。...通常我们调试的时候是运行一个入口程序的,所以可以考虑使用 Assembly.GetEntryAssembly() 来获取入口程序集。...也就是说如果入口程序集是非托管程序集,那么这个可能返回 null。这可能发生在单元测试中、性能测试中或者其他非托管程序调用托管代码的情况;虽然不是主要场景,却很常见。...在我们的使用场景中是取整个托管调用栈的,由于这个方法本身就是托管代码,所以栈中至少存在一个帧;也就是说此方法在我们的场景中是不可能返回 null 的。...性能 另外,一个编译好的程序集是不可能在运行时再去修改 Debug 和 Release 配置的,所以第一次获取完毕后就可以缓存下来以便后续使用。

    1.7K10

    MSBuild后门技术分析

    CrowdStrike的博客文章是一位同事介绍给我的。SUNBURST的开发人员会尝试每秒都去搜索MSBuild.exe进程,然后读取这些远程进程中的虚拟内存来确定现在构建的是否是正确的解决方案。...MSBuild回顾 MSBuild微软引擎在构建应用程序时,绝大多数时候都会使用XML文件来指导目标解决方案的构建过程。...在检查MSBuild.exe的代码时,你首先会注意到的一件事情就是它本审就是一个.NET程序集。那么,哪种方法才是后门化任意.NET程序集的最佳方法呢? 没错,就是使用version.dll。...正如CrowdStrike所提到的,植入的后门代码已经检查出了正确的解决方案,所以我们在测试中也将针对MSBuild.exe文件进行操作。.../写入远程进程内存等); 生成正确解决方案的唯一触发器; 在生成过程中插入后门 在生成过程之后删除后门源文件; 目标实现 正如我们前面看到的,VERSION.dll文件很早就由.NET运行时加载了。

    78110

    CMake构建学习笔记14-依赖库管理工具

    如果说做C/C++开发最大的痛点是什么,那么一定是缺少一个官方的统一的包管理器。...如果头文件错了,你会发现无法编译;如果动态库导入库错误,你会发现无法链接;如果动态库不正确,你会发现无法运行。 最后开始在源代码中include头文件,调用依赖库相关的功能进行操作。...这要是换成使用Python或者JavaScript进行开发,一个install指令,一个import语句就全部搞定,也难怪C/C++开发的效率一直被程序员诟病呢。...其实不用想的太复杂,我们将所有需要的构建成果都构建到同一个目录,并且将这个目录设置成环境变量。这样,在我们日常的程序中就可以依托这个环境变量配置依赖库。...不能使用CMake的GUI工具,因为不同的库各自有自己独特的构建选项,最好将其通过脚本记录。不妨将构建的脚本写的完善一点,自动化一点,代码文件从哪里来,最后的构建成果输出到哪里。

    10510

    Jenkins持续集成与自动化部署系统安装配置

    接下来将介绍如何按照上述流程实现.NET下Jenkins的持续集成与自动化部署! 三、通过SVN获取源代码 1.安装插件      根据我们的思路,首先要做的就是获取到我们的源代码。...由于我们公司使用的源代码管理工具主要是SVN因此在这里主要介绍SVN的方式方法。...四、通过MSBuild编译应用程序 1.安装插件与环境      编译.NET应用程序可通过微软提供的MSBuild工具,先安装插件:MSBuild。...程序的物理路径 注意:此处MSBuild.exe必须与程序所使用freamwork版本相对应,此处我在这就遇到了一个大坑,一开始随便找个一个MSBuild工具,没想到根本编译不了C#6.0的语法。...而这种方案其中也有许多细节的地方在文章中没有提到,如:如何实现自动化的Nunit单元测试,如何定时构建......

    1K30

    MSBuild

    1.MSBuild是什么? MSBuild全称(Microsoft Build Engine),是用于构建应用程序的平台。您可能不知道它,但是如果您在使用VS做开发,那么一定时时刻刻在使用它。...因为是它在背后为你管理生成你的项目文件。当新建一个项目时,注意下项目文件夹中的*....1,创建一个最小的应用程序 建立一个文件夹,打开该文件夹的命令提示符,在此文件夹内创建一个文件helloworld.cs,在命令提示符下输入csc helloworld.cs来创建应用程序,生成一个exe...文件,键入helloworld来运行应用程序,在命令提示符下键入del helloworld.exe删除该应用程序 ?...2基本概念 MSBuild properties 属性是可用于配置构建的名称/值对。属性对于将值传递给任务,评估条件以及存储将在整个项目文件中引用的值很有用。

    87730

    ASP.NET Core基础补充08

    如果它显示用法和帮助选项(如下图所示),则表明.NET Core CLI已正确安装。...驱动程序即dotnet开始执行指定的命令。 在dotnet之后,我们需要指定命令(也称为动词)以执行特定操作。 每个命令后都可以带有参数和选项。...files(修改Visual Studio解决方案文件). store: Store the specified assemblies in the runtime package store(将指定的程序集存储在运行时程序包存储中...以下命令使用TEMPLATE创建一个新的dotnet核心项目: dotnet new 您可以使用以下方法找到模板列表: dotnet new-l 键入dotnet new -l并按Enter后...,它将显示基于机器上安装的.NET Core版本的可用模板列表,如下图所示: 示例:使用.NET Core CLI创建控制台应用程序 以下命令在当前目录中创建一个与当前目录同名的新控制台项目。

    17310

    从零开始学习 dotnet 编译过程和 Roslyn 源码分析

    本文整理我和 林德熙 学习的 dotnet 编译知识、Roslyn 源码分析知识,NuGet 知识。通过阅读本文可以从零散的碎片化博客中得到从零开始学习的轨迹。...以下是这部分的性能数据: C# 程序集数量对软件启动性能的影响 - 林德熙 不过,程序集中的类的数量对启动性能没有影响: C# 直接创建多个类和使用反射创建类的性能 - 林德熙 SourceFusion...: .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换 - 吕毅 在 Visual Studio 的解决方案资源管理器中隐藏一些文件 - 吕毅 使用链接共享 Visual Studio...通过 Nuget 引用源代码 在 VS 智能提示正常但是无法编译 - 林德熙 如果你的 NuGet 格式是旧的,或者说引用方式是旧的,推荐升级: 自动将 NuGet 包的引用方式从 packages.config...有没有考虑过自己写一个 extern 方法?

    42740

    包验证返回的错误代码

    CP0001 所比较的程序集中缺少该程序集外部可见的所需类型、枚举、记录或结构。 将缺少的类型添加到缺少该类型的程序集中。 CP0002 所比较的程序集中缺少在该程序集外部可见的所需成员。...将缺少的成员添加到缺少该成员的程序集中。 CP0003 程序集标识的某些部分(名称、公钥令牌、区域性、可重定目标属性或版本)对于比较的双方都不匹配。 更新程序集标识,以便比较的双方都匹配。...CP0004 创建程序集映射时,比较的其中一方找不到匹配的程序集。 确保将缺少的程序集添加到包中。 CP0005 在与非密封类型进行比较的右侧添加了抽象成员。 删除抽象成员或不要将其注释为抽象。...CP0006 将成员添加到了没有默认实现的接口。 如果目标框架和语言版本支持默认实现,请添加一个实现,或者只需从接口中删除该成员。 CP0007 类层次结构上的基类型已从相比较的其中一方中删除。...CP0009 一方的非密封类型在另一方被注释为密封。 从类型中删除密封注释。 CP1001 在搜索目录中找不到匹配的程序集。 (只有在直接使用 API 兼容性时不适用于包验证。)

    1.8K30
    领券