Visual Studioを使用しているときに、ファイルのビルドバージョンを自動的にインクリメントできますか?


358

Visual Studio(2005)を使用してファイルのビルド(およびバージョン?)を自動的にインクリメントする方法を知りたがっていました。

sayのプロパティを検索するとC:\Windows\notepad.exe、[バージョン]タブに「ファイルバージョン:5.1.2600.2180」と表示されます。私のDLLのバージョンでもこれらのクールな数値を取得したいのですが、バージョン1.0.0.0ではなく、少し退屈に直面しています。

私はいくつかのことを試しましたが、すぐに使える機能ではないようです。あるいは、(いつものように)間違った場所を探しているだけかもしれません。

私は主にWebプロジェクトを扱っています。

私は両方を見ました:

  1. http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx
  2. http://www.codeproject.com/KB/dotnet/build_versioning.aspx

そして、何かをするためのそれほどの努力が標準的な実践であるとは信じられませんでした。

編集: 私が知る限り、VS2005では機能しません(http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx


1
ワイルドカードは、AssemblyVersionでのみ機能し、VS 2005のAssemblyFileVersionでは機能しないようです
dotnetcoder

VS2005のC ++プロジェクトで機能する解決策はありますか?すべての回答は.Netに関連しているようです。関連する質問。ありがとう
Deanna

.Net Coreプロジェクトでは、AssemblyVersionの自動インクリメントはデフォルトでは機能しません。csprojに<Deterministic> False </ Deterministic>を追加する必要があります。Visual Studio 2017(.NET Core)の自動バージョン管理を
Michael Freidgeim

回答:


434

Visual Studio 2008では、次のように動作します。

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になります。あなたが望むものではありません!

ただし、これらの行の2番目を削除して、次のようにした場合:

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

次に、コンパイラはファイルバージョンを製品バージョンと等しくなるように設定し、同期している製品とファイルバージョンを自動的に増分するという望ましい結果が得られます。例1.0.3266.92689


2
これは他のものと同じように機能し、VS2005でも機能します。:私は1.0.3266.30135を取得しますが、少なくともそれは(Dいくつかのランダムな番号でいえ)を増加させる代わりに、1.0.1.56のようないくつかの合理的な数を期待していた
inspite

14
ああ、私はちょうどそれを読む:それは自動的に(ある時点から日中)の日付と最後の二つの数と時間(深夜から半秒)に記入します
inspite

20
これを機能させるために、AssemblyFileVersion属性を削除する必要があるという素晴らしい呼び出しです!
David Faivre、2011年

76
これは古い質問だと思いますが、この答えにたどり着く他の人にこのコメントを追加したいと思いました。AssemblyVersionをインクリメントする場合、dllを使用するすべてのプロジェクトを再コンパイルする必要があります。ただし、AssemblyVersionを同じに保ち、AssemblyFileVersionを単独でインクリメントすると、新しいdllをスワップインして、それを使用しているものを再コンパイルする必要がなくなります。だから、これを自問してみてください、これは単なる新しいビルドですか、それとも新しいバージョンをリリースしていますか?
onefootswill、2012年

27
@ DD59「ビルド」は2000年1月1日からの日数です。「改訂」は、午前0時の秒数を2で割ったものです(0.5秒ではなく2秒間隔)。こちらをご覧ください:stackoverflow.com/a/3387167/11545
クリスティアンディアコネスク2013

154

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を開いて手動で実行してください。


D:あなたの方法緑色のチェックマークを獲得したものだ「このフィールドで許可されていません。「(*)」はい、私はただ、」Aのワイルドカードアセンブリファイルバージョン」に遭遇
inspite

3
この作品:[アセンブリ:のAssemblyVersion( "1.0。*")] // [アセンブリ:AssemblyFileVersion( "1.0.0.0")]
inspite

4
リリースサイクル中にAssemblyVersion番号を変更することは望ましくありません。代わりに、AssemblyFileVersionを変更する必要があります。このトピックに関する私のブログ投稿を参照してください:philippetruche.wordpress.com/2008/08/12/…数字をいつ変更するかについてのスザンヌクックの優れた投稿もご覧ください:blogs.msdn.com/b/suzcook/archive/2003/05/ 29 / 57148.aspx
フィリップ

46
*を使用する場合は注意が必要です。*日が65536になる2179年6月4日
Lloyd Powellの


53

各ビルドでバージョン番号を変更する別のオプションは、MSBuild.Community.TasksのVersionタスクを使用することです。インストーラをダウンロードしてインストールし、次のコードを修正してファイルの後ろに貼り付けます。<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>

注: StartDateプロパティをロケールに適合させます。現在、インバリアントカルチャは使用していません。

2010年1月14日の3番目のビルドでは、次のVersionInfo.csコンテンツでを作成します。

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.14.2")]

次に、このファイルを([ 既存の項目追加]を使用して)プロジェクトに追加し、AssemblyVersionおよびAssemblyFileVersion行をから削除する必要がありますAssemblyInfo.cs

バージョンコンポーネントを変更するためのさまざまなアルゴリズムについては、$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chmおよびバージョンプロパティで説明しています


2
これは、FileVersion構造体が16ビット整数を使用するという恐ろしい事実を回避するために私が見た中で、これが最善の方法です。
Mike Post、

1
パッケージコンソールを使用してVS2012にインストールする際に問題が発生したため、github.com / loresoft / msbuildtasks / downloadsからダウンロードした夜間msiインストーラーを使用することをお勧めします。上からコピー/貼り付けを行います。ありがとう!
DaveO 2012年

拒否されてこの投稿を編集した後:「このloresoft.com/projects/msbuildtasks/を確認することもできます...これにより、前述の基本的な機能を改善できます。」
radu florescu

1
これは、TFSで構築する人にとって実行可能なソリューションではありません。最終的に、これにより、保留中の編集がVersionInfo.csファイルとversion.txtファイルに追加されます。私にとって、ビルドごとに保留中の編集を行うことは望ましくありません。
JDennis 2014年

@JDennisは、TFSバージョン管理のヒントについてはこちらを参照してください...
クリスチャン

25

私はクリスチャンに似た解決策を思いつきましたが、コミュニティのMSBuildタスクに依存せず、すべての開発者にこれらのタスクをインストールしたくないので、これは私にとって選択肢ではありません。

コードを生成してアセンブリにコンパイルしていますが、バージョン番号を自動インクリメントしたいと考えています。ただし、VS 6.0。* AssemblyVersionトリックは毎日ビルド番号を自動インクリメントし、古いビルド番号を使用するアセンブリとの互換性を損なうため、使用できません。代わりに、ハードコードされたAssemblyVersionが必要ですが、自動インクリメントのAssemblyFileVersionが必要です。AssemblyInfo.csでAssemblyVersionを指定し、このようにMSBuildでVersionInfo.csを生成することで、これを達成しました。

  <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>

これにより、AssemblyFileVersionのAssembly属性を持つVersionInfo.csファイルが生成され、バージョンはYY.MM.DD.TTTTのスキーマとビルド日付に従います。このファイルをプロジェクトに組み込み、それを使用してビルドする必要があります。


MSBuildは変数をサポートしていますか?それ[System.DateTime]::Now以外の場合は、深夜近くにビルドする場合に古いビルド番号が使用される原因となる可能性がある競合状態があります。
Edward Brey 2017

説明のためにこれら4つのプロパティを1つにまとめるのではなく、定義しましたDateTime.ToStringか、それとも特別な理由がありますか?
mafu

BeforeBuildイベントがVS2017で発生しない場合は、stackoverflow.com
Rhys Jones

このソリューションは、ここでのすべての答えの中で最も適しています。ただし、問題は、別の分を生成するはずのプロジェクトを2回目にビルドした場合、タイムスタンプ(またはversioninfo.csファイルの内容)が更新されないことです。プロジェクトを閉じてリロードすると、タイムスタンプが更新されます。これはMSBuildのバグですか?@Boog
ケアリー

16

Build Version Incrementアドインをインストールします。*オプションよりもはるかに細かく制御できます。


VS2005 / 2008のみ、VS2010のベータ版
SteveC

autobuildversion.codeplex.com/discussions/393154 r3mote203から糸の終わり近くにDropboxのリンクは、2012年に2010年作品である(そしておそらく2013)。
グラウル、2014

2
私はVS2012の自動バージョンを使用していますが、うまく機能しています。
redcurry 2015

12

バージョン番号を取得するには、

 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日からの日数であり、4番目の数値は1日の合計秒数の半分です。したがって、午前0時にコンパイルする場合はゼロになります。


12

Visual Studio(2012、2013、2015)2017および2019をサポートするVisual Studio 拡張機能の自動バージョンがあります。

スクリーンショット ここに画像の説明を入力してください

ここに画像の説明を入力してください


だから私はそれをアンインストールしました、そして私はさらに言うことができます...それは元のcsprojファイルを変更します。非常に問題のある拡張だと思います。
マキシム

2
@Maxim最新バージョンを試してください、それはVS 2017で動作するはずです
Rady

優れたユーティリティ。vs2017では私にとってはうまくいきます。ドキュメントは少しわかりやすいかもしれませんが、それを(サイト経由で)インストールしてから、Nuget経由でMSBuildをインストールし、小さなプロジェクトに適用して、再生してビルドします。いいね。@Boogの答えはうまくいきませんでした。
err1

8

他の投稿で説明されているように、AssemblyInfoまたはプロジェクトプロパティの下のバージョン番号に*を設定しても、Visual Studio / .NETのすべてのバージョンで機能しません。

AfaikはVS 2005では機能しませんでした(ただし、VS 2003およびVS 2008では機能しました)。VS 2005の場合、以下を使用できます。コンパイル時にVisual Studio 2005バージョンのビルドとリビジョン番号を自動インクリメントします

ただし、厳密な名前のアセンブリでは、バージョン番号を自動的に変更することはお勧めしません。その理由は、厳密な名前のアセンブリ参照は常に特定のアセンブリバージョンへの参照であるため、参照されるアセンブリが再構築されるたびに、そのようなアセンブリへのすべての参照を更新する必要があるためです。Microsoft自身が.NET Frameworkアセンブリのバージョン番号を変更するのは、インターフェースに変更がある場合のみです。(注:私はまだMSDNでリンクを探していますが、それを読んでいます。)


VSのどのバージョンでも、*は[ビルド]または[リビジョン]ボックスにしか入力できないと思います。私はVS 2005を使用してこれを試してみましたが、うまくいきます。そのコードプロジェクトの記事の著者が何について話しているのかはわかりません。
MusiGenesis 2008

多分それはサービスパックで戻ってきたが、私はVS 2005使用していたとき、それが仕事に使用していなかったことを覚えておいてください
ダーク・フォルマール

2005では機能しません。サービスパックを探して報告します。
inspite

MusiGenesisには、自動バージョン管理を有効にするアドオンがインストールされている可能性があります。
Dirk Vollmar 2008

@divo:いいえ、私はアドオン恐怖症です。Visual Studio 2005 Professional SP1を持っています。*の問題は見たことがありませんが、通常は手動でインクリメントします。奇妙なバグのように聞こえます。
MusiGenesis 2008

6

増分(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ファイル(Propertiesサブフォルダー)をプロジェクトに含めます。

日付を戻すコード(年から秒まで):

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ファイルを更新するだけで、よりスマートになります。私はこれをかなりうまくいった。


それは完全に動作します。ただし、この正規表現%date:〜-4,4%。%date:〜-7,2 %% date:〜-10,2%。%time:〜0,2 %% time:〜3,2% 。%時間:〜-5,2%が」あまりにも複雑である
ケーリー

5

バージョン番号を「1.0。*」に設定すると、日付(ある時点からの日数)と時刻(真夜中から2分の1秒)の最後の2つの数字が自動的に入力されます


初めにこれをきちんと読んでいたなら、私は自分でムチ農業を救ったでしょう。THX
inspite


4

CakeはAssemblyInfoファイルのパッチをサポートしています。ケーキを手に入れれば、バージョンの自動インクリメントを実装する無限の方法が手に入ります。

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-アセンブリファイルのバージョンです。

バージョンだけでなく、その他すべての必要な情報にもパッチを適用できることに注意してください


3

プロジェクトに移動| プロパティ、アセンブリ情報、アセンブリバージョンの順に選択し、最後または最後から2番目のボックスに*を入力します(メジャーコンポーネントまたはマイナーコンポーネントを自動インクリメントすることはできません)。


2

MSBuildコミュニティタスク(http://msbuildtasks.tigris.org/)プロジェクトのAssemblyInfoタスクを使用して、.csproj / .vbprojファイルに統合します。

これには、バージョン番号を日付と時刻に関連付けるオプションなど、いくつかのオプションがあります。

オススメです。


2

今のところ、私のアプリケーションでは、

string ver = Application.ProductVersion;

戻り値 ver = 1.0.3251.27860

値3251は、2000年1月1日からの日数です。アプリケーションのスプラッシュスクリーンにバージョンの作成日を表示するために使用します。ユーザーとのやり取りでは、長い数字よりもコミュニケーションしやすい作成日を尋ねることができます。

(私は小さな会社をサポートする一人の部署です。このアプローチはあなたにはうまくいかないかもしれません。)


あなたの番号はすぐになくなるでしょう。私はyydddを使用します。これは年の最初から2桁の年と3桁の日、つまり最大365です。少なくとも、プログラムは2065年までコンパイルされます。その後、退職し、他の誰かにどのように処理したいかを理解させます。あなたのプログラムがその日にまだ委任されていることを考えると!
AaA 2018年

2

AssemblyInfoの変更はVS2012で機能します。これがVisual Studioでサポートされなくなったのは奇妙に思えますが、これはビルド/リリースプロセスの基本的な部分だったと思います。


2

バージョンの入手方法 {major}.{year}.1{date}.1{time}

これは実験的なものですが、私はそれが好きです。Jeff Atwood @ CodingHorror(リンク)に触発されました。

結果のバージョン番号は1.2016.10709.11641(2016-07-09 16:41を意味する)になり、

  • 貧弱な人はゼロパディング(愚かな先行1sを使って)
  • バージョン番号に埋め込まれた、ほぼ人間が読めるローカルの DateTime
  • メジャーバージョンをそのままにして、本当に重大な重大な変更を加えます。

[全般]を選択し、プロジェクトに新しいアイテムを追加します- >テキストテンプレートは、それを何か名前を付けCustomVersionNumberて(該当)コメントAssemblyVersionAssemblyFileVersion中を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}" #>")]

プログラムを毎分コンパイルしたり、1日に複数回デプロイしたりするわけではないので、技術的には、タイムパートが不必要に貴重な情報を占めています。メジャーマイナーには1と2を使用し、日付yyddd(2桁の年+同じ年の開始からddd日)、増分ビルド番号のために4日のままにします。
AaA

2

ファイルのバージョンを自動的にインクリメントするアプリケーションを作成しました。

  1. アプリケーションをダウンロード
  2. ビルド前のイベントコマンドラインに次の行を追加します。

    C:\ temp \ IncrementFileVersion.exe $(SolutionDir)\ Properties \ AssemblyInfo.cs

  3. プロジェクトをビルドする

シンプルに保つには、エラーが発生した場合にのみアプリがメッセージをスローします。正常に機能したことを確認するには、「アセンブリ情報」でファイルのバージョンを確認する必要があります

注:フィールドに入力するには、[アセンブリ情報]ボタンのソリューションをVisual Studioで再読み込みする必要がありますが、出力ファイルには更新されたバージョンが含まれます。

提案やリクエストについては、telson_alva @ yahoo.comまでメールでお問い合わせください。


2

Visual Studio 2019で

追加するだけでは不十分でした

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

ビルドするとこのエラーがスローされます

指定されたバージョン文字列は、必要な形式に準拠していません

解決

に設定DeterministicFalseた後、形式は最終的に受け入れられましたproject.csproj

<Deterministic>false</Deterministic>

編集:

なんらかの理由で、設定ファイルDeterministicFalseめちゃくちゃにして、ロードして別の場所に保存する設定。

回避策:

リビジョン番号を増やすためにビルド後のイベントを設定しました。

ビルド後のイベントバッチスクリプト

これは、autoincrement_version.ps1引数としてパスを渡すという名前のPowerShellスクリプトを呼び出しますAssemblyInfo.cs

if $(ConfigurationName) == Release (
PowerShell -ExecutionPolicy RemoteSigned $(ProjectDir)autoincrement_version.ps1 '$(ProjectDir)My Project\AssemblyInfo.cs'
)

Poweshellスクリプト

Regexを使用してリビジョン番号を自動インクリメントします

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

1

このタスクでは、次のようなコードを使用できます。

    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のファイル情報の任意の部分を更新できます(ただし、「標準」のディレクトリ構造を使用する必要があります)。




1

ここで答えるのは遅すぎるかもしれませんが、それが誰かの多忙な問題を解決することを願っています。

PowerShellスクリプトを使用して、すべてのプロジェクトのアセンブリバージョンを自動的に変更する方法。この記事はあなたの問題の多くを解決します。


PSの唯一の問題は、反応が遅く、実行できるように構成する必要があることです。私は、小さな実行可能ファイル、tt4ファイル、または任意のプログラマーが1つの方法で記述できるインラインコードを使用します。
AaA

0

ビルドを行うたびに、最下位桁が自動的にインクリメントされます。

他の人を更新する方法はわかりませんが、少なくともあなたはすでにそれを見ているは​​ずです...


1
VSは、最後の番号(通常はビルド番号)の増分を担当します。それ以外のすべて(つまり、その前の数字)はアプリケーションのバージョンを表すため、あなた次第です。
ОгњенШобајић

1
гњенШобајић:不正解です。Microsoftの番号付けスキームは、major.minor.build.revisionです(例:1.0.4.7)。アセンブリバージョンを「1.0。*」のようなものに設定すると、VSはビルド番号とリビジョン番号を設定します。2で割った、その場合には、ビルドは日々増加します、とリビジョンは、午前0時からの秒数になります
サイモンTewsi

0

Tortoise Subversionを使用している場合は、バージョン番号の1つをソースコードのSubversionリビジョン番号に関連付けることができます。これは非常に便利です(監査人もこれが好きです!)。これを行うには、事前ビルドでWCREVユーティリティを呼び出し、テンプレートからAssemblyInfo.csを生成します。

テンプレートがAssemblyInfo.wcrevと呼ばれ、通常のAssemblyInfo.csディレクトリにあり、亀がデフォルトのインストールディレクトリにある場合、Pre-Buildコマンドは次のようになります(NB Allが1行に表示されます)。

"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "$(ProjectDir)." "$(ProjectDir)Properties\AssemblyInfo.wcrev"  "$(ProjectDir)Properties\AssemblyInfo.cs"

テンプレートファイルには、wcrevトークン置換文字列が含まれます:$ WCREV $

[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

注:
AssemblyInfo.csが生成されたので、バージョン管理したくありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.