2012-02-22 9 views
12

これは古典的な問題で、numerousの解describedです。しかし、それらのどれも私のために働くようです。アセンブリの生成に失敗しました - 参照されたアセンブリには厳密な名前はありません。他のソリューションはなぜ機能しないのですか?

私は、SharePointソリューションでReport.NETライブラリを使用しています。 Reports.dllを参照として追加してコンパイルすると、エラーメッセージ "アセンブリの生成に失敗しました - 参照されたアセンブリ 'Reports'には厳密な名前はありません。しかし私のプロジェクトでは、プロジェクトのプロパティにkey.snkがリンクされています。だから私は他の場所で説明するように、分解署名し、このキーファイルとDLLを再構築しよう:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>ildasm Reports.dll /out:Reports.il 

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>ilasm Reports.il /dll /resource=Reports.res /key=..\key.snk 

<output removed for brevity> 

Class 95 
Class 96 
Method Implementations (total): 1 
Resolving local member refs: 0 -> 0 defs, 0 refs, 0 unresolved 
Writing PE file 
Signing file with strong name 
Operation completed successfully 

は、私が今にタイムスタンプが新しいReports.dllで終わります。しかし、これを私のプロジェクトとビルドへの参照として追加すると、前と同じエラーメッセージが表示されます。 "Reports"リファレンスのプロパティは "Strong Name:False"と表示されます。

トラブルのビットによって落胆することはない、私は強い命名ユーティリティを使用して再署名アセンブリにしよう:

C:\Users\Administrator\Documents\Visual Studio 2010\Projects\MyProj 
\dll>sn -R Reports.dll ..\key.snk 

Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.1 
Copyright (c) Microsoft Corporation. All rights reserved. 

Assembly 'Reports.dll' successfully re-signed 

SNユーティリティを実行するとエラーメッセージが表示されて失敗したことは注目に値するかもしれません「Reports.dllは厳密に名前の付いたアセンブリを表していません」の実行前には、逆アセンブル/署名/再構成のプロセスであるより前です。

ただし、逆アセンブリ/署名/再アセンブリ後に実行すると、Visual Studioに元のエラーメッセージを再追加すると元のエラーメッセージが表示されます。

+0

の可能重複[アセンブリの生成に失敗しました - 「Interop.Office」は厳密な名前を持っていない参照アセンブリを](のhttp:// stackoverflowの.com/questions/6845537/assembly-generation-failed-referenced-assembly-interop-office-does-not-have) – JabberwockyDecompiler

答えて

20

は、私はこれを使用して、VS 2010でこの問題を解決:

Project Properties -> Signing -> uncheck Sign the assembly checkbox 
+6

私はスタックオーバーフローが大好きです。私の問題の99%はスタックオーバーフローの助けを借りて常に解決されます。あなたはすべてロック! – Karishma

3

もし、あなたが明確にReports.dllにコマンドラインから正しく署名した後、VSはそのdllが署名されていないと言います。間違ったファイルを参照する必要があります。

署名後に強力なネーミングを再確認するには、Reports.dllをildasmにロードします(ツリー内のマニフェストノードをダブルクリックし、スクロールダウンして.publickeyセクションを見つけなければなりません) 。または簡単にILSpyにそれを開いてください。

reports.dllに署名した後。参照しているプロジェクトのprojファイルをXMLドキュメントとして開きます(VS PowerCommandを右クリックして 'Edit Project File'を使用している場合は、プロジェクトをアンロードして、VSで[Open With]コマンドを使用して開くことができます)ファイルダイアログを開きます)、dllへの参照が実際に正しいパスであることを確認します。そうでない場合は、修正してプロジェクトをリロードしてください。

+0

ご意見ありがとうございます。上記の署名コマンドを実行すると、ILSpy(素晴らしいツール)はReports.dllに対して[assembly:AssemblyKeyFile( "")]と[assembly:AssemblyKeyName( "")]を報告します。私は、ファイルが実際に署名されていないことを意味すると思いますか?しかし、ファイルのタイムスタンプは引き続き想定される署名に対応しています。 –

+0

興味のあるもの - ILSpyでアセンブリのルートノードを選択すると、右側のペインに最初の2つのコメントにファイル名が表示され、2番目の行に完全なアセンブリ名が表示されます。その2行目では、アセンブリ名は '、PublicKeyToken = [some_hex_string]'で終わりますか? –

+1

また、これはここの 'Report.Net'ライブラリです:http:// sourceforge。net/projects/report /もしビルドプロセスの一環としてプロジェクトを開き、キーファイルを使ってVSで再構築できないのであれば? –

関連する問題