Visual Basic2008Expressで作成したプロジェクトがあります。他の人のC#プロジェクトから変換しましたが、機能します。いくつかのDLL依存関係があります。プロジェクトを公開して別のマシンにインストールできるようにしましたが、DLLごとに、「前提条件としてマークするには、アセンブリに強い署名が必要です」というエラーが表示されます。私はいくつかの調査をしましたが、多くを見つけていません、そして私が見つけたものは私が本当に理解していません。このエラーはどういう意味ですか?それを解決するための最良の方法は何ですか?もう1つ、すべてのdllを正しく参照できるようになるまでに長い時間がかかりました。そのため、メインプロジェクトの機能が損なわれる可能性があるため、ソリューションがDLLの移動とは関係がないことをお勧めします。
10 に答える
ClickOnceを介して公開している場合は、公開ページに移動して[アプリケーションファイル]をクリックします。そこから、DLLのリストが表示されます。問題を引き起こしているものの公開ステータスが「前提条件」ではなく「含む」とマークされていることを確認してください。
このエラーメッセージの意味は、現在の公開設定では、インストールを実行する前に、問題のすべてのアセンブリがターゲットマシンのグローバルアセンブリキャッシュに存在することを想定していることです。GAC内のすべてのアセンブリは強い署名が必要であるため、強い署名がない前提条件としてマークされたアセンブリでは、このエラーが発生します。
回避策はそれよりも簡単です。
- プロジェクトに移動します。
- 右クリックして [プロパティ] を選択します。
- [セキュリティ] タブに移動します。
- [ClickOnce セキュリティ設定を有効にする] のチェックを外します。
ClickOnce を使用してこのアプリケーションを配置する場合を除き、アセンブリに StrongName を付ける必要はありません。
厳密に名前が付けられたアセンブリは、主に暗号化キーによって署名されたアセンブリです。これは、Visual Studio を使用すると非常に簡単に実行でき、依存関係の順序を変更する必要はありません。
高速ではない Visual Studio を使用しているため、手順が若干異なる場合があります。
- プロジェクトを右クリックし、プロパティを選択します
- [署名] タブをクリックします。
- 「アセンブリに署名する」にチェックを入れる
- コンボボックスで「<新規...>」を選択します
- ウィザードを完了する
- 再構築
このリンクをチェックしてください...強い名前でアセンブリに署名するための手順があります:
厳密な名前を作成するには、SDK コマンド プロンプトまたは Visual Studio 200X コマンド プロンプトに移動し、次のように入力します。
sn -k sgKey.snk
次に、以下のコマンドを実行して、厳密な名前をアセンブリに関連付けます
al /out:MyAssembly.dll MyOldAssembly.dll /keyfile:sgKey.snk
上記の解決策が失敗した後、これはちょうど私のために働いた:
エラーのあるアセンブリへの参照を削除してから、再度追加してください。
問題が .csproj ファイルにあることがわかりました
<Reference Include="OtherProjectNothingToDo">
<HintPath>..\..\..\..\Pedidos\XBAP\Pedidos\Pedidos\bin\Release\Pedidos.exe</HintPath>
</Reference>
その後、メモ帳を使用して削除しましたが、今は大丈夫です。
ターゲット フレームワークが実際に 3.5 またはターゲットにするフレームワークに設定されていることを確認します。正しく設定されていない場合、エラーが発生することがあります。
Adam Robinson のソリューションを使用すると公開できましたが、公開されたプロジェクトをユーザーがインストールできないことがわかりました。これは、ハード ドライブの空き容量に注意して、エンド ユーザー システムがインストールできないと文句を言うからです。これが根本的な原因である可能性は非常に低いように思われたので、さらに詳しく調べました。
どうやら私の問題の根拠は、私の参照の1つが、私のプロジェクトが使用した.dllを参照していたが、バージョンが異なることでした。ClickOnce にはこれがなく、.dll の 2 番目のバージョンをユーザーのシステムにコピーすることを拒否し、既に存在するバージョンを引用しました。.dll とプロジェクトが他の .dll の同じバージョンを参照するように修正すると、エラーが削除され、インストールの問題が修正されました。