Как зайти в Даркнет?!
25th January, 01:11
94
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
1228
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
1029
0
Очень долго работает Update запрос Oracle
27th January, 09:58
969
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
959
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
995
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1782
0
период по дням
25th October, 10:44
4001
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3775
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4661
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4442
0
Помогите пожалуйста решить задачи
24th November, 23:53
6159
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4393
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4442
0
Метода Крамера С++
23rd October, 11:55
4356
0
помогите решить задачу на C++
22nd October, 17:31
4040
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4533
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2643
0
Автоматическое обновление номера версии
Я бы хотел, чтобы свойство version моего приложения увеличивалось для каждой сборки, но я не уверен, как включить эту функциональность в Visual Studio (2005/2008)., я пытался указать AssemblyVersion как 1.0. но это не дает мне точно то, что я хочу.
Я также использую файл настроек и в предыдущих попытках, когда версия assembly изменила мои настройки, они были сброшены по умолчанию, так как приложение искало файл настроек в другом каталоге.
Я хотел бы иметь возможность отображать номер версии в виде 1.1.38, поэтому, когда пользователь находит проблему, я могу зарегистрировать версию, которую он использует, а также сказать им обновить, если у них есть старая версия.
Кроме того, мы хотели бы получить краткое объяснение того, как работает управление версиями. Когда увеличивается число сборок и ревизий?
С вещами "Built in" вы не можете, как и с использованием 1.0.* или 1.0.0.* заменит номера ревизии и сборки на кодированные date/timestamp,, что обычно также является хорошим способом.
Дополнительные сведения см. В документации по компоновщику Assembly в теге /v.
Что касается автоматического увеличения числа, используйте задачу AssemblyInfo:
Это можно настроить для автоматического увеличения номера сборки.
Есть 2 проблемы:
- Каждое из 4 чисел в строке версии ограничено числом 65535. Это ограничение Windows и вряд ли будет исправлено.
- Использование with with Subversion требует небольшого изменения:
Тогда получить номер версии будет довольно просто:
Version v = Assembly.GetExecutingAssembly().GetName().Version;
string About = string.Format(CultureInfo.InvariantCulture, @"YourApp Version {0}.{1}.{2} (r{3})", v.Major, v.Minor, v.Build, v.Revision);
И, чтобы уточнить: в .net или, по крайней мере, в C#, сборка на самом деле является номером THIRD, а не четвертым, как могли бы ожидать некоторые люди (например, разработчики Delphi, которые привыкли к Major.Minor.Release.Build).
В .net году это будет Major.Minor.Build.Revision.
VS.NET по умолчанию версия Assembly имеет значение 1.0.* и использует следующую логику при автоматическом инкрементировании: он устанавливает часть сборки в число дней с 1 января 2000 года, а часть ревизии-в число секунд с полуночи по местному времени, разделенное на два. Смотрите эту статью MSDN .
Версия Assembly находится в файле assemblyinfo.vb или 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.0.0")>
<Assembly: AssemblyFileVersion("1.0.0.0")>
Я обнаружил, что это хорошо работает, чтобы просто отобразить дату последней сборки, используя следующее везде, где требуется версия продукта:
System.IO.File.GetLastWriteTime(System.Reflection.Assembly.GetExecutingAssembly().Location).ToString("yyyy.MM.dd.HH.mm.ss")
Вместо того, чтобы пытаться получить версию из чего-то вроде следующего:
System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
object[] attributes = assembly.GetCustomAttributes(typeof(System.Reflection.AssemblyFileVersionAttribute), false);
object attribute = null;
if (attributes.Length > 0)
{
attribute = attributes[0] as System.Reflection.AssemblyFileVersionAttribute;
}
Какую систему управления версиями вы используете?
Почти все они имеют некоторую форму тега $ Id$, который расширяется при возврате файла.
Я обычно использую какую-то форму хакерства, чтобы отобразить это как номер версии.
Другой альтернативой является использование даты в качестве номера сборки: 080803-1448
[Visual Studio 2017, .csproj свойства]
Чтобы автоматически обновить ваше свойство PackageVersion/Version/AssemblyVersion (или любое другое свойство), сначала создайте новый класс Microsoft.Build.Utilities.Task , который получит ваш текущий номер сборки и отправит обратно обновленный номер (я рекомендую создать отдельный проект только для этого класса).
Я вручную обновляю номера major.minor, но пусть MSBuild автоматически обновит номер сборки (1.1. 1, 1.1. 2, 1.1. 3 и т. д. :)
using Microsoft.Build.Framework;
using System;
using System.Collections.Generic;
using System.Text;
public class RefreshVersion : Microsoft.Build.Utilities.Task
{
[Output]
public string NewVersionString { get; set; }
public string CurrentVersionString { get; set; }
public override bool Execute()
{
Version currentVersion = new Version(CurrentVersionString ?? "1.0.0");
DateTime d = DateTime.Now;
NewVersionString = new Version(currentVersion.Major,
currentVersion.Minor, currentVersion.Build+1).ToString();
return true;
}
}
Затем вызовите недавно созданную задачу на MSBuild процесс добавления следующего кода в ваш файл .csproj:
<Project Sdk="Microsoft.NET.Sdk">
...
<UsingTask TaskName="RefreshVersion" AssemblyFile="$(MSBuildThisFileFullPath)\..\..\<dll path>\BuildTasks.dll" />
<Target Name="RefreshVersionBuildTask" BeforeTargets="Pack" Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<RefreshVersion CurrentVersionString="$(PackageVersion)">
<Output TaskParameter="NewVersionString" PropertyName="NewVersionString" />
</RefreshVersion>
<Message Text="Updating package version number to $(NewVersionString)..." Importance="high" />
<XmlPoke XmlInputPath="$(MSBuildProjectDirectory)\mustache.website.sdk.dotNET.csproj" Query="/Project/PropertyGroup/PackageVersion" Value="$(NewVersionString)" />
</Target>
...
<PropertyGroup>
..
<PackageVersion>1.1.4</PackageVersion>
..
При выборе параметра проекта пакета Visual Studio (просто измените значение на BeforeTargets="Build" для выполнения задачи перед сборкой) код RefreshVersion будет вызван для вычисления нового номера версии, а задача XmlPoke обновит ваше свойство .csproj соответствующим образом (да, он изменит файл).
При работе с библиотеками NuGet я также отправляю пакет в репозиторий NuGet, просто добавляя следующую задачу сборки в предыдущий пример.
<Message Text="Uploading package to NuGet..." Importance="high" />
<Exec WorkingDirectory="$(MSBuildProjectDirectory)\bin\release" Command="c:\nuget\nuget push *.nupkg -Source https://www.nuget.org/api/v2/package" IgnoreExitCode="true" />
c:\nuget\nuget -это то место, где у меня есть клиент NuGet (не забудьте сохранить свой ключ NuGet API, позвонив nuget SetApiKey <my-api-key> , или включить ключ в push-вызов NuGet).
Просто на случай, если это кому-то поможет ^_^.
Некоторое время назад я написал быстрый и грязный exe, который обновил бы версию #в assemblyinfo.{cs/vb} - я также использовал rxfind.exe (простой и мощный инструмент замены поиска на основе regex), чтобы сделать обновление из командной строки как часть процесса сборки. Пара других полезных подсказок:
- разделите assemblyinfo на части продукта (название компании, Версия и т. д.) и assembly специфических частей (assembly имени etc.). Видеть здесь
- Кроме того, я использую subversion, поэтому я счел полезным установить номер сборки в номер редакции subversion, тем самым делая очень легким всегда возвращаться к кодовой базе, которая сгенерировала assembly (например, 1.4.100.1502 был построен из ревизии 1502).
Если требуется автоматически увеличивающееся число, которое обновляется каждый раз при выполнении компиляции, можно использовать VersionUpdater из события предварительной сборки. Ваше событие предварительной сборки может проверить конфигурацию сборки, если вы предпочитаете, чтобы номер версии увеличивался только для сборки выпуска (например).