51

C#プロジェクトのAssemblyInfo.csには、バージョン情報を次のように指定できると記載されています。*

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Revision and Build Numbers 
// by using the '*' as shown below:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

私はそれをこれに変更しました:

[assembly: AssemblyVersion("1.0.*.*")]
[assembly: AssemblyFileVersion("1.0.*.*")]

これは私がコンパイラから受け取るエラーです:

error CS0647: Error emitting 'System.Reflection.AssemblyVersionAttribute' attribute -- 'The version specified '1.0.*.*' is invalid'
warning CS1607: Assembly generation -- The version '1.0.*.*' specified for the 'file version' is not in the normal 'major.minor.build.revision' format

それはどのように機能しますか?

4

5 に答える 5

71

「自動」ビルド番号の構文(MSDNを参照)は次のとおりです。

[assembly: AssemblyVersion("1.0.0.*")]

また:

[assembly: AssemblyVersion("1.0.*")]

*この後、すべてが自動であることを意味します。自動ビルド番号と固定リビジョン番号を設定できない場合、この構文は正しくありません。

[assembly: AssemblyVersion("1.0.*.0")]

AssemblyFileVersionAttribute特殊文字は使用できないため*、完全で有効なバージョン番号を提供する必要があります。を指定しない場合は、(同じバージョンの)が自動的AssemblyFileVersionAttributeに正しく取得されることに注意してください。別のバージョンを設定する必要がある場合にのみ、その属性を指定する必要があります。FileVersionInfoAssemblyVersionAttribute

于 2012-04-19T14:01:51.600 に答える
31
[assembly: AssemblyVersion("1.0.*")] 
//[assembly: AssemblyFileVersion("1.0.*")] 

AssemblyFileVersion行にコメントすることを忘れないでください。そうしないと、自動的に生成されるアセンブリバージョンは常に「1.0.0.0」になります。

于 2012-04-19T14:17:45.533 に答える
7

では、なぜ提供されたコメントは言うのですか

// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.0.0")]

しかし、ビルドはCS8357を生成しますか?誰かがメモを受け取らなかった。

Work around:

 1. Close all open documents
 2. In the Solution Explorer, right-click the Project and select Unload Project
 3. In the Solution Explorer, right-click the Project (now marked as unavailable) and select Edit to access the `.CSPROJ` file
 4. In the opened window, find `<Deterministic>true</Deterministic>` and change it to `<Deterministic>false</Deterministic>`
 5. Save the file and ensure that the edit window is closed
 6. In the Solution Explorer, right-click the Project and select Reload Project

Your build (should then) work. :)
于 2019-03-26T00:02:34.830 に答える
6

私の意見では、を使用する[assembly: AssemblyVersion("x.y.z.*")]と、Patch自動的に番号が付けられるべきではありません。例えば:

[アセンブリ:AssemblyVersion( "1.2.3。*")]

で「*」を使用するのは良いことですが、バージョン構造からの部分にAssemblyVersion使用する必要があるように見えるver.orgに従ってください)。*revision<major version>.<minor version>.<build number>.<revision>

バージョン番号MAJOR.MINOR.PATCHを指定して、次をインクリメントします。

互換性のないAPIを変更した場合のメジャーバージョン、

下位互換性のある方法で機能を追加する場合のマイナーバージョン、および

下位互換性のあるバグ修正を行う場合のPATCHバージョン。

于 2015-07-24T11:19:01.110 に答える
0

イージーコントロールバージョンへのバージョンで、そして顧客への情報のために「*」を使用しています。ハンドヘルド(PointOfSell)で実行される小さなプログラムがありますが、更新が発生することがあります。:-)私のコードでは、次を使用します。

AssemblyInfo.csからのフラグメント

// Version information for an assembly consists of the following four values:
//
//      Major Version
//      Minor Version 
//      Build Number
//      Revision
//
// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.*")]
// Need to comment this line, 
//[assembly: AssemblyFileVersion("1.0.0.0")]
//to avoid the following error:
// ...\Properties\AssemblyInfo.cs(36,32,36,39):
// warning CS7035: The specified version string does not conform to 
// the recommended format - major.minor.build.revision
// warning AL1053: The version '1.0.*' specified for 
// the 'file version' is not in the normal 'major.minor.build.revision' format

更新を確認するときに、バージョンのリストを小さなWebサービスからクライアントに送信します。

void smsReceive1_OnCabUpdate(object sender, CabDataEventArgs e)
{
    try
    {
        var cabVer = e.CabVersion;
        var sms1 = (SmsService.SmsService)sender;
        SmsService.CabinetVersion progVer = null;
        var exeApp = Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
        foreach (var item in cabVer)
        {
            if (string.Compare(item.FileName, exeApp, true) == 0)
            {
                progVer = item;
                break;
            }
        }

        var msgForm = new MessageBoxForm();
        if (!forceUpdate && !WillUpdateVersion(progVer))
        {
            Buzzer.Warning();
            sms1.StopReceive();
            msgForm.Message = "\r\nNewest Version!\r\n" +
                "Version\r\n" + progVer.AssemblyVersion.ToString() + "\r\n" +
                "Last Modified:\r\n" + progVer.AssemblyVersion.ToDateTime().ToString("yy/MM/dd HH:mm") + "\r\n" +
                "\r\nNo need to update";
            msgForm.OKShowDialog();
            return;
        }
        // 
        byte[] buffer = e.CabData;
        var filename = "\\ramdisk\\Setup.cab";
        if (File.Exists(filename))
        {
            File.Move(filename, string.Format("{0:yyMMdd_HHmmss}_Setup.cab"));
        }
        var fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
        fs.Write(buffer, 0, buffer.Length);
        fs.Flush();
        fs.Close();
        //
        Buzzer.Warning();
        //Stop SmsReceive
        sms1.StopReceive();
        msgForm.Message = "There is an update.\r\n" +
            "Version \r\n" + progVer.AssemblyVersion.ToString() + "\r\n" +
            "Last Modified:\r\n" + progVer.AssemblyVersion.ToDateTime().ToString("yy/MM/dd HH:mm") + "\r\n" +
            "※After the update\r\nIt will restart automatically";
        msgForm.SetSubMessage("Do you want to update?");
        var resp = msgForm.OKCancelShowDialog(true) == DialogResult.OK;
        if (resp)
        {
            CabFileUpdatePath = filename;
            UpdateApplication = true;
            Invoke((Action)(() => restartApplicationTimer.Enabled = true));
        }
        else
        {
            File.Delete(filename);
        }
    }
    finally
    {
        if (smsReceive1 != null) smsReceive1.ServicePaused = ServiceStatus.None;
    }
}

private bool WillUpdateVersion(SmartShooter.SmsService.CabinetVersion ver)
{
    var appVer = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;
    if (ver.CompareToExe(appVer) > 0) return true;
    return false;
}

progVer.AssemblyVersion.ToDateTime()。ToString( "yy / MM / dd HH:mm")

最後に、これは私がバージョンで「*」を使用しているためです。

public partial class MyVersion {
    
    public ushort Build { get; set; }
    
    public ushort Major { get; set; }
    
    public ushort Minor { get; set; }
    
    public ushort Revision { get; set; }
    

    public override string ToString()
    {
        return string.Format("{0}.{1}.{2}.{3}", Major, Minor, Build, Revision);
    }

    public DateTime ToDateTime()
    { 
        var dt = new DateTime(2000, 1, 1, 0, 0, 0);
        //plus days
        dt = dt.AddDays(Build);
        //plus seconds
        dt = dt.AddSeconds(Revision * 2);
        return dt;
    }
}

「Build」値を使用してプロジェクトがコンパイルされた日を検索し、「Revision」を使用して正確な時間を取得します。

于 2021-01-19T03:17:54.420 に答える