2017-03-07 2 views
0

J'ai un certificat sous le dossier racine du projet. Le nom du projet est SingleSignOn, mais je ne peux pas lire la méthode à l'aide de la méthode GetManifestResourceStream.Lire un fichier Resourse en utilisant la méthode Assembly GetManifestResourceStream en utilisant C#

Le code source est

namespace SingleSignOn 
{ 
    public class Program 
    { 
     static void Main(string[] args) 
     { 
      var assembly = typeof(Program).Assembly; 
      var super = assembly.GetManifestResourceNames(); 
      using (var stream = assembly.GetManifestResourceStream("SingleSignOn.idsrv3test.pfx")) 
      { 

      } 
     } 
    } 
} 

SnaPshot de l'Explorateur de solutions enter image description here

Je reçois NULL de ladite méthode intégrée GetManifestResourceStream

enter image description here

Je don Je ne sais pas ce que j'ai raté. L'URL de ce certificat est https://github.com/IdentityServer/IdentityServer3.Samples/blob/master/source/Certificates/idsrv3test.pfx

Veuillez m'aider à lire le certificat.

+0

faites un clic droit sur le fichier pfx -> propriétés -> construire l'action, faites-en 'ressource intégrée' –

+0

pourquoi voulez-vous lire cette clé? La signature .net est faite automatiquement. –

+0

Quel est l'espace de noms par défaut de cet assembly (espace de noms dans les propriétés du projet)? Parce que c'est ce qui est utilisé par GetManifestResourceStream pour localiser la ressource. – Evk

Répondre

1

Essayez ceci:

var resourceName = "SingleSignOn.idsrv3test.pfx"; 
      using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
      { 
       TextReader tr = new StreamReader(stream); 
       string fileContents = tr.ReadToEnd(); 
      } 

Remarque: Placez le fichier en tant que ressource intégrée. fichier> clic droit> propriétés> action de construction> sélectionnez la ressource incorporée.

+0

obtenir l'exécution de l'assemblage est lent comme l'enfer – Developerdeveloperdeveloper

1

Assurez-vous que le fichier est une 'ressource incorporée'. Right click the pfx file -> Properties -> Build Action, rendez-le 'ressource intégrée'

1

PFX est un conteneur qui peut contenir un ou plusieurs certificats. Vous pouvez les ouvrir dans C# en utilisant le code suivant

X509Certificate2Collection collection = new X509Certificate2Collection(); 
collection.Import("idsrv3test.pfx", "password-for-pfx", X509KeyStorageFlags.PersistKeySet); 

itérez sur la collection et trouver le certificat dont vous avez besoin

foreach (X509Certificate2 cert in collection) 
{ 
    // work with cert 
} 
1

Solution 2

Étape 1: Modifier les propriétés de .PFX fichier propriétés idsrv3test.pfx, définissez l'action de construction en tant que ressource incorporée.

Étape 2: Code changement: -

var resourceName = "SingleSignOn.idsrv3test.pfx"; 
      using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) 
      { 
       TextReader tr = new StreamReader(stream); 
       string fileContents = tr.ReadToEnd(); 
      } 
1

Mon approche personnelle est d'écrire une extension de la classe Assemblée, parce que cela semble être une méthode qui aurait dû être inclus dans cette classe de toute façon.

Ainsi, comme mentionné par d'autres affiches, assurez-vous que votre fichier texte est marqué comme « ressource incorporée », puis utilisez un code similaire à ce qui suit:

public static class Extensions 
{ 
    public static string ReadTextResource(this Assembly asm, string resName) 
    { 
     string text; 
     using (Stream strm = asm.GetManifestResourceStream(resName)) 
     { 
      using (StreamReader sr = new StreamReader(strm)) 
      { 
       text = sr.ReadToEnd(); 
      } 
     } 
     return text; 
    } 
} 

(Le peut coder plus succinctement ci-dessus, mais je suis allé avec cela à des fins de démonstration)