Si desea especificar ensamblados que contienen actividades de código personalizado que' Si ha escrito lo siguiente, debe hacer lo siguiente:
- Cree sus actividades personalizadas en su flujo de trabajo.
- Asegúrese de que sus xmlns en la parte superior se define correctamente: xmlns: Local = "clr-namespace: BuildTasks; montaje = BuildTasks"
- Asegúrese de que las etiquetas en el XAML para el proceso de construcción tienen los locales (o sea cual sea el prefijo que haya usado) correctamente.
- Incorpore su flujo de trabajo actualizado XAML en su proyecto de equipo y actualice sus definiciones de compilación.
- crear un nuevo directorio en su proyecto de equipo llamado "CustomBuildAssemblies"
- Ir a la bin/Depuración (o liberación) carpeta del proyecto que utilizó para crear la estructura de encargo tareas (básicamente obtener la DLL que eres poner en el GAC) y colocarlo en el directorio creado en el paso 5.
- Indique al controlador de desarrollo dónde buscar los ensamblajes personalizados yendo a Team Exporer, seleccionando el proyecto para el que está haciendo esto, expanda la lista de proyectos y haga clic derecho en "Builds", y seleccione "Manage Build Controllers". Selle el controlador (debe ser lo primero en la lista) y haga clic en Propiedades. Establezca la ruta de control de la versión en el directorio que se creó en el paso 5 (ubicado en el medio de la ventana emergente).
En este punto, tiene un flujo de trabajo XAML personalizado que hace referencia (importa) un ensamblaje personalizado (o varios) que se han incluido en el control de código fuente. El controlador de compilación ahora sabe dónde se encuentran estos conjuntos personalizados. Esto le permite "registrar" nuevas versiones de esos conjuntos personalizados si alguna vez necesita agregar/actualizar sus tareas de compilación personalizadas.
Espero que esto te ayude. Me tomó algo de tiempo resolver esto también. Avíseme si necesito que esto sea más detallado. Me gustaría poder publicar algunas capturas de pantalla de los diálogos.
ACTUALIZACIÓN: Me olvidé por completo de este hilo hasta que vi que se revivió. También puedo actualizar esta respuesta, ya que he encontrado una muy buena manera de hacer que TFS extraiga la última versión de su ensamblado de tareas de compilación personalizado: crear un número de versión único para el ensamblaje.
Utilizo una plantilla T4 y la ejecuto antes de construir el conjunto. Actualiza AssemblyInfo.cs después de leer la DLL de actividad personalizada registrada.
<#@ 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")]
Se dará cuenta en la parte inferior I también configurar las definiciones de espacio de nombres XML para cada uno de los espacios de nombres que utilizo en el flujo de trabajo. Descubrí que el XMAL generado se ve mucho más limpio y también me ayuda con mis problemas.
Creé este archivo como AssemblyInfo.tt y simplemente me aseguro de ejecutarlo (haga clic con el botón derecho y seleccione ejecutar T4 o algo así) antes de construir el conjunto.
Vi que esto se revivió hoy. De hecho, estaba haciendo el trabajo administrativo de TFS en una nueva caja ayer y estaba configurando un nuevo conjunto de BuildTasks. Si todavía está buscando una solución mejor, responda y puedo agregar algunos otros consejos que puede probar para mi respuesta. O, si lo has entendido desde entonces, háznoslo saber. –
Encontré que también versionar el ensamblado BuildTasks cada vez que lo revisas ayuda a resolver el problema. –