Чи можу я автоматично збільшити версію збірки файлів при використанні Visual Studio?


358

Мені було просто цікаво, як я можу автоматично збільшити збірку (і версію?) Своїх файлів за допомогою Visual Studio (2005).

Якщо я шукаю властивості скажімо C:\Windows\notepad.exe, на вкладці Версія надається "Версія файлу: 5.1.2600.2180". Я хотів би отримати ці класні номери у версії мого DLL теж, а не у версії 1.0.0.0, яка, припустимо, це трохи нудно.

Я спробував кілька речей, але це, здається, не є функцією поза коробкою, або, можливо, я просто дивлюся в неправильному місці (як зазвичай).

Я працюю переважно з веб-проектами ....

Я дивився на обидва:

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

і я не міг повірити, що так багато зусиль зробити щось є стандартною практикою.

EDIT: Він не працює у VS2005, наскільки я можу сказати ( http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx )



Чи є для цього рішення, які працюють для проектів C ++ у VS2005? Усі відповіді, здається, відносяться до .Net. Супутнє питання . Дякую
Діанна

У .Net Core проектах автоматичне збільшення збірникаVersion не працює за замовчуванням. Вам потрібно додати <Deterministic> False </Deterministic> до csproj. Дивіться автоматичну версію у Visual Studio 2017 (.NET Core)
Michael Freidgeim

Відповіді:


434

У візуальній студії 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 . Не те, що ти хочеш!

Однак якщо ви видалите другий з цих рядків і просто:

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

Тоді компілятор встановить версію файлу рівну версії продукту, і ви отримаєте бажаний результат автоматичного збільшення продукту та версії файлів, які синхронізуються. Напр. 1.0.3266.92689


2
Це працює так само добре, як і все інше, і працює у VS2005. Я сподівався на якесь раціональне число на зразок 1.0.1.56 замість цього я отримаю 1.0.3266.30135, але принаймні воно збільшується (хоч на якесь випадкове число: D)
дивлячись на

14
о, я просто прочитав його: він автоматично заповнить останні два номери з датою (в дні з певного моменту) та часом (половиною секунди з півночі)
дивлячись на

20
Приємний заклик про необхідність видалити атрибут AssemblyFileVersion, щоб це працювало!
David Faivre

76
Я усвідомлюю, що це давнє запитання, але хотів додати цей коментар для інших, хто знайде шлях до цієї відповіді. Якщо ви збільшуєте AssemblyVersion, будь-який проект, який використовує ваш dll, потрібно буде перекомпілювати. Однак якщо ви будете зберігати AssemblyVersion однаковим і збільшити AssemblyFileVersion самостійно, тоді ви зможете поміняти новий dll, не перекомпілюючи все, що використовує. Тож запитайте себе, це просто нова збірка чи я випускаю нову версію?
onefootswill

27
@ DD59 'Build' - це кількість днів з 1 січня 2000 року; "Ревізія" - це секунди з півночі, поділені на 2 (не на півсекунди, а на дві секунди). Дивіться тут: stackoverflow.com/a/3387167/11545
Крістіан Діаконеску

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
дивлячись на

3
це працює: [зборка: AssemblyVersion ("1.0. *")] // [зборка: AssemblyFileVersion ("1.0.0.0")]
дивлячись на

4
Не бажано змінювати номер AssemblyVersion під час циклу випуску. Натомість слід змінити AssemblyFileVersion. Дивіться мій пост у цьому блозі на цю тему: philippetruche.wordpress.com/2008/08/12/… Також дивіться чудовий пост Сюзанні Кук про те, коли потрібно змінити номери: blogs.msdn.com/b/suzcook/archive/2003/05/ 29 / 57148.aspx
Філіп

46
Будьте обережні, використовуючи *, він перестане працювати 4 червня 2179 року, коли день стане 65536
Ллойд Пауелл

3
@Shimmy: Додайте <Deterministic> False </Deterministic> до .csproj Автоматична
Майкл Фрейджім

53

Інший варіант зміни номерів версій у кожній збірці - це використання завдання Version 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>

Примітка: адаптуйте властивість StartDate до вашої мови. Наразі інваріантна культура не використовує.

Для третьої збірки 14 січня 2010 року це створює 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 бітові цілі числа.
Майк Пост

1
У мене виникли проблеми з установкою в VS2012 за допомогою пакетної консолі, тому рекомендую використовувати завантажені нічні інсталятори msi за адресою github.com/loresoft/msbuildtasks/downloads . Працює копіювати / вставляти з вищезазначеного. Дякую!
DaveO

Після того, як у цій публікації було відмовлено та відредаговано: "Ви також можете перевірити цей loresoft.com/projects/msbuildtasks/…, це може покращити базовий функціонал, описаний раніше."
radu florescu

1
Це не є життєздатним рішенням для тих, хто будує з TFS. У кінцевому рахунку, це додасть очікуване редагування до файлів VersionInfo.cs та version.txt. Для мене не бажано мати очікуване редагування для кожної збірки.
JDennis

@JDennis см тут для TFS версій рад ...
християнка

25

Я придумав рішення, подібне до християн, але не залежно від завдань спільноти MSBuild, для мене це не варіант, оскільки я не хочу встановлювати ці завдання для всіх наших розробників.

Я генерую код і компілюю до асамблеї і хочу автоматично збільшити номери версій. Однак я не можу використовувати VS 6.0. * Трюк AssemblyVersion, оскільки він автоматично збільшує кількість номерів щодня і порушує сумісність зі збірками, які використовують старіші числа збірки. Натомість я хочу мати жорстко закодований AssemblyVersion, але автоматично посилюється AssemblyFileVersion. Я досяг цього, вказавши AssemblyVersion у AssemblyInfo.cs і створивши VersionInfo.cs у MSBuild, як це,

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

Це створить файл VersionInfo.cs з атрибутом Assembly для AssemblyFileVersion, де версія відповідає схемі YY.MM.DD.TTTT з датою складання. Ви повинні включити цей файл у свій проект та створити його.


Чи підтримує MSBuild змінні? Було б краще розмістити його [System.DateTime]::Nowв іншому випадку, інакше існує стан перегонів, який може спричинити використання старого номера збірки, якщо будується близько півночі.
Едвард Брей

Ви визначили ці чотири властивості замість того, щоб поєднувати їх в єдине DateTime.ToStringдля демонстративних цілей, чи є певна причина?
мафу

Якщо подія BeforeBuild НЕ вогонь в VS2017 перевірити stackoverflow.com/questions/43921992 / ...
Rhys Jones

Це рішення найкраще підходить для всіх відповідей тут. Однак проблема полягає в тому, що часова мітка (або вміст файлу versioninfo.cs) не оновлюється, якщо ви будуєте проект вдруге, що має спричинити іншу хвилину. Якщо я закрию і перезавантажую проект, часова марка оновлюється. Це помилка від MSBuild? @Boog
Cary

16

Встановіть надбудову для збільшення версії збірки . Це дає вам більше контролю, ніж опція *.


Лише для VS2005 / 2008, з бета-версією для VS2010
SteveC

autobuildversion.codeplex.com/discussions/393154 Посилання DropBox у кінці потоку від r3mote203 призначене для 2010 року та працює у 2012 році (а може бути і у 2013 році).
Грауль

2
Я використовую автоматичні версії для VS2012, і він працює дуже добре.
червоний лук

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.*")]

Також як бічна примітка, третє число - це кількість днів після 2/1/2000, а четверте число - половина суми загальної секунди за день. Тож якщо ви збираєтесь опівночі, це має бути нуль.


12

Існує візуальне розширення студії Automatic Versions, яке підтримує Visual Studio (2012, 2013, 2015) 2017 та 2019.

Екранні знімки введіть тут опис зображення

введіть тут опис зображення


Тому я його видалив, і можу сказати ще більше ... він змінює оригінальний файл csproj. Я думаю, що це дуже проблематичне продовження.
Максим

2
@Maxim Спробуйте останню версію, вона повинна працювати на VS 2017
Rady

Відмінний утиль. Добре працює для мене в vs2017. Документи можуть бути дещо зрозумілішими, але встановіть його (через сайт), а потім встановіть MSBuild через Nuget, застосуйте до невеликого проекту та грайте та будуйте. Приємно. @ Відповідь Буга не спрацювала для мене, хоча він сказав саме те, що я намагався досягти.
err1

8

Встановлення * у номері версії в AssemblyInfo або під властивостями проекту, як описано в інших публікаціях, не працює з усіма версіями Visual Studio / .NET.

У Афаїку він не працював у VS 2005 (але у VS 2003 та VS 2008). Для VS 2005 ви можете використовувати наступне: Створення версії Auto Increment Visual Studio 2005 та номер перегляду під час компіляції .

Але майте на увазі, що зміна номера версії автоматично не рекомендується для сильних імен. Причина полягає в тому, що всі посилання на таку збірку повинні оновлюватися щоразу, коли посилається збірка перестроюється через те, що сильно названі посилання на збірки завжди є посиланням на конкретну версію збірки. Самі Microsoft змінюють номер версії збірок .NET Framework лише за наявності змін в інтерфейсах. (NB: Я все ще шукаю посилання в MSDN, де я це прочитав.)


Я думаю, що для будь-якої версії VS ви можете поставити * лише у полях Build або Revision. Я просто спробував це за допомогою VS 2005, і він працює чудово. Я не впевнений, про що говорить автор цієї статті кодового проекту.
MusiGenesis

Можливо, він повернувся з пакетом обслуговування, але я пам’ятаю, що він не працював, коли я використовував VS 2005.
Дірк Волмар

Це не працює з 2005 роком, я шукаю пакет оновлень і звіт.
незважаючи на

Можливо, у MusiGenesis встановлений додатковий додаток, який дозволяє автоматичну версію версій.
Дірк Волмар

@divo: ні, я додаю фобію. У мене просто Visual Studio 2005 Professional SP1. Я ніколи не бачив проблем із *, але зазвичай збільшую його вручну. Звучить дивний клоп.
MusiGenesis

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 (підпапка "Властивості") у свій проект

Код для повернення дати назад (років до секунд):

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, якщо виявлена ​​досить велика зміна). Я зробив це колись досить успішно.


Це прекрасно працює. Однак цей регулярний вираз% дата: ~ -4,4%.% Дата: ~ -7,2 %% дата: ~ -10,2%.% Час: ~ 0,2 %% час: ~ 3,2% .% час: ~ -5,2% "просто надто складно.
Кері

5

Встановіть номер версії на "1.0. *", І він автоматично заповнить останні два числа датою (в днях з певного моменту) та часом (половиною секунди з півночі)


ей, якби я на початку прочитав це правильно, я б врятував себе мухо-агро. thx
дивлячись на


4

Торт підтримує виправлення файлів 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

Використовуйте завдання AssemblyInfo із завдань спільноти MSBuild ( http://msbuildtasks.tigris.org/ ) та інтегруйте його у свій файл .csproj / .vbproj.

Він має ряд варіантів, включаючи один, щоб прив’язати номер версії до дати та часу дня.

Рекомендовано


2

Наразі для моєї заяви

string ver = Application.ProductVersion;

повертає ver = 1.0.3251.27860

Значення 3251 - це кількість днів з часу 1/1/2000. Я використовую його для розміщення дати створення версії на екрані сплеску моєї програми. Під час роботи з користувачем я можу попросити дату створення, яку простіше спілкуватись, ніж деякий довгий номер.

(Я підрозділ, який підтримує невелику компанію. Цей підхід може не працювати для вас.)


Ваш номер швидко закінчиться Я б використовував yyddd, який є двозначним роком і 3-значним днем ​​від початку року, який становить максимум 365. Принаймні, ваша програма складеться до 2065 року. Тоді ви б вийшли на пенсію і нехай хтось інший зрозуміє, як вони хочуть це впоратися. з огляду на те, що на цю дату ваша програма все ще здається!
AaA

2

Зміна AssemblyInfo працює у VS2012. Здається дивним, що у Visual Studio немає більшої підтримки для цього, ви можете подумати, що це була основна частина процесу збирання / випуску.


2

Як отримати версію {major}.{year}.1{date}.1{time}

Цей вид експериментальний, але мені це подобається. Натхненний Джефф Етвуд @ CodingHorror ( посилання ).

Отриманий номер версії стає 1.2016.10709.11641(тобто 2016-07-09 16:41), що дозволяє

  • бідна ман нульова прокладка (з тупими ведучими 1)
  • локальний 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}" #>")]

Ви не збираєте свою програму щохвилини або розгортаєте не один раз на день, тому технічно часова частина зайво займає цінну інформацію, я б використовував 1-ю та 2-ю для головних другорядних і просто використовую 3-й номер для дати yyddd (двозначний рік + день DDD від початку того ж року) і залишити 4-й для додаткового номера збірки.
AaA

2

Я створив додаток для автоматичного збільшення версії файлу.

  1. Завантажити додаток
  2. додати наступний рядок до командного рядка попередньої збірки події

    C: \ temp \ IncrementFileVersion.exe $ (SolutionDir) \ Властивості \ AssemblyInfo.cs

  3. Побудуйте проект

Щоб зробити його простим, додаток передає повідомлення лише у випадку помилки, щоб підтвердити його справність, вам потрібно перевірити версію файлу в розділі "Інформація про збірку"

Примітка. Для заповнення полів вам доведеться перезавантажити рішення у Visual studio для кнопки "Інформація про складання", однак у вашому вихідному файлі буде оновлена ​​версія.

Пропозиції та запити, будь ласка, напишіть мені на електронну адресу telson_alva@yahoo.com


2

У Visual Studio 2019

Мені цього було недостатньо

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

При побудові він кидає мені цю помилку

Вказаний рядок версії не відповідає необхідному формату

Рішення

Формат був остаточно прийнятий після того, як я встановив , Deterministicщоб Falseвproject.csproj

<Deterministic>false</Deterministic>

Редагувати:

Чомусь налаштувавши Deterministicдля того, щоб Falseзіпсувати мій конфігураційний файл, завантажуючи його та зберігаючи його в різних місцях.

Обхід:

Я встановлюю подію після складання, щоб збільшити номер редакції:

Пакетний сценарій після побудови подій

Це викликає скрипт powerhell, названий autoincrement_version.ps1проходженням як аргументом шляхAssemblyInfo.cs

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

Скрипт з порошком

Він автоматично збільшує номер редакції за допомогою 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

Я використовую цей підхід https://stackoverflow.com/a/827209/3975786 , розміщуючи шаблон T4 у "Елементи рішення" та використовуючи його з "Додати як посилання" у межах кожного проекту.


1

Можливо, тут вже пізно відповідати, але сподіваюся, що вирішить чиюсь суєтну проблему.

Автоматичний спосіб зміни версії монтажу всіх ваших проектів за допомогою сценарію PowerShell. Ця стаття вирішить багато ваших проблем.


Єдина проблема PS - це повільна реакція і вимагає конфігурації, щоб вона могла працювати. Я б хотів із невеликим виконуваним файлом, файлом tt4 або навіть вбудованим кодом, який, на мою думку, будь-який програміст може написати одним способом.
AaA

0

Кожен раз, коли я будую його, автоматично збільшується найменш значуща цифра.

Я не маю уявлення, як оновити інші, але ви повинні принаймні бачити це вже ...


1
VS відповідає за збільшення останнього числа, яке зазвичай є номером збірки. Все інше (тобто цифри до цього) залежить від вас, оскільки вони представляють версію вашої заявки.
Огњен Шобајић

1
Огњен Шобајић: Не зовсім правильно. Схема нумерації Microsoft є основною.minor.build.revision, наприклад, 1.0.4.7. Якщо ви встановите версію збірки на зразок "1.0. *", Тоді VS встановить номери складання та перегляду для вас. У такому випадку нарощування буде збільшуватися щодня, а перегляд буде число секунд з півночі, поділене на 2.
Саймон Тевсі

0

Для всіх, хто використовує Subversion Tortoise, ви можете прив’язати один із номерів своєї версії до ревізійного номера субверсії вашого вихідного коду. Я вважаю це дуже корисним (аудиторам це теж подобається!). Виконуєте це, зателефонувавши утиліту WCREV у попередній збірці та генеруючи ваш AssemblyInfo.cs з шаблону.

Якщо ваш шаблон називається AssemblyInfo.wcrev і знаходиться в звичайному каталозі AssemblyInfo.cs, а черепаха знаходиться в каталозі встановлення за замовчуванням, то ваша команда Pre-Build виглядає так (NB Усі в одному рядку):

"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 генерується, ви не хочете, щоб його версія контролювалася.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.