Signer (Strong Name) une assembly tierce

by Stéphane 19. February 2010 00:55
Je développe une tâche personnalisé pour SSIS (sujet très intéressant, abordé probablement lors d’un prochain post) et fait face à un problème : afin d’être enregistré dans la GAC, mon composant doit être signé (Strong Name), ainsi que toute les assembly référencées …

Pour mon développement pas de problème (sn –k key.snk & [assembly: assemblyKeyFileAttribute(@"key.snk")]

Mais que faire des composant 3th party, dont je n’ai évidement pas les sources ?

Voici ma solution :
  1. Générer une clé => sn –k 3thparty.snk
  2. Désassembler l’assembly en langage intermédiaire => ildasm.exe 3thparty.dll /out: 3thparty.il
  3. Réassembly l’assembly, en ajoutant la clé => ilasm.exe 3thparty.il /dll /output=3thparty.dll /key=3thparty.snk

Fonctionne bien évidement seulement si l’assembly n’a pas été obfuscée …

Tags: ,

.NET 3.5 | Tips

Visual Studio 2008 tip : accéder au propriétés d'un projet en double cliquant sur le dossier 'properties'

by Stéphane 9. December 2008 21:52

J'ai, pendant quelques années, accédé aux propriétés d'un projet en sélectionnant celui-ci dans l'explorateur de solution, puis boutons droite / menu contextuel, et sélection du menu properties, comme illustré dans la figure 1. Depuis hier, je sais qu'il est possible d'accéder aux propriétés d'un projet en double cliquant sur le dossier 'properties' de celui-ci ... (figure 2)

    

 Figure 1                                      Figure 2

Tags: ,

Tips | VS2008

SQL-Server et changement du nom de machine

by Stéphane 24. January 2008 22:36

Dans le cadre d’un POC (Proof Of Concept), j’ai décidé de changer le nom du serveur de base de donnée afin que ce laboratoire soit ‘auto-documenté’ (c’est plus claire quand les machines s’appellent ‘Directory Services’, ‘Publisher’ au lien de ‘WIN-1234’ et ‘WIN-1235 …). Cette modification intervient APRES l’installation de SQL-Server.

 

Le changement de nom s’effectue très simplement depuis l’administration de l’ordinateur (Poste de travail/ Gérer). Jusqu’ici, tout va bien.

 

Lors de la première connexion à la base de donnée via SQL-Server Management Studio, la mire propose toujours l’ancien nom de l’ordinateur. Pas de souci, il suffit de remplacer celui-ci par son nouveau nom et la connexion s’effectue correctement.

 

Un problème survient lorsque l’on désir gérer la réplication. En effet, pour une mystérieuse raison, la réplication (Replication.Utilities) cherche toujours à accéder au serveur avec l’ancien nom …

 

 

 

Un rapide coup d’œil sur les tables système permet de trouver la source du souci :

select * from sys.servers

Retourne des informations du serveur SGDB, et retourne surtout dans la colonne ‘NAME’ l’ancien nom de la machine L

 

Le souci sera rapidement résolut en supprimant le serveur et en le recréant à l’aide des procédures stockées suivantes :

sp_dropserver ‘WIN-1235’

sp_addserver @server=‘Publisher’, @local=’local’

 

Et tout rentre dans l’ordre.

Tags: , ,

SQL-Server 2005 | Tips | Merge Replication

Reflection

by Stéphane 19. November 2007 17:21

Voici une reflection dont il faut se souvenir lorsque l'on développe du software :

Solve Problems - Realize that to more than 99.9% of the worlds population, code/technology are simply a means to an end. Software solves problems. The world really doesn't care how or why it works.

7 of the Hardest Things I Learned About Writing Software

Tags:

Tips

SQL Tips #7

by Stéphane 25. October 2007 18:50

Requêtes ayant été les plus exécutées

Les DMV sys.dm_exec_query_stats, en association avec sys.dm_exec_sql_text, permet de connaître les requêtes ayant été les plus exécutées.

SELECT TOP 50    
        SUM(T1.execution_count),
        T2.text
FROM  
    sys.dm_exec_query_stats T1 
CROSS APPLY sys.dm_exec_sql_text(T1.plan_handle) T2    
GROUP BY 
        T1.plan_handle,
        T2.text
ORDER BY 
    SUM(T1.execution_count) 
DESC

Tags: ,

SQL-Server 2005 | Tips

SQL Tips #6

by Stéphane 25. October 2007 18:49

Requêtes ayant consommées le plus de cycle I/O

Les DMV sys.dm_exec_query_stats, en association avec sys.dm_exec_sql_text, permet de connaître les requêtes ayant consommées le plus de cycle I/O.

SELECT TOP 50    
        SUM(T1.total_physical_reads + T1.total_logical_reads + T1.total_logical_writes),
        T2.text
FROM  
    sys.dm_exec_query_stats T1 
CROSS APPLY sys.dm_exec_sql_text(T1.plan_handle) T2    
GROUP BY 
        T1.plan_handle,
        T2.text
ORDER BY 
    SUM(T1.total_physical_reads + T1.total_logical_reads + T1.total_logical_writes ) 
DESC

 

Tags: ,

SQL-Server 2005 | Tips

SQL Tips #5

by Stéphane 25. October 2007 18:48

Requêtes ayant consommées le plus de cycle CPU

Les DMV sys.dm_exec_query_stats, en association avec sys.dm_exec_sql_text, permet de connaître les requêtes ayant consommées le plus de cycle CPU.

SELECT TOP 50
    SUM(T1.total_worker_time), 
    T2.text
FROM  
    sys.dm_exec_query_stats T1 
CROSS APPLY sys.dm_exec_sql_text(T1.plan_handle) T2    
GROUP BY 
        T1.plan_handle,
        T2.text
ORDER BY 
        SUM(T1.total_worker_time) 
DESC

Tags: ,

SQL-Server 2005 | Tips

SQL Tips #4

by Stéphane 25. October 2007 18:47

Requêtes ayant souffert de blocages

Les DMV sys.dm_exec_query_stats, en association avec sys.dm_exec_sql_text, permet de connaître les requêtes ayant le plus souffert de blocages (le temps d’exécution est supérieur au temps ‘travaillé’, signifiant que la requête à été victime temporairement d’un blocage).

SELECT TOP 50    
        SUM(T1.total_elapsed_time - T1.total_worker_time),
    T2.text
FROM  
    sys.dm_exec_query_stats T1 
CROSS APPLY sys.dm_exec_sql_text(T1.plan_handle) T2    
GROUP BY 
        T1.plan_handle,
        T2.text
ORDER BY 
        SUM(T1.total_elapsed_time - T1.total_worker_time ) 
DESC

Tags: ,

SQL-Server 2005 | Tips

SQL Tips #3

by Stéphane 24. October 2007 22:36

Les DMV dm_db_missing_index_* permettent de déterminer les indexes manquants. Ces informations sont basées sur l’analyse de l’exécution des requêtes depuis le démarrage de SQL-Server 2005.

Quatre DMV permettent d’obtenir des informations, d’un point de vue générale  jusqu’au détail (détail de colonnes à indexer).

La hiérarchie est la suivante :
dm_db_missing_index_group_stats          Information générale
-> dm_db_missing_index_groups             Information sur un groupe d’indexes
     -> dm_db_missing_index_details        Information sur un index
          -> dm_db_missing_index_columns Information des colonnes d’un index

Le calcul de la priorité (l’importance) de création d’un index est basé sur trois paramètres :
1. Le coût
2. l’impacte
3. le nombre de lecture

En effet, créer un index sur une table n’ayant qu’un index primaire aura un grand impact sur la performance. Par contre, si cette table n’est accédée qu’un fois pas année, la création de cet index ne devrait pas être un priorité. Mieux vaut alors insérer un index sur une table accédée de miliers de fois par minutes, même si l’impacte par requête est faible.

La requête suivante indique les indexes manquant a créer, par ordre de priorité (selon le calcule ci-dessus) :

SELECT 
    T1.avg_total_user_cost * T1.avg_user_impact * (T1.user_seeks + T1.user_scans) AS 'Priorite', 
        T3.*
FROM 
    sys.dm_db_missing_index_group_stats T1
INNER JOIN sys.dm_db_missing_index_groups T2 
    ON T2.index_group_handle = T1.group_handle
INNER JOIN sys.dm_db_missing_index_details T3 
        ON T3.index_handle = T2.index_handle
WHERE
        T3.database_id = 8 – A remplacer par l’ID de la base désirée
ORDER BY 
    avg_total_user_cost * avg_user_impact * (user_seeks + user_scans)
DESC;

Note :
Le résultat des DMV est le reflet de la base lors de l’execution des DMV. Lors de la création d’indexes basé sur ces vues, prendre soins de sauvegarder les informations. En effet, suite à la création d’un index, les DMV vont réévaluer les informations.

Tags: ,

SQL-Server 2005 | Tips

SQL Tips #2

by Stéphane 24. October 2007 21:22

Un index est fragmenté lorsque l’ordre logique des informations stockées dans les pages (basée sur les clés de l’index) ne correspondent plus à l’ordre physique des informations stockées dans les fichiers de données.

SQL-Server 2005 offre deux possibilités :
- La réorganisation de l’index
   S’applique lorsque le taux de fragmentation de l’index se situe entre 5% et 30%.
- La reconstruction de l’index
   S’applique lorsque le taux de fragmentation de l’index est supérieur à  30%.

La DMV sys.dm_db_index_physical_stats nous renseigne sur le taux de fragmentation. La requête suivante liste tous les indexes d’un serveur (pour lister uniquement une base, changer le premier paramètre de la DMV), dont le taux de fragmentation est supérieur à 5%.

SELECT 
    T3.Name AS Table_Name, 
    T2.Name AS Index_Name,
    T1.avg_fragmentation_in_percent
FROM 
    sys.dm_db_index_physical_stats(null,null,null,null,null) AS T1 
INNER JOIN  sys.indexes T2 
    ON  T1.OBJECT_ID = T2.OBJECT_ID 
    AND T1.INDEX_ID = T2.INDEX_ID 
INNER JOIN  sys.tables T3 
    ON T3.OBJECT_ID = T2.OBJECT_ID 
WHERE 
    T1.avg_fragmentation_in_percent > 5 
    AND T2.Name IS NOT NULL 
ORDER BY 
    T1.avg_fragmentation_in_percent 
DESC

Tags: ,

SQL-Server 2005 | Tips


Stéphane Schwartz, Chef de projet (IPMA Level-C) et développeur (MCSD.Net)

Linkedin Twitter

International Project Management Association

Microsoft Certified Technology Specialist Microsoft Certified Application Developer Microsoft Certified Solution Developer

AdSense

Month List

Powered by BlogEngine.NET 2.0.0.36 - Eco Theme by n3o Web Designers