2009-11-03 26 views
10

NHibernate 2.1の最近のアップグレードは、メガ頭痛の状況 を表面にもたらしました。署名されていないアセンブリに署名する

プロジェクトのほとんどは、既定で署名されたアセンブリとしてビルドされているようです。 の場合fluentnhibernateはキーファイルfluent.snkを参照します。

Nhibernate.searchは、私が収集できると を構築しません何から符号なしのビルドは、それはあなたが生成されたキーファイルを参照する場合は、あなたがエラーを取得している署名:

参照アセンブリ「Lucene.Net」強くはありません

終了:これは恐ろしいエラーが強い名前がありませんnhibernate.search アセンブリを参照し得るよう として依存関係が構築ませんnhibernate.search持っcastle.activerecordのようなプロジェクトを意味

に名前を付けますいくつかのプロジェクトではcaslte.activerecordを使用していますので、 ビルドが非常に重要です。

私は完全にアイデアがないので、ここで何をすればよいか考えていますか?

これは完全な狂気です。

答えて

16
  1. 次のように入力し、VS.NETのコマンドプロンプトから提供されたアセンブリ ためのMSILを取得します。 C:> ILDASM providedAssembly.dll /out:providedAssembly.il
  2. 名前の変更/は、元のアセンブリ を移動私はファイル名に ".orig"をつけるだけです。
  3. MSIL出力とアセンブリキーファイルから新しいアセンブリを作成する アセンブリキーペアファイルが既にあると仮定すると、VS.NETコマンドプロンプトから次のように入力します。 c:> ilasm providedAssembly.il/dll/key = keypair001.snk

ソースhttp://www.andrewconnell.com/blog/archive/2004/12/15/772.aspx

2

厳密に名前の付いていないアセンブリを参照することはできませんが、逆の作業はできます。だからこそ、まともなプロジェクトが署名されるべきだ。

私がこの問題にぶつかったとき、私は上記のコメントの説明と共にプロジェクトの著者に(あるいは問題を登録して)行をドロップし、修正を待つ間に自分でコンパイルして署名します。

+0

+1。ええ、オプションはあなた自身と署名を取るか、あなたのものすべてを署名なしにします(通常は良い選択ではありません)。 – RichardOD

1

をすべて与えられた答えは持っています彼らに深刻な欠陥があります - 互いに依存する複数の署名されていないアセンブリがある場合、動作しません。署名されていない参照を署名された参照に変更するには、ILファイルを手動で編集する必要があります。確かに可能ですが、エラーが発生しやすくなります。

もっと良い方法があります。まず、ここで私の情報源は以下のとおりです。

  1. https://www.nuget.org/packages/Nivot.StrongNaming/1.0.4.2
  2. How to download a Nuget package without nuget.exe or Visual Studio extension?

最初のものは強くアセンブリに名前を付けることができ、それはまた、符号なしの参照の世話をStrongNaming呼ばNuGetパッケージへのリンクですあなたのために! 2番目は、必要に応じてVisual Studioを使用せずにNuGetパッケージをダウンロードする方法を説明しています。

私は、個人的に、しかし、あなたは常に

がありnivot.strongnaming.1.0.4.2.zipをhttps://www.nuget.org/api/v2/package/Nivot.StrongNaming/1.0.4.2 を直接参照してダウンロードすることができ、NuGetパッケージマネージャ自体を使用して、それをダウンロードするには、Visual Studioのを使用しましたダウンロードされたzip(またはNuGetが使用されている場合はパッケージ)のtoolsフォルダ。 PowerShellモジュールをインストールしたら、簡単にPowerShellモジュールとしてインストールできます。

関連する問題