web-dev-qa-db-ja.com

強力な署名付きアセンブリ

Visual Basic 2008Expressで作成したプロジェクトがあります。他の人のC#プロジェクトから変換しましたが、機能します。いくつかのDLL依存関係があります。プロジェクトを公開して別のマシンにインストールできるようにしましたが、DLLごとに、次のエラーが発生します。「マークを付けるには、アセンブリに強い署名が必要です。前提条件として。」私はいくつかの調査を行いましたが、多くを見つけられず、私が見つけたものは本当に理解していません。このエラーはどういう意味ですか?それを解決するための最良の方法は何ですか?もう1つのこと:それすべてのdllを正しく参照できるようになるまでに長い時間がかかりました。そのため、メインプロジェクトの機能が損なわれる可能性があるため、ソリューションがDLLの移動とは関係がないことをお勧めします。

27
Jason Shoulders

ClickOnceを介して公開している場合は、公開ページに移動して[アプリケーションファイル]をクリックします。そこから、DLLのリストが表示されます。問題を引き起こしているものの公開ステータスが「前提条件」ではなく「含める」とマークされていることを確認してください。

このエラーメッセージの意味は、現在の公開設定では、インストールを実行する前に、問題のすべてのアセンブリがターゲットマシンのグローバルアセンブリキャッシュに存在することを想定していることです。 GAC内のすべてのアセンブリは強い署名が必要であるため、強い署名がない前提条件としてマークされたアセンブリでは、このエラーが発生します。

50
Adam Robinson

回避策はそれよりも簡単です。

  1. プロジェクトに移動します。
  2. 右クリックして[プロパティ]を選択します。
  3. [セキュリティ]タブに移動します。
  4. [ClickOnceセキュリティ設定を有効にする]をオフにします。

ClickOnceを使用してこのアプリケーションを展開する場合を除き、アセンブリにStrongNameを付ける必要はありません。

6
Agustin

厳密に名前が付けられたアセンブリは、主に暗号化キーによって署名されたアセンブリです。これはVisualStudioで行うのはかなり簡単で、依存関係を並べ替える必要はありません。

非エクスプレスのVisualStudioを使用しているため、手順が少し異なる場合があります。

  • プロジェクトを右クリックして、プロパティを選択します
  • [署名]タブをクリックします
  • 「アセンブリに署名する」をチェックします
  • コンボボックスで「<新規...>」を選択します
  • ウィザードを完了する
  • 再構築
4
JaredPar

このリンクをチェックしてください...強い名前であなたのアセンブリに署名するための指示があります:

MSDN:厳密な名前でアセンブリに署名する

3
Justin Niessner

厳密な名前を作成するには、SDKコマンドプロンプトまたはVisual Studio 200Xコマンドプロンプトに移動し、次のように入力します

sn -k sgKey.snk

参照 詳細はこのリンク

次に、以下のコマンドを実行して、厳密な名前をアセンブリに関連付けます

al /out:MyAssembly.dll MyOldAssembly.dll /keyfile:sgKey.snk

参照 詳細はこのリンク

2
Binoj Antony

上記の解決策が失敗した後、これはちょうど私のために働いた:

エラーのあるアセンブリへの参照を削除してから、再度追加してください。

1
ptg

Adam Robinson's ソリューションを使用すると公開できましたが、エンドユーザーシステムがハードドライブの空き容量に注意してインストールできないと文句を言うため、公開後にユーザーがプロジェクトをインストールできないことがわかりました。これが根本的な原因である可能性は非常に低いと思われたため、さらに調査しました。

どうやら私の問題の根拠は、私の参照の1つが、私のプロジェクトが使用した.dllも参照していたが、バージョンが異なることでした。 ClickOnceにはこれがなく、すでに存在するバージョンを理由に、.dllの2番目のバージョンをユーザーのシステムにコピーすることを拒否しました。 .dllとプロジェクトが他の.dllの同じバージョンを参照するように修正すると、エラーが削除され、インストールの問題が修正されました。

0
mono código

問題が.csprojファイルにあることがわかりました

<Reference Include="OtherProjectNothingToDo">
  <HintPath>..\..\..\..\Pedidos\XBAP\Pedidos\Pedidos\bin\Release\Pedidos.exe</HintPath>
</Reference>

それからメモ帳を使って取り外しましたが、今は大丈夫です。

0
Tony

ターゲットフレームワークが実際に3.5またはターゲットにするフレームワークに設定されていることを確認します。正しく設定されていないとエラーになることがあります。

0
helper

私もこの問題を抱えていました。私の場合、blabla.dllは私のソリューションで参照されていましたが、blabla.dllは、プロジェクトで参照したanother.dllでも使用されていました。

両方のblabla.dllのバージョンを確認したところ、同じではありませんでした。そのため、another.dllを正しいblabla.dllで更新してから、ソリューションで新しいanother.dllを参照しました。エラーはなくなりました。

要するに:私はblabla.dllの2つのバージョンを使用していました

私に知らせないにしても、これが理にかなっていることを願っています。 :)

詳細な説明については、私のブログを確認してください: ブログ記事

よろしく、ジェイコブIedema

0
user2854828