Версия программы

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Версия программы

Сообщение natcap » 31.07.2009 (Пт) 11:13

В свойствах у версии публикации поставила автоизменение версии, задала ненулевое значение (1.1.12.1), использую для получения версии программы Application.ProductVersion.ToString но получаю все время 1.0.0.0

Что я делаю не так?
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

Dmitry81
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 52
Зарегистрирован: 20.06.2009 (Сб) 0:43
Откуда: Украина, Запорожье

Re: Версия программы

Сообщение Dmitry81 » 31.07.2009 (Пт) 13:46

А так:
Код: Выделить всё
My.Application.Info.Version.ToString

или
Код: Выделить всё
String.Format("Версия {0}", My.Application.Info.Version.ToString)
А.Эйнштейн: Есть две бесконечные вещи - вселенная и человеческая глупость. Хотя, насчет вселенной я сомневаюсь...

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: Версия программы

Сообщение natcap » 31.07.2009 (Пт) 13:59

спасибо, но те же грабли, вид в профиль: 1.0.0.0
как этот дурацкой .Нет заставить автоматом нумеровать версии при компиляции?

П.С. как замечательно и просто это было в 6.0 :(
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

Dmitry81
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 52
Зарегистрирован: 20.06.2009 (Сб) 0:43
Откуда: Украина, Запорожье

Re: Версия программы

Сообщение Dmitry81 » 31.07.2009 (Пт) 14:09

Хм... действительно. Хотя я и так это всегда ручками заполнял. Он, гад, только при публикации может автоматом номера сборки менять (там есть такой флажок). А вот при компиляции, похоже, нет... А ты публиковала, или просто меняла номер версии и компилила?
Похоже, номер версии будет новый только после ПаблишНау...
Я так обычно делаю:
Ручками меняю версию сборки в свойствах проекта (application>assembli information>assembli version)
ну а потом строку читау так, как в предыдущем посте писал.
А.Эйнштейн: Есть две бесконечные вещи - вселенная и человеческая глупость. Хотя, насчет вселенной я сомневаюсь...

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: Версия программы

Сообщение natcap » 31.07.2009 (Пт) 14:37

убить их мало, если так... у меня так по пол года будет одна версия, пока начальник по шее не даст - я же такое в принципе не помню, что поменять надо :((((
делала и билд и паблиш - версия там поменялась после публикацииа, НО при запуске откомпилированного проекта все равно 1.0.0.0

+ еще вопрос: в той же 6.0 можно было заполнить инфу о фирме производителе и прочем, тут это найти не могу :( а в свойствах откомпиленного проекта какая-то левая фирма прописывается
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

Dmitry81
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 52
Зарегистрирован: 20.06.2009 (Сб) 0:43
Откуда: Украина, Запорожье

Re: Версия программы

Сообщение Dmitry81 » 31.07.2009 (Пт) 15:08

там же: application>assembli information
А потом:
my.Application .Info... и далее из списка IntelliSens
ниче, через время привыкнешь. Я специально себе сделал форму frmAbout на все случаи жизни. Потом ее в нужный проект втаскиваю и счастье...
Одно только плохо - номер сборки при компилляции не меняется АВТОМАТОМ...
кстати, frmSplash тоже универсальную сваял... главное, творчески код сваять и тогда нужно только форму к проекту прикрутить, а нужные значения сами в ней отобразятся.
Изображение
Последний раз редактировалось Dmitry81 31.07.2009 (Пт) 15:15, всего редактировалось 1 раз.
А.Эйнштейн: Есть две бесконечные вещи - вселенная и человеческая глупость. Хотя, насчет вселенной я сомневаюсь...

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Версия программы

Сообщение MIT » 31.07.2009 (Пт) 15:13

natcap писал(а):убить их мало, если так...
Убить их надо за бету VS2010 :? ...

А как насчет такой идеи: версия определяется переменной в модуле, а в настройках проекта в качестве версии указывается название этой переменной? Помнится я тоже как-то мучился с траблой по поводу версии (у меня она постоянно обнулялась), так вот решение, по моему, и нашлось у меня таким образом.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Dmitry81
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 52
Зарегистрирован: 20.06.2009 (Сб) 0:43
Откуда: Украина, Запорожье

Re: Версия программы

Сообщение Dmitry81 » 31.07.2009 (Пт) 15:17

Убить их надо за бету VS2010 :? ...

а что в 2005й по другому этот момент?
Да и незачем переменные лепить.
Вот сюда гляньте: http://pixs.ru/showimage/assemblyIn_1615560_276270.png
а как данные считать отсюда - см мой предыдущий пост
А.Эйнштейн: Есть две бесконечные вещи - вселенная и человеческая глупость. Хотя, насчет вселенной я сомневаюсь...

MIT
Мега гуру
Мега гуру
Аватара пользователя
 
Сообщения: 2211
Зарегистрирован: 17.09.2006 (Вс) 22:46

Re: Версия программы

Сообщение MIT » 31.07.2009 (Пт) 15:25

Угу. Именно эти данные у меня с успехом и обнулялись при каждой компиляции...

Dmitry81 писал(а):а что в 2005й по другому этот момент?
А ты бетой десятки пользовался? Запустив ее про такие пустяки как версия вообще забудешь.
Изображение
You can change your face, but can`t change your mind. No matter what you do.
Создайте еще более понятный интерфейс и мир создаст еще более тупого юзера. (с) Баш

Dmitry81
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 52
Зарегистрирован: 20.06.2009 (Сб) 0:43
Откуда: Украина, Запорожье

Re: Версия программы

Сообщение Dmitry81 » 31.07.2009 (Пт) 15:33

MIT писал(а):Угу. Именно эти данные у меня с успехом и обнулялись при каждой компиляции...
А ты бетой десятки пользовался? Запустив ее про такие пустяки как версия вообще забудешь.

Нет, не пользовался. И пока не собираюсь. Возможностей 8й версии мне за глаза хватает. Кстати, у меня ниче не обнуляется...
А.Эйнштейн: Есть две бесконечные вещи - вселенная и человеческая глупость. Хотя, насчет вселенной я сомневаюсь...

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: Версия программы

Сообщение natcap » 31.07.2009 (Пт) 23:56

Спасибо, инфу о фирме поменяла

но НАФИГА ломать то, что было хорошо? Зла не хватает.. вот делать мне больше нефиг, как помнить о том, что надо версию сменить, собирая очередной дистрибутив в 4 утра .... А потом юзвери будут вопить что версия по пол года не меняется

А вот такой идей
при запуске на отладку брать последний цифирь из версии, увеличивать на один и пихать назад...
только не знаю как сделать...

ну или как-то получать версию публикации и пихать ее в версию программы
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)

Dmitry81
Обычный пользователь
Обычный пользователь
Аватара пользователя
 
Сообщения: 52
Зарегистрирован: 20.06.2009 (Сб) 0:43
Откуда: Украина, Запорожье

Re: Версия программы

Сообщение Dmitry81 » 01.08.2009 (Сб) 1:15

Да проблема даже не в том, чтоб менять именно при отладочном запуске (хотя и это тож вопрос...), а в том, что эти свойства в рантайме только для чтения. Ну можно еще, например, в событие Лоад главного окна приложения или в процедуру Маин (ну что там у кого) пихать первой строкой:
Код: Выделить всё
MsgBox("Смени версию, девелопер!")
:)
Ну а вообще-то гады эти мелкомягкие...
А.Эйнштейн: Есть две бесконечные вещи - вселенная и человеческая глупость. Хотя, насчет вселенной я сомневаюсь...

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Версия программы

Сообщение Nord777 » 01.08.2009 (Сб) 11:37

natcap, если ты используешь технологию ClickOnce, то версию получай так:
My.Application.Deployment.CurrentVersion.ToString
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Nord777
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1144
Зарегистрирован: 22.02.2004 (Вс) 13:15
Откуда: Подольск

Re: Версия программы

Сообщение Nord777 » 01.08.2009 (Сб) 22:40

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


Свойства проекта - вкладка <<Компиляция>> - кнопка <<События построения...>>
В текстовом поле <<Командная строка события "Перед построением">> прописать следующую строку:
d:\ChangeVersion.exe $(ProjectDir)

Изображение
Это значит, что перед построением проекта, будет запушена программа ChangeVersion.exe, находящаяся в корне диска d:
и этой программе будет передана командная строка $(ProjectDir).
$(ProjectDir) - это внутренняя переменная или макрос Visual Studio.
Нас не сильно волнует, что это на самом деле, главное,
что программе ChangeVersion.exe передаётся в качестве командной строки путь к проекту.
Сведения о приложении хранятся в файле AssemblyInfo.vb, который лежит в папке My Project.
К слову, там же лежат файлы:
Resources.resx
Application.Designer.vb
Resources.Designer.vb
Settings.Designer.vb
Settings.settings
app.manifest
Application.myapp

Но нас интересует лишь AssemblyInfo.vb.
Именно там находятся строки:
Код: Выделить всё
<Assembly: AssemblyVersionAttribute("4.3.2.4")>
<Assembly: AssemblyFileVersion("1.0.0.1")>

Значения этих строк отображаются во вкладке "Версия" свойствах файла.
Изображение
ChangeVersion.exe - это приложение, которое должно изменить атрибуты AssemblyVersionAttribute и AssemblyFileVersion
в фале AssemblyInfo.vb перед компиляцией проекта.

Создание приложения ChangeVersion

1) Файл - Создать проект - Приложение Windows Forms - Ok
2) Свойства проекта - вкладка "Приложение". Снять флажок "Включть исполняющую среду"
3) В выпадающем списке "Автоматически запускаемый проект" выбрать Sub Main
4) В обозревателе решений удалить автоматически созданный Form1.vb
5) В обозревателе решений правый клик на проекте - добавить - модуль...
(Замечу, что никто не мешает вам создать консольное приложение)
Изображение
Код модуля:
Код: Выделить всё
Imports System.IO
Imports System.Text.RegularExpressions
Imports System.Environment

Module Module1
   Enum enumVersion As Integer
      AssemblyVersion = 1
      AssemblyFileVersion = 2
   End Enum

   Const AssemblyVersionPat$ = _
         "<Assembly:\s+AssemblyVersionAttribute" & _
                       "\(\x22 (?<AsmVer>" & _
                           "(?<major>\d{1,5}) \. (?<minor>\d{1,5}) \." & _
                           "(?<build>\d{1,5}) \. (?<revision>\d{1,5})" & _
                       ") \x22\)"

   Const AssemblyFileVersionPat$ = _
         "<Assembly:\s+AssemblyFileVersion" & _
                       "\(\x22 (?<AsmVer>" & _
                           "(?<major>\d{1,5}) \. (?<minor>\d{1,5}) \." & _
                           "(?<build>\d{1,5}) \. (?<revision>\d{1,5})" & _
                       ") \x22\)"
   Dim AsmVerGrp As Group
   Dim TxtInfo, AssemblyInfoPath As String
   Dim options As RegexOptions = RegexOptions.ExplicitCapture Or _
                                 RegexOptions.IgnoreCase Or _
                                 RegexOptions.IgnorePatternWhitespace

'=======================================================
   Sub Main()
      Dim Ver As structVersion

      AssemblyInfoPath = GetPathToAssemblyInfo()
      Ver = GetVersion(enumVersion.AssemblyFileVersion)

      If Ver.Revision >= UShort.MaxValue Then
         MsgBox("Номер ревизии уже имеет максимальное значение.")
         [Exit](-100)
      End If

      Ver.Revision += 1
      TxtInfo = TxtInfo.Remove(AsmVerGrp.Index, AsmVerGrp.Length)
      TxtInfo = TxtInfo.Insert(AsmVerGrp.Index, Ver.ToString)
      MsgBox(TxtInfo)

      My.Computer.FileSystem.WriteAllText(AssemblyInfoPath, TxtInfo, False, System.Text.Encoding.UTF8)
   End Sub
'=======================================================
   Function GetVersion(ByVal What As enumVersion) As structVersion
      Dim Pattern As String = Nothing
      Select Case What
         Case enumVersion.AssemblyVersion : Pattern = AssemblyVersionPat
         Case enumVersion.AssemblyFileVersion : Pattern = AssemblyFileVersionPat$
      End Select

      If Not File.Exists(AssemblyInfoPath) Then
         MsgBox("AssemblyInfo.vb не найден")
         [Exit](-100)
      End If
      TxtInfo = My.Computer.FileSystem.ReadAllText(AssemblyInfoPath)
      Dim M As Match = Regex.Match(TxtInfo, Pattern, options)

      If Not M.Success Then
         MsgBox("Версия сборки не найдена")
         [Exit](-100)
      End If

      Dim Ver As New structVersion
      AsmVerGrp = M.Groups("AsmVer")
      Ver.Major = UShort.Parse(M.Groups("major").Value)
      Ver.Minor = UShort.Parse(M.Groups("minor").Value)
      Ver.Build = UShort.Parse(M.Groups("build").Value)
      Ver.Revision = UShort.Parse(M.Groups("revision").Value)
      Return Ver
   End Function
'=======================================================
   Function GetCLine() As String
      Dim M As Match = Regex.Match(CommandLine, "\.exe\s+(?<CL>.*)", options)
      Return M.Groups("CL").Value
   End Function

   Function GetPathToAssemblyInfo() As String
      Return Path.Combine(GetCLine, "My Project\AssemblyInfo.vb")
   End Function
'=======================================================


   Structure structVersion
      Dim Major, Minor, Build, Revision As UShort
      Public Overrides Function ToString() As String
         Return String.Format("{0}.{1}.{2}.{3}", Major, Minor, Build, Revision)
      End Function
   End Structure

End Module


Данный пример изменяет только поле Revision.
Можно леко переделать для изменения любого(хоть всех) из четырёх полей.
Вложения
Свойства файла.png
Свойства файла.png (38.21 Кб) Просмотров: 1927
Свойства проекта.png
Свойства проекта.png (47.32 Кб) Просмотров: 1927
ChangeVersion.png
ChangeVersion.png (18.05 Кб) Просмотров: 1929
Microsoft Visual Studio 2008
Microsoft .NET Framework 3.5

Admiralisimys
Постоялец
Постоялец
 
Сообщения: 318
Зарегистрирован: 01.06.2009 (Пн) 10:26

Re: Версия программы

Сообщение Admiralisimys » 04.08.2009 (Вт) 12:49

natcap непосредственно данная инфа указывается в файле проэкта - AssemblyInfo.vb, ну а если компилить один vb файл тогда можно указывать так
Код: Выделить всё
Imports System
Imports System.Drawing
Imports System.Windows.Forms
Imports System.Reflection
'+ ещё и Imports System.Runtime.InteropServices если нужно указать Assembly: ComVisible и Assembly: Guid

<Assembly: AssemblyTitle("Title / Заголовок"), _
Assembly: AssemblyDescription("Description / Описание"), _
Assembly: AssemblyCompany("Company / Производитель"), _
Assembly: AssemblyProduct("Product Name / Название продукта"), _
Assembly: AssemblyCopyright("The owner of the copyright / Владелец авторского права"), _
Assembly: AssemblyTrademark("Trademark / Товарный знак"), _
Assembly: CLSCompliant(True), _
Assembly: AssemblyVersion("7.6.16385.09071")>
'Assembly: AssemblyVersion("1.0.*")> строчка по умолчанию

Class Form1
    Inherits Form
    Dim MenuStrip1 As New MenuStrip
    Dim FileToolStripMenuItem As New ToolStripMenuItem
    Dim ExitToolStripMenuItem As New ToolStripMenuItem
    Dim HelpToolStripMenuItem As New ToolStripMenuItem
    Dim AboutToolStripMenuItem As New ToolStripMenuItem
    Shared Sub Main()
        Application.Run(New Form1)
    End Sub
    Sub New()
        MenuStrip1.Parent = Me
        MenuStrip1.Items.AddRange(New ToolStripItem() {FileToolStripMenuItem, HelpToolStripMenuItem})
        FileToolStripMenuItem.Text = "Файл"
        FileToolStripMenuItem.DropDownItems.AddRange(New ToolStripItem() {ExitToolStripMenuItem})
        ExitToolStripMenuItem.Text = "Выход"
        AddHandler ExitToolStripMenuItem.Click, AddressOf ExitToolStripMenuItem_Click
        HelpToolStripMenuItem.Text = "Помощь"
        HelpToolStripMenuItem.DropDownItems.AddRange(New ToolStripItem() {AboutToolStripMenuItem})
        AboutToolStripMenuItem.Text = "О программе..."
        AddHandler AboutToolStripMenuItem.Click, AddressOf AboutToolStripMenuItem_Click
    End Sub
    Private Sub ExitToolStripMenuItem_Click(ByVal Obj As Object, ByVal mne As EventArgs)
        End
    End Sub
    Private Sub AboutToolStripMenuItem_Click(ByVal Obj As Object, ByVal mne As EventArgs)
        MsgBox(Application.CompanyName & vbNewLine & _
               Application.ProductName & vbNewLine & _
               Application.ProductVersion, MsgBoxStyle.Information, "Информацыя о программе")
    End Sub
End Class

К сожалениию полную инфу следующим способом
Код: Выделить всё
'       MsgBox( _
        '       AssemblyTitleAttribute & vbNewLine & _
        '       AssemblyDescriptionAttribute & vbNewLine & _
        '       AssemblyCompanyAttribute & vbNewLine & _
        '       AssemblyProductAttribute & vbNewLine & _
        '       AssemblyCopyrightAttribute & vbNewLine & _
        '_
        '       AssemblyTrademarkAttribute & vbNewLine & _
        '       AssemblyVersionAttribute & vbNewLine, MsgBoxStyle.Information, "Информацыя о программе")

получить не удалось.

natcap
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 234
Зарегистрирован: 25.06.2003 (Ср) 13:15
Откуда: Москва

Re: Версия программы

Сообщение natcap » 04.08.2009 (Вт) 18:01

Nord777, СПАСИБИЩЕ, все доходчиво и то, что надо :)

Всем принявшим участие в решение данной проблемы тоже огромное спасибо :)
Вложения
ChangeVersion.rar
Скоипилено по коду Nord777, если вдруг кому еще надо и лень возиться :)
(6.1 Кб) Скачиваний: 90
Медленно переезжаю с 6.0 на 2008 .... задавая тонны глупых вопросов :)


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 79

    TopList