TFS API - Exemples en C#

 06/09/2017 |   Admin |  C#


Se connecter au team project :

Pour la démo je mets les settings directement dans les classes/méthodes. Dans la vrai vie, on utilisera un fichier de conf ou autre ;)

public static Uri CollectionUri = new Uri("https://adresse-serveur-tfs/tfs/DefaultCollection");
public static NetworkCredential NetworkCredential = new NetworkCredential(@"login", "pwd"); 

TfsTeamProjectCollection teamProjectCollection = new TfsTeamProjectCollection(CollectionUri , NetworkCredential ); 
workItemStore = teamProjectCollection.GetService(); 

if (!teamProjectCollection.HasAuthenticated) { 
    throw new Exception("Not Authenticated"); 
} 

// Ici seront faites, toutes les opérations (read + write)
teamProjectCollection.Dispose(); 

 

Lire un WorkItem

 

// Ici on souhaite obtenir un WI en fonction de son titre.
string query = "SELECT * FROM Issue WHERE Title = '" + title + "'";

WorkItemCollection workItemCol = workItemStore.Query(query); // Exécution de la requête
WorkItem workItem = workItemStore.Query(query)[0]; // récupération du WI

#if DEBUG
	// Liste tous les champs du WI, très utile en debug pour connaître le nom des champs
     	var filedsStr = string.Join(" - ", workItem.Fields.Cast().Select(f => f.ReferenceName).ToList());

#endif
      	// get title
        var
...

Lire >>

Exemples Linq

 02/11/2015 |   Admin |  C#

Tags: linq

Comparer deux listes :

Obtenir les résultats communs entre la list2 et la list1

 var result = list2.Where(l2 => list1.Any(l1 => l1.Id == l2.Id)).ToList();

Obtenir les résultats de list1 qui ne sont pas dans list2

var result = list1.Where(l2 => !list2.Any(l1 => l1.Id == l2.Id)).ToList();

Lire >>

Uncaught Sys.InvalidOperationException: Sys.InvalidOperationException: Could not find UpdatePanel

 27/05/2015 |   Admin |  C#


Erreur de ce type : "Uncaught Sys.InvalidOperationException: Sys.InvalidOperationException: Could not find UpdatePanel" :

"Uncaught Sys.InvalidOperationException: Sys.InvalidOperationException: Could not find UpdatePanel with ID 'ctl00_updxxx'. If it is being updated dynamically then it must be inside another UpdatePanel."

Si vous rencontrez cette erreur c'est que vous tentez de masquer (Visible = false) un panel qui contient un update panel. Ou de mettre a jour un update panel qui est dans un panel avec l'attribut visible = false

Déplacer le panel dans l'update panel et ce sera bon !

<asp:UpdatePanel runat="server" ID="updXXX" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:Panel runat="server" ID="pnlXXX" Visible="false">
                          CONTENT
                </asp:Panel>
            </ContentTemplate>
</asp:UpdatePanel>

Lire >>

XML et XSLT en dotNet

 27/05/2015 |   Admin |  C#


Exemple simple de l'utilisation de xml et xslt :

Fichier XML :

<?xml version="1.0" encoding="iso-8859-1"?>
<personnes>
  <personne>
    <name>Toto</name>
    <age>15</age>
    <city>Paris</city>
  </personne>
  <personne>
    <name>Dupont</name>
    <age>59</age>
    <city>Rennes</city>
  </personne>
  <personne>
    <name>Durand</name>
    <age>46</age>
    <city>Toulouse</city>
  </personne>
  <personne>
    <name>Martin</name>
    <age>35</age>
    <city>Lyon</city>
  </personne>
</personnes>

Fichier XSLT :

<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    <html>
      <body>
        <h2>Personnes</h2>
        <table border="1">
          <tr bgcolor="#9acd32">
            <th>Name</th>
            <th>Age</th>
            <th>City</th>
          </tr>
          <xsl:for-each select="personnes/personne">
            <tr>
              <td bgcolor="yellow">
                <xsl:value-of select="name"/>
              </td>
              <td>
                <xsl:value-of select="age"/>
              </td>
              <td>
                <xsl:value-of select="city"/>
              </td>
            </tr>
         
...

Lire >>

Récupérer une url dans une chaine de caractère, ici object

 27/05/2015 |   Admin |  C#


Dans cette exemple, la chaine de caractère commence par <object, contient une url qui commence par http et se termine par "

<object.....blablabla......."http://lesite.com/gs4545?id=8" ....... blablabla.......</object>

Pour récupérer l'url il suffit d'utiliser ce code :

string theUrl = fullUrl.Substring(fullUrl.IndexOf("http")).Split('"')[0];

Lire >>

Calculer le temps d'exécution d'une méthode

 27/05/2015 |   Admin |  C#


using System.Diagnostics;

Stopwatch sw = new Stopwatch();
sw.Start();

« La méthode à exécuter »

sw.Stop();

Console.WriteLine("Temps d'éxécution : " + sw.Elapsed.Minutes + " minutes, " + sw.Elapsed.Seconds + " secondes, " + sw.Elapsed.Milliseconds + " milliseconds");

Lire >>

Simple Client/Serveur TCP

 27/05/2015 |   Admin |  C#

Tags: Réseau

Voici les bases pour implémenter un client/serveur TCP en c# :

Le client :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net.Sockets;
using System.IO;
 
public class Client
{
    public static void Main(string[] args)
    {
        try
        {
            string adresseIp = "Votre IP";
            int port = 8001;
 
            TcpClient client = new TcpClient();
            Console.WriteLine("Connexion.....");
            client.Connect(adresseIp, port);
            Console.WriteLine("Connecté");
           
            string chaineAenvoyer = string.Empty;
            while (chaineAenvoyer.ToLower() != "quit")
            {
                Console.WriteLine("\nChaine a envoyer : ");
                chaineAenvoyer = Console.ReadLine();
 
                Stream stream = client.GetStream();
                ASCIIEncoding encoding = new ASCIIEncoding();
 
                byte[] byteAenvoyer = encoding.GetBytes(chaineAenvoyer);
                Console.WriteLine("Transmission.....");
                stream.Write(byteAenvoyer, 0, byteAenvoyer.Length);
                byte[] byteEnvoyes = new byte[100];
                int nbBytes = stream.Read(byteEnvoyes, 0, 100);
                for (int i =
...

Lire >>

BlogEngine - Remplacer la page Default.aspx

 27/05/2015 |   Admin |  C#


Si l'on modifie la page Default.aspx, la redirection des catégories et des tags ne fonctionnera plus.

Cela se produit si l'on désire intégrer un site web au blog par exemple.

Solution :

Dans le code les redirections se font vers la page Default, il faut donc renommer ces redirections vers la nouvelle page.

On va dire que la nouvelle page se nomme blog.aspx et que la page Default.aspx n'est plus lié au blog.

1) Il faut travailler sur le code source de BlogEngine :

- Ouvrir le fichier /Web/HttpModules/UrlRewrite.cs

- Renommer default.aspx par blog.aspx, SAUF le bloc à partir de la ligne 238 (pour la version 2.5, à 8 endroits environ) :

else 

{

string newUrl = url.Replace("Default.aspx", "default.aspx");  // fixes a casing oddity on Mono
int defaultStart = url.IndexOf("default.aspx", StringComparison.OrdinalIgnoreCase);
newUrl = Utils.ApplicationRelativeWebRoot + url.Substring(defaultStart);
 
context.RewritePath(newUrl);
}

- Rajouter devant ?tag le nom du nouveau fichier, à la ligne 198 : ?tag remplacer par : blog.aspx?tag

- Ouvrir le fichier /Web/Controls/PostViewBase.cs

- Rajouter devant ?tag le nom du nouveau fichier, à la ligne 343 : ?tag remplacer par blog.aspx?tag

- Compiler la solution, remplacer la DLL BlogEngine.Core.dll par la nouvelle

...

Lire >>