9

私はオープンソース プロジェクトを管理しており、プロジェクトのバイナリ パッケージでリリースされるバイナリに署名したいと考えています。Visual Studiocsprojslnファイルを使用してプロジェクトを管理およびビルドし、これらのファイルをプロジェクトのソース パッケージの一部として配布しています。

snkビルドの生成されたバイナリに署名し、キー ペア ファイルを配布する必要がないようにするにはどうすればよいですか? Visual Studio を使用してアセンブリに署名すると、各プロジェクト ファイルをビルドするためにキー ペアのコピーが必要になります。パスワードで保護されていても、キーペアを配布することに不安があります。

編集

もう 1 つの注意点は、プロジェクト内の一部のアセンブリが を介してフレンド アクセスを許可InternalsVisibleToAttributeし、プロジェクト参照を介してそれらのフレンドをビルドすることです。したがって、このようなアセンブリは、署名されたアセンブリを参照するときに厳密な名前を使用する必要があります。ただし、キーペアが配布されていない場合、エンドユーザーはどのようにしてソースを構築し、プロジェクトの関係を維持できますか? 一時的なキー ペア ファイルが使用されている場合、署名されたアセンブリの公開キー トークンが変更され、InternalsVisibleToAttribute参照が壊れることはありませんか?

4

3 に答える 3

6

キーペアを配布しないでください。厳密な名前は、新しいバージョンのアセンブリが同じ発行元からのものであることを確認するためのものです。

別の開発者がプロ​​ジェクトを分岐したい場合、彼らは独自のキーペアを生成し、それは彼らのバージョンがあなたからのものではないことを効果的に示し、あなたに依存する他のアセンブリは再コンパイルされない限りロードされなくなります。これは必ずしも便利ではありませんが、悪意のあるバージョンのアセンブリを発行してサイレントに配布する人から保護します。

于 2009-12-02T07:52:47.647 に答える
2

Sharptooth のソリューションは、コード内のアセンブリ参照がプロジェクト ファイルにエンコードされているものだけである場合にうまく機能します。プロジェクトInternalsVisibleToAttributeが、厳密な名前の文字列が必要なその他の手段を介して他のアセンブリを参照している場合、一時キーを使用してリポジトリ ソースを構築することはできません。これを行うと、厳密な名前の文字列に存在する公開キーの参照が変更され、コードが壊れます。

これは私のアプリケーションの場合であるため、別のアプローチを採用する必要がありました。

sln私は基本的にとファイルのコピーをcsproj別のフォルダー階層にcsproj作成し、次のようにファイルを変更しました。

  • 元のソースを指すように、すべてのファイル参照をリンクに変換しました。
  • 各 AssemblyInfo.cs ファイルをコピーして変更し、厳密InternalsVisibleToAttributeな名前での使用を含めました。
  • ファイル参照が相対パスになるように各csprojファイルを変更しました (各プロジェクトにファイルをコピーする必要がなくなりました)snksnk

最初はすべて手動で行っていましたが、簡単な方法で自動化できることに気付きました。1 番目と 3 番目のステップは XSLT で実装できますが、2 番目のステップは正規表現の検索/置換関数で実装できます。

今は 2 つのソリューションを維持する必要があるため、将来の頭痛の種を避けるためにこのタスクを自動化することは理にかなっています。

リポジトリ内のソースは、エンドユーザーにビルドの制限やプロセスを課したくないので、厳密な名前でアセンブリをビルドしません。これは問題ありません。

于 2009-12-07T21:12:34.560 に答える