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

從 AssemblyInfo 后編譯讀取 AssemblyFileVersion

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

問題描述

如何讀取 AssemblyFileVersion 或其組件 AssemblyFileMajorVersion、AssemblyFileMinorVersionAssemblyFileBuildNumber、AssemblyFileRevision,在 .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(給定輪班列表,創建時間表的摘要描述)
主站蜘蛛池模板: 国产91观看| 欧美xxxx做受欧美 | 韩国av电影网 | 久久久久久精 | 欧美videosex性极品hd | 夜夜夜夜草 | 在线观看视频亚洲 | 你懂的国产| 九色国产 | 天天看天天干 | 国产成人亚洲精品自产在线 | a欧美 | 一级片免费视频 | 99在线免费视频 | 天天操天天射天天舔 | 91视频免费 | 欧美日韩一区二区三区不卡视频 | 黄色三级在线播放 | 欧美乱操 | 国产不卡一区在线观看 | 日韩精品一区二区三区视频播放 | 综合五月婷 | 成人免费观看男女羞羞视频 | 一区二区国产精品 | 久草网站 | 国产亚洲第一页 | 亚洲欧美一区二区三区国产精品 | www.久| 国产精品免费在线 | 午夜专区 | 欧美www在线| a毛片| 久久er精品 | 网站一区二区三区 | 欧美一区二区在线播放 | 在线观看国产精品视频 | 国产精品夜夜夜一区二区三区尤 | 日韩欧美在线观看一区 | 久久国产精品免费一区二区三区 | 91美女视频| 我要看免费一级毛片 |