Как получить версию сборки в Team Build 2010 Workflow - PullRequest
4 голосов
/ 04 октября 2011

Есть ли способ получить номер версии сборки, который мы ранее использовали для работы с Msbuild с Team Build 2010 Workflow? Вот простой пример того, как мы использовали для получения версии сборки с %(Info.Version).

  <Target Name="CheckFileVersion" DependsOnTargets="AfterDrop">
   <ItemGroup>
      <MyAssemblies Include='$(DropLocation)\$(BuildNumber)\Release\MyApp.exe' />
    </ItemGroup>
    <GetAssemblyIdentity AssemblyFiles="@(MyAssemblies)">
      <Output TaskParameter="Assemblies" ItemName="Info"/>
    </GetAssemblyIdentity>
  </Target>

Я нашел несколько методов для создания пользовательских Деятельностей со многими строками кода, но я думаю, что должен быть более простой способ сделать это.

Ответы [ 3 ]

3 голосов
/ 20 сентября 2012

GoRoS имел правильную идею, но он работает правильно только в первый раз.

Чтобы избежать этой проблемы, вы должны запустить этот код или аналогичный код в другом домене приложений, отличном от Агента сборки, Powershell и InvokeProcessActivity, чтобы решить нашу проблему.

GetAssemblyVersionNumber.ps1:

$error.clear()

if ($args.length -ne 1)
{
   Write-Error "Usage: GetAssemblyVersionNumber.ps1 <Assembly>"
   exit 1
}

# Now load the assembly
$assembly = [System.Reflection.Assembly]::Loadfile($args[0])

# Get name, version and display the results
$name = $assembly.GetName()
Write-Host $name.version

И в шаблон процесса сборки добавляется следующее

InvokeProcessActivity
    Name: Call Powershell Version Script
    Filename: "powershell.exe"
    Arguments: "-NonInteractive -NoProfile -Command " _
               + "c:\Builds\GetAssemblyVersionNumber.ps1" _
               + " '" + BuildDirectory + "\Binaries\Foobar.dll'"
    Handle Standard Output (stdOutput)

        AssignActivity
            To: VersionInfo
            Value: stdOutput
1 голос
/ 05 октября 2011

Наконец-то я нашел быстрый и простой способ выполнить нужную операцию.Используя простое задание Assign, я написал следующий код:

To:     VersionInfo
Value:  System.Reflection.Assembly.UnsafeLoadFrom(BuildDetail.DropLocation + _ 
        "\MyApplication.exe").GetName().Version.ToString()

После этого я могу использовать переменную VersionInfo по своему желанию.Я признаю, что предпочел бы избегать использования рефлексии, но это был простой и короткий способ, который я нашел, который не использует сторонние библиотеки или пользовательские действия.

1 голос
/ 04 октября 2011

Вы можете вызывать сценарии MSBuild из рабочих процессов сборки TFS с помощью действия рабочего процесса MSBuild и продолжать делать это так же, как всегда. Или вы можете создать пользовательский Workflow Activity, чтобы сделать аналогичную вещь. Лучший способ, вероятно, будет зависеть от того, что вы собираетесь делать с этими версиями #.

Вы можете прочитать о том, как начать создавать пользовательские действия здесь: http://blogs.msdn.com/b/jimlamb/archive/2010/02/12/how-to-create-a-custom-workflow-activity-for-tfs-build-2010.aspx

Также есть TFS Community Build Extensions, в котором есть куча готовых пользовательских действий, которые вы можете использовать. Один из них называется AssemblyInfo, который звучит многообещающе: http://tfsbuildextensions.codeplex.com/documentation

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...