Если вы хотите указать сборки, которые содержат пользовательские действия кода, которые вы написали, вам нужно сделать следующее:
- Создайте свои собственные действия в
ваш рабочий процесс.
- Убедитесь, что ваш
xmlns вверху определяется
правильно:
XMLNS: локальные = "CLR-пространств имен: BuildTasks; сборка = BuildTasks"
- Убедитесь, что теги в XAML для
процесс сборки есть локальный (или
какой бы префикс вы не использовали)
правильно.
- Проверьте ваш обновленный рабочий процесс XAML в командном проекте и обновите определения сборки.
- Создайте новый каталог в вашем командном проекте под названием «CustomBuildAssemblies»
- Перейдите в папку bin / Debug (или release) проекта, который вы использовали для создания пользовательских задач сборки (в основном получите dll, который вы помещаете в GAC), и поместите его в каталог, созданный на шаге 5 .
- Сообщите контроллеру сборки, где искать пользовательские сборки, перейдя в Team Exporer, выбрав проект, для которого вы это делаете, разверните список проектов, щелкните правой кнопкой мыши «Сборки» и выберите «Управление контроллерами сборки». , Выберите контроллер (должен быть первым в списке) и нажмите свойства. Задайте путь управления версиями для каталога, который был создан на шаге 5 (находится в середине всплывающего окна).
На данный момент у вас есть пользовательский рабочий процесс XAML, который ссылается (импортирует) пользовательскую сборку (или несколько сборок), которые были включены в систему контроля версий. Контроллер сборки теперь знает, где находятся эти пользовательские сборки. Это позволяет вам «регистрировать» новые версии этих пользовательских сборок, если вам когда-либо понадобится добавить / обновить свои пользовательские задачи сборки.
Надеюсь, это поможет вам. Мне потребовалось некоторое время, чтобы понять это. Дайте мне знать, если мне нужно сделать это более подробно. Хотелось бы опубликовать несколько скриншотов диалогов.
UPDATE:
Я полностью забыл об этой теме, пока не увидел, что она была восстановлена. Я также могу обновить этот ответ, поскольку нашел очень хороший способ заставить TFS извлекать последнюю версию вашей пользовательской сборки сборки: создание уникального номера версии для сборки.
Я использую шаблон T4 и запускаю его перед сборкой сборки. Он обновляет AssemblyInfo.cs после прочтения зарегистрированной библиотеки пользовательских действий.
<#@ 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 и просто убедитесь, что я его запускаю (щелкните правой кнопкой мыши и выберите команду T4 или что-то в этом роде) перед сборкой сборки.