Visual Basic 2008Expressで作成したプロジェクトがあります。他の人のC#プロジェクトから変換しましたが、機能します。いくつかのDLL依存関係があります。プロジェクトを公開して別のマシンにインストールできるようにしましたが、DLLごとに、次のエラーが発生します。「マークを付けるには、アセンブリに強い署名が必要です。前提条件として。」私はいくつかの調査を行いましたが、多くを見つけられず、私が見つけたものは本当に理解していません。このエラーはどういう意味ですか?それを解決するための最良の方法は何ですか?もう1つのこと:それすべてのdllを正しく参照できるようになるまでに長い時間がかかりました。そのため、メインプロジェクトの機能が損なわれる可能性があるため、ソリューションがDLLの移動とは関係がないことをお勧めします。
ClickOnceを介して公開している場合は、公開ページに移動して[アプリケーションファイル]をクリックします。そこから、DLLのリストが表示されます。問題を引き起こしているものの公開ステータスが「前提条件」ではなく「含める」とマークされていることを確認してください。
このエラーメッセージの意味は、現在の公開設定では、インストールを実行する前に、問題のすべてのアセンブリがターゲットマシンのグローバルアセンブリキャッシュに存在することを想定していることです。 GAC内のすべてのアセンブリは強い署名が必要であるため、強い署名がない前提条件としてマークされたアセンブリでは、このエラーが発生します。
回避策はそれよりも簡単です。
ClickOnceを使用してこのアプリケーションを展開する場合を除き、アセンブリにStrongNameを付ける必要はありません。
厳密に名前が付けられたアセンブリは、主に暗号化キーによって署名されたアセンブリです。これはVisualStudioで行うのはかなり簡単で、依存関係を並べ替える必要はありません。
非エクスプレスのVisualStudioを使用しているため、手順が少し異なる場合があります。
このリンクをチェックしてください...強い名前であなたのアセンブリに署名するための指示があります:
上記の解決策が失敗した後、これはちょうど私のために働いた:
エラーのあるアセンブリへの参照を削除してから、再度追加してください。
Adam Robinson's ソリューションを使用すると公開できましたが、エンドユーザーシステムがハードドライブの空き容量に注意してインストールできないと文句を言うため、公開後にユーザーがプロジェクトをインストールできないことがわかりました。これが根本的な原因である可能性は非常に低いと思われたため、さらに調査しました。
どうやら私の問題の根拠は、私の参照の1つが、私のプロジェクトが使用した.dllも参照していたが、バージョンが異なることでした。 ClickOnceにはこれがなく、すでに存在するバージョンを理由に、.dllの2番目のバージョンをユーザーのシステムにコピーすることを拒否しました。 .dllとプロジェクトが他の.dllの同じバージョンを参照するように修正すると、エラーが削除され、インストールの問題が修正されました。
問題が.csprojファイルにあることがわかりました
<Reference Include="OtherProjectNothingToDo">
<HintPath>..\..\..\..\Pedidos\XBAP\Pedidos\Pedidos\bin\Release\Pedidos.exe</HintPath>
</Reference>
それからメモ帳を使って取り外しましたが、今は大丈夫です。
ターゲットフレームワークが実際に3.5またはターゲットにするフレームワークに設定されていることを確認します。正しく設定されていないとエラーになることがあります。
私もこの問題を抱えていました。私の場合、blabla.dllは私のソリューションで参照されていましたが、blabla.dllは、プロジェクトで参照したanother.dllでも使用されていました。
両方のblabla.dllのバージョンを確認したところ、同じではありませんでした。そのため、another.dllを正しいblabla.dllで更新してから、ソリューションで新しいanother.dllを参照しました。エラーはなくなりました。
要するに:私はblabla.dllの2つのバージョンを使用していました
私に知らせないにしても、これが理にかなっていることを願っています。 :)
詳細な説明については、私のブログを確認してください: ブログ記事
よろしく、ジェイコブIedema