2017-03-07 4 views
0

プロジェクトのルートフォルダの下に証明書があります。プロジェクト名はSingleSignOnですが、GetManifestResourceStreamビルドインメソッドを使用してメソッドを読み取ることができません。C#を使用してAssembly GetManifestResourceStreamメソッドを使用してResourseファイルを読み取る

ソースコードは、私が言った組み込みメソッドGetManifestResourceStream

enter image description here

IドンからNULLを得ているソリューションエクスプローラ enter image description here

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")) 
      { 

      } 
     } 
    } 
} 

スナップショットであります私はこれで逃したものを知りません。当該証明書のURLはhttps://github.com/IdentityServer/IdentityServer3.Samples/blob/master/source/Certificates/idsrv3test.pfx

です。証明書の読み方を教えてください。

+0

右クリックしてpfxファイル - >プロパティ - >ビルドアクションを '埋め込みリソース'にする –

+0

なぜそのキーを読みたいのですか? .netサインインは自動的に行われます。 –

+0

そのアセンブリ(プロジェクトプロパティの名前空間)の既定の名前空間は何ですか?これは、GetManifestResourceStreamがリソースの検索に使用するものです。 – Evk

答えて

1

を必要とする証明書を見つけ、次のコードを使用してC#でそれらを開くことができます埋め込まれたリソースとして。ファイル>右クリック>プロパティ>ビルドアクション>埋め込みリソースを選択します。

+0

実行アセンブリが地獄として遅くなる – Developerdeveloperdeveloper

1

ファイルが「組み込みリソース」であることを確認してください。 Right click the pfx file -> Properties -> Build Action、埋め込みリソースにする

1

PFXは、1つ以上の証明書を保持できるコンテナです。

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

注:ファイルを置くあなたは

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

は今、これを試してみてくださいコレクションを反復処理し、

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

ソリューション2

ステップ1:.PFXの変更プロパティは、 idsrv3test.pfxプロパティファイル埋め込まれたリソースとして設定し、ビルドアクション。

ステップ2:コードの変更: -

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

これはとにかく、そのクラスに含まれている必要があります方法のように思えるので、私の個人的なアプローチは、アセンブリクラスの拡張を書くことです。

ので、他のポスターで述べたように、まず次のようなコードを使用して、テキストファイルを「埋め込まれたリソース」としてマークされていることを確認します

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; 
    } 
} 

(上記より簡潔にコード化することができ、しかし、私はデモンストレーションの目的のためにこれに行った)

関連する問題