問題タブ [strongname]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - ASP.NET での厳密な名前の検証失敗の例外
私はVS 2005にプロジェクトソリューションを持っています.asp.netに1つのWebアプリケーションがあり、Webアプリケーションで使用されるc#で書かれたライブラリがいくつかあります. プロジェクトのプロパティで厳密な名前で署名されたソリューション プロジェクトのすべての dll/exe を使用しています。
ここで、ソリューション全体をビルドし、IE ブラウザーで asp 開発サーバーを介して Web アプリケーションを実行しようとすると、次の例外がスローされます。
アセンブリ 'abc.dll' の厳密な名前の検証に失敗しました。ファイルが改ざんされているか、部分的に署名されているが、正しい秘密鍵で完全に署名されていない可能性があります。
どうすればこの問題を克服できるか教えてください。
ありがとう、
アジト
.net - .Net Assembly で公開鍵トークンを使用して製品をクラックから保護する最善の方法は何ですか?
現実世界のソフトウェアをクラックすることを 100% 保証することは不可能であることはわかっています。しかし、私は自分の製品を通常のユーザーの不正アクセスから保護したいだけです。
.Net フレームワークには、読み込まれるアセンブリと公開キー トークンを指定できるため、ソフトウェアを保護するために使用できる厳密に型指定された名前に関する機能があります。
では、公開鍵トークンを使用して製品のクラッキングを防止するための最良のアイデアは何ですか?
c# - C# アセンブリに署名するときのインターフェイスが実装されていないというエラー
アセンブリに署名しようとして、次のエラーが発生しました。
「Utils.Connection」はインターフェイス メンバー「Interfaces.IConnection.BugFactory()」を実装していません。'Utils.Connection.BugFactory()' は 'Interfaces.IConnection.BugFactory()' を実装できません。'ThirdPartyLibrary.BugFactory' の一致する戻り値の型がないためです。
そのエラーは汚い、汚い嘘のように見えます! ではUtils.Connection
、次の方法があります。
new
1) キーワードを削除してもエラーが止まらず、2)キーワードを使用IConnection
しない別のクラスで同じエラーが発生しているため、キーワードは問題ではないと思いますnew
。 更新:override
の代わり に使用するとnew
、次のエラーが発生します。
'Utils.Connection.BugFactory()': 'ThirdPartyLibrary.ConnectionClass.BugFactory' は関数ではないためオーバーライドできません
これはThirdPartyLibrary.ConnectionClass.BugFactory
プロパティだからです。
クラスは 1 つしかないため、メソッドが返すものBugFactory
とは異なる戻り値の型を必要とするインターフェイスの問題ではありません。BugFactory
メソッドを return として明示的にマークしても、 DLLに厳密ThirdPartyLibrary.BugFactory
な名前を付けようとするとエラーが発生します。Utils
ThirdPartyLibrary
これは、CLS に準拠していない古い COM ライブラリの結果でしょうか? 私はこのライブラリを制御できません。アセンブリに署名しようとしないUtils
と、インターフェイス エラーは発生しません。
私の大きな質問は、このアセンブリに署名するにはどうすればよいですか?
編集:ここにあるものIConnection
があります:
c# - 相互に参照する 3 つのアセンブリに厳密な名前を付ける
これはおそらく非常に簡単ですが、私は困惑しています (そして私は c# の初心者です)。相互に参照する 3 つのアセンブリがあります (たとえば、デリゲート メソッドの通知の登録、パブリック メソッドの呼び出しなど)。それらはすべて、厳密な名前で署名しようとするまで正常にコンパイルされます。他の 2 つは厳密な名前を持っていないため、それらのいずれもコンパイルできません。私は何が欠けていますか?3 つすべてに対して厳密な名前のファイルを作成しましたが、snk を含めてコンパイルすることができません。
.net - 厳密な名前ツールを使用して .NET で厳密な名前を作成する
Google から指示を受けた後、次のコマンドで StrongNameFile を作成しようとしました。
コマンドを実行すると、次のエラー メッセージが表示されました。
私は次の方法でそれを試しました:
しかし、同じエラーが発生しました。誰かがこの問題を解決するのを手伝ってください。
c# - Windows Forms .NET の厳密な名前付きアセンブリ
OK、ここで厳密な名前付きアセンブリに関するすべての質問を読みましたが、何かを明確にしたいだけです。
まず、私が読んだことによると、GACはさておき、厳密な名前のアセンブリは、悪意のある第三者によるコードの変更や偽装を防ぎます。厳密な名前のアセンブリの前に発生した、この種のスプーフィングの実際の例へのリンクがあると便利です。
セキュリティまたは GAC が問題にならない場合でも、アセンブリに厳密な名前を付けることをお勧めします。その理由は次のとおりです。
厳密な名前のアセンブリを持つクライアントは、署名されているアセンブリのみを参照できます。
厳密な名前のアセンブリを持たないクライアントは、署名されているかどうかに関係なく、アセンブリを参照できます。
それは公正な分析ですか?
.net - 複数のプロジェクトで 1 つの SNK ファイルを使用する必要がある
Visual Studio 2008 を使用しており、複数のプロジェクトを含むソリューションがあります。アセンブリに署名するための 1 つの snk があり、これはソリューション フォルダーにあります。
各プロジェクトに snk をリンクしましたが、リンクされた snk でプロジェクトに署名しようとすると、ファイル ダイアログで snk ファイルが見つかりません。
ここで一歩を踏み外しましたか?
.net - .NET ランタイムは、厳密な名前のないアセンブリをどのように見つけますか?
厳密な名前のないアセンブリにはさまざまなバージョンがあり、app.exe.config でそれらへのバインディング リダイレクト/プローブ パスはありません。たとえば、MyDll (1.0.0.0_null_neutral) と MyDll (2.0.0.0_null_neutral) です。app.exe に対して、これらのアセンブリは LAC\MyDll_1.0.0.0_null_neutral および LAC\MyDll_2.0.0.0_null_neutral に保存されます。
私の理解では、MyDll アセンブリは厳密な名前が付いていないため、.NET ランタイムは MyDll の異なるバージョンを区別しません。したがって、MyDll 1.0.0.0 が既にメモリにロードされていて、MyDll 2.0.0.0 に対してビルドされたコードが実行された場合、.NET ランタイムは MyDll 2.0.0.0 をロードしません。
しかし、VS2008 でプロセスにアタッチしてモジュール ウィンドウを表示すると、MyDll 1.0.0.0 と MyDll 2.0.0.0 の両方が LAC フォルダーから読み込まれていることに気付きました。
私の理解にはどこかギャップがあるようです。誰かがそれを指摘できますか?
編集: これまでの応答に感謝します。はい、私はそのビットをスキップしました。実行可能ファイルは AssemblyResolve イベントをリッスンし、LAC を調べて処理します。
アセンブリに厳密な名前が付いていない限り、そのバージョンは無視されるというMSDNのドキュメントを見たことがあります。掘り出せるか見てみます。
.net - .NET:実行可能ファイルは厳密な名前で署名する必要がありますか?プライベートDLLはどうですか?
私のアプリケーションは3つのアセンブリで構成されています。2つのDLLを参照する1つのEXEです。DLLは私のアプリケーション専用であり、この実行可能ファイルによってのみ使用されます。
これらのアセンブリには強い名前を付ける必要がありますか?
FxCopは、現在作成しているすべてのアセンブリについて、次のことを行う必要があることを示唆しています。
CA2210:厳密な名前キーを使用して<アセンブリ>に署名します。
ただし、このアドバイスは次のように述べています。
一般に、アプリケーションのEXEアセンブリに厳密な名前を付けることは避けてください。
と
アプリケーション専用の厳密な名前のコンポーネントは避けたい場合があります。
これらのアセンブリに強い名前を付ける必要がありますか?この場合、そうする(またはそうしない)ことの利点は何ですか?
編集:
同様の構造を持ついくつかのアプリケーションを見ると、この問題についてのコンセンサスはないようです。Paint.NETとCrack.NETのバイナリには名前が付けられていませんが、 .NETReflectorとSnoopのバイナリには名前が付けられています。
興味深いことに、Expressionスイートでは、Microsoftは後者のアプローチを採用しています。たとえば、Expression Blendでは、Blend.exeと付随するDLL(Microsoft.Expression.Blend.dllなど)の両方に厳密な名前を付けることを選択しました。
「これらのアセンブリに強い名前を付ける必要がありますか?」という最初の質問に対する簡単な答えを受け取る可能性は低いようです。しかし、私の2番目の質問はまだ立っています:
この状況で強力な名前の署名バイナリにメリットはありますか?または、そうしないことの利点はありますか?
編集2:
どちらにせよ、圧倒的な理由がなければ、私は自分のアセンブリに強い名前を付ける傾向があります。したがって、私は誰かがこれを(最初のリンクから)拡張できるかどうかに興味があります:
「強い名前を付けると、依存関係の管理がより困難になり、プライベートコンポーネントに不要なオーバーヘッドが追加される可能性があります。」
.net - 実行中のアセンブリの厳密な名前を検証する
独自の実行中のアプリケーション プロセスとは別に、現在既に実行されている .NET アプリケーションの厳密な名前を確認することは可能ですか?
編集:明確にするために、実行中のアセンブリへのハードコードされたパスを必要としないソリューションが最も理想的なソリューションです。
編集 #2:リフレクションを使用せずにこれを行う方法はありますか?