2009-08-17 1 views
2

VSTOを使用してExcel 2003/2007のアドインをいくつか作成しましたが、通常はVSTOプロジェクトで.NET DLLを参照してしまいます(通常はプロジェクト間でコードを再利用します)。
次の問題が発生しました。 dllへの呼び出しは、デバッグモードや開発マシンで完全に動作しますが、msiインストーラでアドインをデプロイすると、dllはアドインのフォルダに追加されますが、アドインはDLLを呼び出すことができるようです。
私はこれを回避する方法を考え出しました。アドインにセキュリティを与えるインストーラのカスタムアクションの上に、アドインが参照する個々のdllにセキュリティを与える別のカスタムアクションを追加します。
http://msdn.microsoft.com/en-us/library/bb332052.aspxVSTOプロジェクトの展開に参照アセンブリを追加する方法はありますか?

私の問題は、動作している間、私はそれを正しくやっていると確信していません。それは非常に面倒であり、私が作ることができるのは実際には同じ場所でセキュリティが2回与えられているという事実を指しています。
ここにいる人は、私が正しいかどうかを教えてくれるでしょう。

答えて

1

私の場合、MyCompany.Officeの下にアドインスイートがあります。

私は、両方のアドインであるMyCompany.Office.Word.dllとMyCompany.Office.Excel.dllによって参照されるMyCompany.Office.dllというコア機能の共有ライブラリを持っています。 Excel用の複数のアドイン、Word用のアドイン、Excel用のアドインなど)

私がしたのは、ソリューションのための強力な名前のキーファイルを作成し、3つのプロジェクトすべてでリンクしたことでした。私は同じ強力な名前のキーファイルを持つ3つのライブラリにすべて署名しました。

次に、ファイルの場所ではなく、公開キーをエビデンスとして使用してCASエントリを追加するインストーラアクションを作成しました。だから、私のカスタムアクションは最終的にcaspol.exe -m -q -ag "My_Computer_Zone" -strong -hex <my public key> -noname -noversion FullTrust -n "MyCompany_Office" -d "Code group for MyCompany.Office add-ins."を呼び出します。これにより、その公開鍵を持つすべてのライブラリにFullTrustが与えられます。

公開キーを表示するには、コマンドプロンプトを開き、キーファイルの場所に移動し、sn -Tp mykeyfile.snkと入力します。

private static String GetPublicKeyHexString(String assemblyPath) 
{ 
    AssemblyName assmName = Assembly.LoadFile(assemblyPath).GetName(); 
    StringBuilder output = new StringBuilder(); 
    Byte[] publicKey = assmName.GetPublicKey(); 

    foreach(Byte byte in publicKey) 
    { 
     output.Append(byte.ToString("x").PadLeft(2, '0')); 
    } 

    return output.ToString(); 
} 
+0

は、私は有効な答えとしてこれをマークする前にこれを試してみる必要があるが、これは賢明になります:あなたは(SetSecurityはを拡張するような)公開鍵のプロ文法を取得したい場合は、このようなコードを使用することができます。 – Mathias

+0

また、証拠としてURLを使用し、URLをインストールディレクトリに設定することもできます。これにより、そのフォルダ内のすべてのアセンブリがFullTrustになります。私はこれをお勧めしません。誰かがあなたのインストールフォルダに悪意のあるアセンブリを落として完全な信頼を与えてしまうと、誰かが脆弱性を作成したことを非難する可能性があります。私は誰かがそれを示唆した場合にのみこれを言います、なぜあなたはそれが良い考えではないかを見ることができます。 – HackedByChinese

+0

ありがとう、私はそれが動作すると信じています。私は実際には、単一のdll(スレッド内のLex007ポスト)の代わりにコンマで区切られたdllのリストを追加できるように、SetSecurityプロジェクトの小さな修正を提案するmsdnフォーラムでこの投稿を見つけました。そうすれば、同じキーを共有する必要はありません。 http://social.msdn.microsoft.com/forums/en-US/vsto/thread/cec6abb6-4716-4bde-91f2-25fb68abd54e/ – Mathias

関連する問題