viernes, 27 de abril de 2018

Llamadas REST al TFS


El TFS se puede consultar por llamadas REST, puedes usar las librerías para tal efecto o puedes hacerlas tú las llamadas
Obtener una lista de proyectos seria

public ListofProjectsResponse.Projects GetAllProjects()
        {
            ListofProjectsResponse.Projects viewModel = null;
            using (HttpClient confClient = new HttpClient(GetCredential()))
            {
                confClient.BaseAddress = @”http://nametfs:8080/tfs/DefaultCollection/”;
                confClient.DefaultRequestHeaders.Accept.Clear();
                confClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                HttpResponseMessage message = confClient.GetAsync("_apis/projects?stateFilter=All&api-version=1.1").Result;
                if (message.IsSuccessStatusCode)
                {
                     viewModel = message.Content.ReadAsAsync<ListofProjectsResponse.Projects>().Result;
                }
            }
            return viewModel;

}

La seguridad puede ser por un tokent del TFS o puede que no lo tengas así configurado y sea una configuración de Windows. Si ese es tu caso en USUARIO y PASSWORD tienes que poner un usuario con permisos sobre el TFS
 private WebRequestHandler GetCredential()
        {
            WebRequestHandler authtHandler = new WebRequestHandler()
            {
                Credentials = new NetworkCredential(USUARIO, PASSWORD)
            };
            return authtHandler;
        }



Si está configurado con autentificación Basic

public ListofProjectsResponse.Projects GetAllProjects()
        {
            ListofProjectsResponse.Projects viewModel = null;
            using (HttpClient confClient = new HttpClient())
            {
                confClient.BaseAddress = @”http:// nametfs:8080/tfs/DefaultCollection/”;
                confClient.DefaultRequestHeaders.Accept.Clear();
                confClient.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                confClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", _credentials);
                HttpResponseMessage message = confClient.GetAsync("_apis/projects?stateFilter=All&api-version=1.1").Result;
                if (message.IsSuccessStatusCode)
                {
                     viewModel = message.Content.ReadAsAsync<ListofProjectsResponse.Projects>().Result;
                }
            }
            return viewModel;

}

Donde:  _credentials= Convert.ToBase64String(System.Text.ASCIIEncoding.ASCII.GetBytes(string.Format("{0}:{1}", "", PersonalAccessToken)))

PersonalAccessToken à este es un valor que tienes en el TFS

viernes, 20 de abril de 2018

Compartir ficheros entre proyectos

Tengo una proyecto asp webform .net del que tengo que hacer otro sitio con parte del código.
Necesito una web nueva, pero que comparta controles de usuario, paginas aspx de la 1 aplicación.  No quiero copiar  y pegar el código y tenerlo duplicado.
 Solución
Pasos
1.       Me creo un proyecto vacío
2.       Añado todo lo que necesito (aspx, ascx, ccs, js ) pero lo añado como link (nuevo elemento existente , y añadir como enlace)

Al añadir como link el código realmente no está en mi directorio, y eso hace que falle al ejecutar sobre el 
La solución es añadir esto al final del fichero del proyecto:

 <Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
    <Copy SourceFiles="%(Content.Identity)" DestinationFiles="%(Content.Link)" SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" Condition="'%(Content.Link)' != ''" />
  </Target>  

Hace es una copia de todos los ficheros que son link a nuestro directorio  y ya funciona todo.