TFS Сделанное на заказ Действие 2010 года ошибка TF215097

Что, вероятно, происходит здесь:

  1. docker run ... создает и запускает ваш контейнер
  2. ваш контейнер завершает работу
  3. docker ps не выводит список остановленных контейнеров (показы по умолчанию просто запущены), так что это заставило вас думать, что его там нет.
  4. docker run ... не удается, потому что вы пытаетесь создать и запустить контейнер с именем, которое уже существует.

Дополнительное чтение:

16
задан Community 23 May 2017 в 11:59
поделиться

5 ответов

Поскольку ответа нет и я не нашел исправления, я решил добавить GAC сейчас. Это тоже работает. :)

0
ответ дан 30 November 2019 в 17:52
поделиться

У меня была точно такая же проблема. Причина была в том, что я скомпилировал библиотеку с настраиваемыми действиями для платформы x86, а контроллер сборки работал на 64-битной виртуальной машине Windows 2008. Переключение целевой платформы на AnyCPU позволило контроллеру сборки немедленно использовать библиотеку, не добавляя ее в GAC.

1
ответ дан 30 November 2019 в 17:52
поделиться

У меня это сработало - необходимо имя сборки для включения в объявление пространства имен для настраиваемого элемента управления:

http://blogs.microsoft.co.il/blogs/royrose/archive/2010/06/09/custom-build-activities-and-tf215097-error .aspx

1
ответ дан 30 November 2019 в 17:52
поделиться

Если вы хотите указать сборки, содержащие написанные вами пользовательские действия кода, вам нужно сделать следующее:

  1. Встроить ваши пользовательские действия в свой рабочий процесс.
  2. Убедитесь, что ваш xmlns в верхней части определены правильно: xmlns:local="clr-namespace:BuildTasks;assembly=BuildTasks"
  3. Убедитесь, что теги в XAML для процесса сборки имеют локальный (или префикс, который вы использовали) правильно.
  4. Внесите обновленный XAML рабочего процесса в командный проект и обновите определения сборки.
  5. Создайте новый каталог в командном проекте под названием "CustomBuildAssemblies"
  6. Перейдите в папку bin/Debug (или release) проекта, который вы использовали для создания пользовательских задач сборки (по сути, получите dll, которую вы поместите в GAC) и поместите ее в каталог, созданный в шаге 5.
  7. Укажите контроллеру сборки, где искать пользовательские сборки, перейдя в Team Exporer, выбрав проект, для которого вы это делаете, разверните список проектов, щелкните правой кнопкой мыши на "Builds" и выберите "Manage Build Controllers". Выберите контроллер (он должен быть первым в списке) и нажмите свойства. Установите путь контроля версий в каталог, который был создан в шаге 5 (находится в середине всплывающего окна).

На данном этапе у вас есть пользовательский рабочий процесс XAML, который ссылается (импортирует) пользовательскую сборку (или несколько сборок), которые были включены в контроль исходного кода. Теперь контроллер сборки знает, где находятся эти пользовательские сборки. Это позволит вам "проверить" новые версии этих пользовательских сборок, если вам когда-нибудь понадобится добавить/обновить ваши пользовательские задачи сборки.

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

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

Я использую шаблон T4 и запускаю его перед сборкой сборки. Он обновляет AssemblyInfo.cs после чтения зарегистрированной DLL пользовательской активности.

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.Xml.dll" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Reflection" #>
<#@ output extension=".cs" #>
<#

 //relative path to the DLL for your custom assembly in source control
 var filename = this.Host.ResolvePath("..\\..\\..\\..\\BuildAssemblies\\BuildTasks.dll");

 Version buildInfoAssemblyVersion = AssemblyName.GetAssemblyName(filename).Version;

 // Setup the version information. Using the DateTime object make it kinda unique
 var version = new Version(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, buildInfoAssemblyVersion.Revision + 1);

#>
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Windows.Markup;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("BuildTasks")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Microsoft")]
[assembly: AssemblyProduct("BuildTasks")]
[assembly: AssemblyCopyright("Copyright © Microsoft 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

// Setting ComVisible to false makes the types in this assembly not visible 
// to COM components.  If you need to access a type in this assembly from 
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]

// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("feab7e26-0830-4e8f-84c1-774268727cbd")]

// 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.*")]
// Version information is a combination of DateTime.Now and an incremented revision number coming from the file:
// <#= filename #>
[assembly: AssemblyVersion("<#= version.ToString() #>")]
[assembly: AssemblyFileVersion("<#= version.ToString() #>")]

[assembly: XmlnsDefinition("http://localhost/BuildTasks/Activities", "BuildTasks.Activities")]
[assembly: XmlnsDefinition("http://localhost/BuildTasks/Activities/InstallerA", "BuildTasks.Activities.InstallerA")]
[assembly: XmlnsDefinition("http://localhost/BuildTasks/Activities/InstallerB", "BuildTasks.Activities.InstallerB")]
[assembly: XmlnsDefinition("http://localhost/BuildTasks/Activities/CodeAnalysis", "BuildTasks.Activities.CodeAnalysis")]
[assembly: XmlnsDefinition("http://localhost/BuildTasks/Activities/Standards", "BuildTasks.Activities.Standards")]
[assembly: XmlnsDefinition("http://localhost/BuildTasks/Activities/CI", "BuildTasks.Activities.CI")]
[assembly: XmlnsDefinition("http://localhost/BuildTasks/Activities/Version", "BuildTasks.Activities.Version")]

Внизу вы заметите, что я также настроил определения пространств имен XML для каждого из пространств имен, которые я использую в рабочем процессе. Я обнаружил, что сгенерированный XMAL выглядит намного чище, и это также помогло мне справиться с проблемами.

Я создал этот файл как AssemblyInfo.tt и просто убеждаюсь, что запускаю его (щелкните правой кнопкой мыши и выберите run T4 или что-то подобное) перед сборкой.

9
ответ дан 30 November 2019 в 17:52
поделиться

Вам нужен этот атрибут в классе CodeActivity:

_

В других местах сборка не загружается.

6
ответ дан 30 November 2019 в 17:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: