当店では、Cruise ControlとMSBuildを使用して、継続的インテグレーションの一環として製品のビルドを自動化しています。
ビルドの一部は、アセンブリに署名して、強い名前を付けることです。
ローカルで開発する場合のプロジェクトファイルでは、署名が指定されていません。これは、MSBuildスクリプトによってオーバーライドされるためです。
InternalsVisibleTo
属性を使用する必要がある単体テストを導入することを決定するまで、これはすべて問題ありません。また、この手法を使用する単体テストを備えた優れたオープンソースライブラリの使用も開始しました。
これは、私のマシンではAssemblyInfo.cs
、次のステートメントを使用するように更新できることを意味します。
[assembly: InternalsVisibleTo("MyProject.Tests.UnitTests")]
そして、すべてが順調です。
ただし、ビルドマシンがアセンブリに署名するため、これをチェックインするとビルドが中断されます。代わりに、その行を次のように更新する必要があります。
[assembly: InternalsVisibleTo("MyProject.Tests.UnitTests,
PublicKey="magic key here..)"]
私は、議会に署名せず、それを1日と呼ぶことに半信半疑です。ただし、「アセンブリに署名することはベストプラクティスです」(このマントラを3回繰り返す)。これを行うことで利益が得られる場合は、リモートにしたくありません。
GACにはインストールしません。改ざんについては特に心配していません。ライブラリを使用するサードパーティについて心配する必要はありません。アプリを更新するときに、すべてのファイルを一度に更新します。最も識別可能な利点は、サポートの誰かがアセンブリのランダムなバージョンをランタイムフォルダにコピーできず、しばらくの間動作しているように見えることです。
署名を有効にするために約100個のプロジェクトファイルを手動で変更して、関連する作業の缶を開けたくありません。また、内部にあるべきものをパブリックとしてマークすることによって物事をハックしたくない、バインディングリダイレクトに入りたくない、そして単体テストを削除したくない。
強い名前を持たないことの簡単さと、強い名前を持つことのすべての利点(ある場合)が欲しいのですが、それを行うために多くの余分な作業を作成したくありません。質問するのは多すぎますか?
この投稿では、問題と解決策について詳しく説明していますが、私はそれを利用するMSBuildスクリプトの専門家ではありません。
http://social.msdn.microsoft.com/forums/en-US/msbuild/thread/02df643c-956a-48bd-ac01-4a1016d91032/
この問題の適切な解決策は何ですか?
任意の入力と議論のポイントは大歓迎です。