で自動的に増分ファイルの構築版利用の場合Visual Studio?
-
21-08-2019 - |
質問
どうしてそうなっちゃうんですかどんな風に思 自動的に 値の構築(そのバージョンになっていますか?) 私のファイルをVisual Studio(2005).
見上げれば、性質のも C:\Windows\notepad.exe
, は、バージョン"タブを"ファイルバージョン:5.1.2600.2180".思これらの涼しい数のバージョンのdllのでもない版1.0.0.0るいは鈍.
いうものがないのボックス機能というか私が見ているだけで、間違いの場(いつもの事ですが)
私が仕事を主にwebプロジェクト....
また両
- http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx
- http://www.codeproject.com/KB/dotnet/build_versioning.aspx
と信じられなかったもんでみたいという気持ちになりなが標準です。
編集:では動作しませんVS2005していいですね(http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx)
解決
Visual Studio2008年の作品。
のAssemblyInfo.csファイルを見つこの2つのライン:
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
きに変更してみてくださいここを
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]
この思いは望みの結果、製品版 1.0.* ファイル版 1.0.0.0.ください!
しかし、削除されたり、これらのラインとして:
[assembly: AssemblyVersion("1.0.*")]
その後、コンパイラ設定ファイルのバージョンと同一のバージョンだけご希望により自動的に増加製品およびファイルバージョンはます。E.g. 1.0.3266.92689
他のヒント
AssemblyInfo.csファイルを開き、変更する
// 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.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]
タグに
[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]
プロジェクトに行くことによって、IDEでこれを行うことができます - >プロパティ - >アセンブリ情報
これは、しかし、唯一の自動インクリメントにアセンブリのバージョンをあなたにできるようになりますし、あなたを与えるだろう。
アセンブリファイルバージョン:ワイルドカード(「*」)は、この分野では許可されていません。
メッセージボックス、ファイルのバージョンフィールドに*を配置しようとした場合。
だからassemblyinfo.csを開いて手動で行う。
各ビルドでバージョン番号を変更するための別のオプションはのMSBuildののバージョンのタスクを使用することです.Community.Tasks を。ただ、彼らのインストーラをダウンロードしてインストールし、その後、次のコードを適応し、あなたの<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
ファイル内.csproj
後に貼り付けます:
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="BeforeBuild">
<Version VersionFile="Properties\version.txt" Major="1" Minor="0" BuildType="Automatic" StartDate="12/31/2009" RevisionType="BuildIncrement">
<Output TaskParameter="Major" PropertyName="Major" />
<Output TaskParameter="Minor" PropertyName="Minor" />
<Output TaskParameter="Build" PropertyName="Build" />
<Output TaskParameter="Revision" PropertyName="Revision" />
</Version>
<AssemblyInfo CodeLanguage="CS"
OutputFile="Properties\VersionInfo.cs"
AssemblyVersion="$(Major).$(Minor)"
AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" />
</Target>
注:のロケールに開始日のプロパティを調整します。 それは現在、インバリアントカルチャを使用していません。に
1月14日、2010年第三の構築のために、これはこのコンテンツでVersionInfo.cs
を作成します:
[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.14.2")]
このファイルは、(経由でのの既存のアイテムを追加します。)プロジェクトに追加する必要があり、かつAssemblyVersion
とAssemblyFileVersion
行がAssemblyInfo.cs
から除去されなければならない。
バージョンのコンポーネントを変更するための異なるアルゴリズムが$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chm
に記載されており、をされているバージョンのプロパティの
私はキリスト教徒に似た解決策を考え出したが、私は、私たちの開発者のすべてにこれらのタスクをインストールしたくないとコミュニティのMSBuildタスクに依存せず、これは私のためのオプションではありません。
私は、コードを生成し、アセンブリにコンパイルし、自動インクリメントのバージョン番号にしたいのです。しかし、私はVS 6.0を使用することはできません。*のAssemblyVersionトリックそれ自動増分が毎日数字を構築し、古いビルド番号を使用してアセンブリとの互換性を壊すよう。代わりに、私はハードコーディングされたのAssemblyVersionが、自動インクリメントAssemblyFileVersionを持っていると思います。私はこのようなMSBuildのでVersionInfo.csをAssemblyInfo.csでのAssemblyVersionを指定して生成することによって、これを達成してきた、
<PropertyGroup>
<Year>$([System.DateTime]::Now.ToString("yy"))</Year>
<Month>$([System.DateTime]::Now.ToString("MM"))</Month>
<Date>$([System.DateTime]::Now.ToString("dd"))</Date>
<Time>$([System.DateTime]::Now.ToString("HHmm"))</Time>
<AssemblyFileVersionAttribute>[assembly:System.Reflection.AssemblyFileVersion("$(Year).$(Month).$(Date).$(Time)")]</AssemblyFileVersionAttribute>
</PropertyGroup>
<Target Name="BeforeBuild">
<WriteLinesToFile File="Properties\VersionInfo.cs" Lines="$(AssemblyFileVersionAttribute)" Overwrite="true">
</WriteLinesToFile>
</Target>
このバージョンは、ビルド日付とYY.MM.DD.TTTTのスキーマを次のAssemblyFileVersionのためのアセンブリ属性を持つVersionInfo.csファイルを生成します。あなたは、あなたのプロジェクトでは、このファイルをインクルードし、それを構築する必要があります。
バージョンインクリメントアドインを構築するをインストールします。それはあなたの*オプションよりも方法の詳細に制御できます。
バージョン番号を試す取得するには、
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
System.Reflection.AssemblyName assemblyName = assembly.GetName();
Version version = assemblyName.Version;
/編集AssemblyInfo.csを作成し、バージョン番号を設定するには、
[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]
また、サイドノートとして、第3の数は、2000年2月1日からの日数であり、第四の数は、一日の総秒量の半分です。あなたが真夜中にコンパイルのであれば、それはゼロにする必要があります。
Visual Studioの拡張機能があります自動バージョン、 2013年、2015年&2017年
"ここに画像の説明を入力します" "ここに画像の説明を入力します。他の記事で説明したようにAssemblyInfoまたはプロジェクトのプロパティの下にバージョン番号に*を設定すると、Visual Studioの/ .NETのすべてのバージョンでは動作しません。
それはVS 2005で動作しませんでした私の知る限り(しかし、VS 2003およびVS 2008で)。コンパイルに自動インクリメントのVisual Studio 2005のバージョンのビルドとリビジョン番号:VS 2005の場合は次のように使用することができます時間でます。
しかし、自動的にバージョン番号を変更すると厳密な名前のアセンブリのために推奨されていないことに注意してください。その理由は、このようなアセンブリへのすべての参照が原因厳密な名前のアセンブリ参照が常に特定のアセンブリバージョンを参照しているという事実のために参照されるアセンブリが再構築されるたびに更新されなければならないということです。マイクロソフト自体はインターフェースの変更がある場合にのみ、.NET Frameworkアセンブリのバージョン番号を変更します。 (NB:私はまだ私はそれを読んMSDN内のリンクを探しています)。
車incrementing(DateTime)情報にAssemblyFileVersion性に優せは依存関係.
ビBoogのソリューション(動作しなかった私にとってのですが、そのVS2008?), 利用できる組み合わせの前に構築-イベントを生成するファイルを追加するファイルを含むそのバージョン物性)とその利用方のみの読み出している場合は、それらの数値です。この..
事前に構築-イベント:
echo [assembly:System.Reflection.AssemblyFileVersion("%date:~-4,4%.%date:~-7,2%%date:~-10,2%.%time:~0,2%%time:~3,2%.%time:~-5,2%")] > $(ProjectDir)Properties\VersionInfo.cs
によVersionInfo.csファイル(物性サブフォルダ)のプロジェクト
コード取得日(年間を秒):
var version = assembly.GetName().Version;
var fileVersionString = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion;
Version fileVersion = new Version(fileVersionString);
var buildDateTime = new DateTime(fileVersion.Major, fileVersion.Minor/100, fileVersion.Minor%100, fileVersion.Build/100, fileVersion.Build%100, fileVersion.Revision);
ない非常に快適な..また、わからない場合で多くの力-再建以降のファイルは常に変化)
き編集するための例の場合のみ更新のVersionInfo.csファイルは数分/時間による利用の一時ファイルをコピーし/書き換えることで実VersionInfo.csが変わるのに十分な大きさを検出した).ってこのかたないのです。
「*。1.0」にバージョン番号を設定し、それが自動的に(ある時点から日数)日時(深夜から半秒)
との最後の二つの番号を記入しますこのプロジェクトの特性 公開
ケーキ ポAssemblyInfoファイルのパッチングします。ケーキ使用実態をより適切に反映できてい限を実施する方法に自動版incrementing.
簡単な例incrementing版のようにC#コンパイラは:
Setup(() =>
{
// Executed BEFORE the first task.
var datetimeNow = DateTime.Now;
var daysPart = (datetimeNow - new DateTime(2000, 1, 1)).Days;
var secondsPart = (long)datetimeNow.TimeOfDay.TotalSeconds/2;
var assemblyInfo = new AssemblyInfoSettings
{
Version = "3.0.0.0",
FileVersion = string.Format("3.0.{0}.{1}", daysPart, secondsPart)
};
CreateAssemblyInfo("MyProject/Properties/AssemblyInfo.cs", assemblyInfo);
});
こちら:
- バージョンは、組み立てます。ベストプラクティスのロックメジャーバージョン番号および休暇、残りをゼロという1.0.0.0").
- FileVersion-アッセンブリファイルのバージョン。
注意できるパッチなバージョン また他のすべての必要な情報.
プロジェクトに行きます| [プロパティおよびアセンブリ情報と、その後アセンブリバージョンと最後または最後から2番目のボックスに*を入れて(あなたすることはできません自動インクリメントメジャーまたはマイナーのコンポーネント)。
MSBuildのコミュニティタスクからAssemblyInfoタスクを使用します( http://msbuildtasks.tigris.org/する )プロジェクト、およびあなたの.csproj /の.vbprojファイルに統合します。
これは、その日の日付と時刻にバージョン番号を結び付けるものを含むいくつかのオプションを持っています。
推奨ます。
今の時点で、私のアプリケーションのために、
string ver = Application.ProductVersion;
返しver = 1.0.3251.27860
値3251は、2000年1月1日からの日数です。私は自分のアプリケーションのスプラッシュ画面上バージョンの作成日を置くためにそれを使用します。ユーザーを扱う場合、私はいくつかの長い数よりも通信することが容易である作成日時を求めることができます。
(私は小さな会社を支援ワンマンDEPTだ。このアプローチは、あなたのために動作しない場合があります。)
AssemblyInfoはVS2012で動作を変更します。 Visual Studioで、このためのより多くのサポートがないことを奇妙に思える、あなたはこれがビルド/リリースプロセスの基本的な部分だったと思うだろう。
どのようにバージョンを取得 {major}.{year}.1{date}.1{time}
このような実験もしていただいております。イジェフAtwood@CodingHorror(リンク).
この結果、バージョン番号となり 1.2016.10709.11641
(意味2016-07-09 16:41)が可能
- マンパディングゼロ(愚かなこの界
1
s) - 近く-人間が読める形式 地 DateTimeに組み込まれたバージョン番号
- くメジャーバージョンだけでも大きな速変わります。
新規追加項目プロジェクトを選択し、一般->テキストテンプレートという名前をつけよう CustomVersionNumber
(該当する場合)のコメント AssemblyVersion
や AssemblyFileVersion
に Properties/AssemblyInfo.cs
.
その後、保存する場合は、このファイルまたはビルのプロジェクトが、このまま再生 .cs
ファイルとしての下位項目の作成 .tt
ファイルです。
<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
//
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
//
using System.Reflection;
<#
var date = DateTime.Now;
int major = 1;
int minor = date.Year;
int build = 10000 + int.Parse(date.ToString("MMdd"));
int revision = 10000 + int.Parse(date.ToString("HHmm"));
#>
[assembly: AssemblyVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]
[assembly: AssemblyFileVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]
たぶん、この作業のために、あなたはこのようなコードを使用することができます:
private bool IncreaseFileVersionBuild()
{
if (System.Diagnostics.Debugger.IsAttached)
{
try
{
var fi = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.GetDirectories("Properties")[0].GetFiles("AssemblyInfo.cs")[0];
var ve = System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
string ol = ve.FileMajorPart.ToString() + "." + ve.FileMinorPart.ToString() + "." + ve.FileBuildPart.ToString() + "." + ve.FilePrivatePart.ToString();
string ne = ve.FileMajorPart.ToString() + "." + ve.FileMinorPart.ToString() + "." + (ve.FileBuildPart + 1).ToString() + "." + ve.FilePrivatePart.ToString();
System.IO.File.WriteAllText(fi.FullName, System.IO.File.ReadAllText(fi.FullName).Replace("[assembly: AssemblyFileVersion(\"" + ol + "\")]", "[assembly: AssemblyFileVersion(\"" + ne + "\")]"));
return true;
}
catch
{
return false;
}
}
return false;
}
とフォームのロードからそれを呼び出す。
このコードを使用すると、AssemblyInfo.csでファイル情報のどの部分を更新することができます(ただし、「標準」のディレクトリ構造を使用する必要があります)。
AssemblyInfoUtil に。自由。オープンソースます。
私はT4を配置することによって、このアプローチ https://stackoverflow.com/a/827209/3975786 に使用しています「ソリューション・アイテム」のテンプレートおよび各プロジェクト内で「リンクとして追加」でそれを使用します。
多分それはここに答えるには遅すぎだが、それが誰かの多忙な問題を解決することを願っています。
PowerShellスクリプトを使用して、プロジェクトのすべてのアセンブリのバージョンを変更するには、の自動の方法。 この記事になりますあなたの問題の多くを解決します。
たなビルドで自動単位の少なくとも有意ではないが完了します。
まったく泳げないんだけど---とにかく、どうや更新、その他ございますのでご注意下さい少なくともお会いできることがで...
私の作用は増加のファイルバージョン動します。
- ダウンロード の応用
以下の行を追加します事前に構築-イベントのコマンドライン
C: emp\IncrementFileVersion.exe $(SolutionDir)\性\AssemblyInfo.cs
プロジェクトをビルドする
それがシンプルに保つためには、アプリのみを投メッセージでエラーが発生した場合は、確認したところ、うまくいったので微細な確認処理を行う必要がありまファイルのバージョン'情報'
注意:また更新のソリューショVisual studioの"情報"ボタンを生成するためにして出力ファイルの更新車が登場します。
提案や要望をメールしてくださいっtelson_alva@yahoo.com
2019
これは私が
を追加するために十分ではなかったです[assembly: AssemblyVersion("1.0.*")]
構築するとき、それは私にこのエラーがスローされます。
指定されたバージョン文字列を必要な形式に準拠していません。
ソリューション
私はDeterministic
にFalse
するproject.csproj
を設定した後、フォーマットが最終的に受け入れられた。
<Deterministic>false</Deterministic>
<時間>
編集:
私の設定ファイルは、それをロードし、別の場所にそれを保存台無しDeterministic
するFalse
を設定何らかの理由ます。
回避策:
I設定リビジョン番号をインクリメントするビルド後のイベント:
ビルド後のイベントバッチスクリプト
これは、引数としてautoincrement_version.ps1
のパスを渡すAssemblyInfo.cs
if $(ConfigurationName) == Release (
PowerShell -ExecutionPolicy RemoteSigned $(ProjectDir)autoincrement_version.ps1 '$(ProjectDir)My Project\AssemblyInfo.cs'
)
Poweshellスクリプト
これは、正規表現を使用してリビジョン番号を自動インクリメント
param( [string]$file );
$regex_revision = '(?<=Version\("(?:\d+\.)+)(\d+)(?="\))'
$found = (Get-Content $file) | Select-String -Pattern $regex_revision
$revision = $found.matches[0].value
$new_revision = [int]$revision + 1
(Get-Content $file) -replace $regex_revision, $new_revision | Set-Content $file -Encoding UTF8