当社では、クルーズコントロール& MSBuildを使用して、継続的な統合の一環として製品のビルドを自動化しています。ビルドプロセスが強力な名前でアセンブリに署名するときにInternalsVisibleを動作させるには?
ビルドの一部は、強力な名前を持つようにアセンブリに署名することです。
ローカルで開発するプロジェクトファイルでは、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/
この問題の適切な解決策は何ですか?
すべての入力と議論は歓迎します。
ありがとう、トーマス、私はこれを試してみるつもりですが、私はそれがうまくいくと答えとして受け入れます。どこにでも強力な署名を付けるにはいくつかの問題があります。その主な点は、その変更をスクリプトする方法がわからず、手動でやりたくないという点です。 MSBuildをよく知っている人が署名をしてくれた人が書いた既存のビルドスクリプトは、大きな変更を導入するのではなく少し修正するだけです。 – Wes
これはうまく動作しませんでしたが、答えとしてマークします。 動作しなかったのは、AssemblyInfoFilesという名前のItemGroupです。これは常に空になります。インクルードパターンは基本的にあなたが投稿したものです... ありがとう! – Wes
上記のItemGroupは、AssemblyInfo.csファイルをパッチすることがビルドスクリプトの下のディレクトリにあることを前提としています。 '**'ワイルドカードは現在のディレクトリの下のディレクトリと一致します。 MSBuildの組み込み構文の詳細については、[方法:ビルドするファイルの選択](http://msdn.microsoft.com/en-us/library/ms171454.aspx)を参照してください。 –