久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

從 AssemblyInfo 后編譯讀取 AssemblyFileVersion

Read AssemblyFileVersion from AssemblyInfo post-compile(從 AssemblyInfo 后編譯讀取 AssemblyFileVersion)
本文介紹了從 AssemblyInfo 后編譯讀取 AssemblyFileVersion的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

如何讀取 AssemblyFileVersion 或其組件 AssemblyFileMajorVersionAssemblyFileMinorVersionAssemblyFileBuildNumberAssemblyFileRevision,在 .csproj 中,編譯后?

How can one read the AssemblyFileVersion, or its components AssemblyFileMajorVersion, AssemblyFileMinorVersion, AssemblyFileBuildNumber, AssemblyFileRevision, within the .csproj, following compilation?

我嘗試了以下從構建的程序集中提取信息的方法:

I have tried the following which pulls the information from the built assembly:

<Target Name="AfterCompile">
    <GetAssemblyIdentity AssemblyFiles="$(TargetPath)">
         <Output
             TaskParameter="Assemblies"
             ItemName="MyAssemblyIdentities"/>
    </GetAssemblyIdentity>
    <Message Text="AssemblyVersion = %(MyAssemblyIdentities.Version)" />
</Target>

但這會檢索 AssemblyVersion 而不是 AssemblyFileVersion.后者似乎沒有記錄在案的元數據條目.我也試過了:

But that retrieves the AssemblyVersion and not the AssemblyFileVersion. There does not seem to be a documented metadata entry for the latter. I also tried:

<Import Project="$(MSBuildExtensionsPath)ExtensionPackMSBuild.ExtensionPack.tasks" />
<Target Name="AfterCompile">
    <MSBuild.ExtensionPack.Framework.Assembly TaskAction="GetInfo" NetAssembly="$(TargetPath)">
        <Output TaskParameter="OutputItems" ItemName="Info" />
    </MSBuild.ExtensionPack.Framework.Assembly>
    <Message Text="AssemblyFileVersion = %(Info.FileVersion)" />
</Target>

不幸的是,雖然這會檢索到正確的值,但它也會文件鎖定程序集,直到 VS2008 關閉.

Unfortunately, while this retrieves the correct value, it also file locks the assembly until VS2008 is closed.

坦率地說,這也不是我想要的,因為我寧愿直接從 AssemblyInfo.cs 中讀取信息.但是,我無法弄清楚如何做到這一點.我認為 MSBuild Extensions 中的 AssemblyInfo 是一種方式,但它似乎專注于寫入 AssemblyInfo 而不是從中檢索值.

Frankly, neither is what I want as I would rather read the information from the AssemblyInfo.cs directly. However, I cannot figure out how to do that. I assumed AssemblyInfo in the MSBuild Extensions was one way, but it seems focused on writing to the AssemblyInfo and not retrieving values from it.

我怎樣才能最好地做到這一點?

How can I best accomplish this?

推薦答案

我已經設法使用自定義任務解決了這個問題.類庫 DLL 就是這樣(為簡潔起見調整/刪除了一些代碼):

I've managed to solve this using a custom task. The class library DLL is as so (some code adjusted/eliminated for brevity):

using System;
using System.IO;
using System.Text.RegularExpressions;
using Microsoft.Build.Framework;

namespace GetAssemblyFileVersion
{
    public class GetAssemblyFileVersion : ITask
    {
        [Required]
        public string strFilePathAssemblyInfo { get; set; }
        [Output]
        public string strAssemblyFileVersion { get; set; }
        public bool Execute()
        {
            StreamReader streamreaderAssemblyInfo = null;
            Match matchVersion;
            Group groupVersion;
            string strLine;
            strAssemblyFileVersion = String.Empty;
            try
            {
                streamreaderAssemblyInfo = new StreamReader(strFilePathAssemblyInfo);
                while ((strLine = streamreaderAssemblyInfo.ReadLine()) != null)
                {
                    matchVersion = Regex.Match(strLine, @"(?:AssemblyFileVersion("")(?<ver>(d*).(d*)(.(d*)(.(d*))?)?)(?:""))", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace | RegexOptions.Singleline | RegexOptions.ExplicitCapture);
                    if (matchVersion.Success)
                    {
                        groupVersion = matchVersion.Groups["ver"];
                        if ((groupVersion.Success) && (!String.IsNullOrEmpty(groupVersion.Value)))
                        {
                            strAssemblyFileVersion = groupVersion.Value;
                            break;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                BuildMessageEventArgs args = new BuildMessageEventArgs(e.Message, string.Empty, "GetAssemblyFileVersion", MessageImportance.High);
                BuildEngine.LogMessageEvent(args);
            }
            finally { if (streamreaderAssemblyInfo != null) streamreaderAssemblyInfo.Close(); } 
            return (true);
        }
        public IBuildEngine BuildEngine { get; set; }
        public ITaskHost HostObject { get; set; }
    }
}

并且在項目文件中:

<UsingTask AssemblyFile="GetAssemblyFileVersion.dll" TaskName="GetAssemblyFileVersion.GetAssemblyFileVersion" />
<Target Name="AfterCompile">
    <GetAssemblyFileVersion strFilePathAssemblyInfo="$(SolutionDir)AssemblyInfo.cs">
        <Output TaskParameter="strAssemblyFileVersion" PropertyName="strAssemblyFileVersion" />
    </GetAssemblyFileVersion>
    <Message Text="AssemblyFileVersion = $(strAssemblyFileVersion)" />
</Target>

我已經對此進行了測試,如果您使用 MSBuild.ExtensionPack.VersionNumber.targets 進行自動版本控制,它將讀取更新的版本.

I've tested this and it will read the updated version if you use MSBuild.ExtensionPack.VersionNumber.targets for auto-versioning.

顯然,這可以很容易地擴展,以便將正則表達式從項目文件傳遞到更通用的自定義任務,以獲得任何文件中的任何匹配.


2009/09/03 更新:

Obviously, this could be easily extended so that a regex is passed from the project file to a more general-purpose custom task in order to obtain any match in any file.


Update 2009/09/03:

必須進行一項額外的更改才能在每次構建時更新 ApplicationVersion.InitialTargets="AfterCompile" 必須添加到 <Project....這是郭超解決的.

One additional change has to be made to make the ApplicationVersion update on each build. InitialTargets="AfterCompile" must be added to the <Project.... This was solved by Chao Kuo.

這篇關于從 AssemblyInfo 后編譯讀取 AssemblyFileVersion的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Is there a way to know if someone has bookmarked your website?(有沒有辦法知道是否有人為您的網站添加了書簽?)
Use of Different .Net Languages?(使用不同的 .Net 語言?)
Determining an #39;active#39; user count of an ASP.NET site(確定 ASP.NET 站點的“活動用戶數)
Best way to keep track of current online users(跟蹤當前在線用戶的最佳方式)
Recommend an Open Source .NET Statistics Library(推薦一個開源的.NET統計庫)
Create a summary description of a schedule given a list of shifts(給定輪班列表,創建時間表的摘要描述)
主站蜘蛛池模板: 午夜精品视频在线观看 | 国产欧美久久精品 | 国产精品亚洲一区 | 一区二区在线看 | 妞干网av | 国产精品日韩在线观看一区二区 | 欧美视频在线看 | 国产一区二区三区视频在线观看 | 久久精品二区 | 日本成人一区二区 | 国产成人一区二区 | 国内av在线| 天天色综| 国产精品18hdxxxⅹ在线 | 一区精品视频在线观看 | 在线观看中文字幕 | 亚洲综合在线视频 | 午夜精品91 | 国产在线精品一区二区三区 | 国产精品一区二区三区在线 | 国产精品久久久久无码av | 中文字幕 在线观看 | 性福视频在线观看 | 狠狠躁躁夜夜躁波多野结依 | 91精品国产综合久久香蕉922 | 国产剧情一区二区三区 | 超碰精品在线 | 丁香一区二区 | 美女视频黄色的 | 久久精品高清视频 | 99热99| 天天看天天摸天天操 | 亚洲国产成人精 | 免费观看羞羞视频网站 | 日韩欧美在线观看 | 国产精品久久久久久久久久99 | 区一区二区三在线观看 | 中文区中文字幕免费看 | 欧美精品一区二区在线观看 | 欧美视频在线播放 | 国产一区二区在线91 |