2010-12-28 14 views
1


基本的に、App.exeのコンポーネントの1つであるstrong-names(強く署名された)アセンブリx.dllがあります。アセンブリの署名鍵は、私たちのリポジトリであり、それはアセンブリは、アセンブリがのがそれに名前を付けてみましょう、一般的なパッケージをインストールし、いくつかのインストーラによってGACに置くことになっているcommon.msiユーザーのアプリケーションが変更されるたびにアセンブリをGACに再デプロイする必要があります

[assembly: AssemblyDelaySign(false)] 
[assembly: AssemblyKeyFileAttribute(@"..\..\xxx.snk")] 
[assembly: AssemblyKeyName("")] 

を書き込むことによって署名されています。しかし、私たちのコンポーネント自体はApp.msiによってインストールされます。一緒にデプロイすると、すべてが機能します。しかし、App.msiに変更が加えられたとき、x.dllとはまったく関係がなく、App.msiが再展開されると、App.exeはx.dllを見つけることができません。 x.dllに変更が加えられていないことに注意してください。しかし、common.msiも展開されていると、すべてが機能します。だから私はビルドバージョンや何かについての問題、あるいは私が何も知らないマニフェストがなければならないと思っています。私が間違っていることが明らかなことはありますか?アセンブリを個別にデプロイするだけで、アセンブリが変更され、それを使用するコンポーネントが変更されるたびに再デプロイしない限り、アセンブリに触れることはできませんか?ありがとう。

編集:それはあなたがGACにそれをインストールしているのはなぜssembly GAC

答えて

1

を置くことを要件(私が何もできない1)でしょうか?それをしないでください。

「アセンブリをGACに再デプロイする必要があります」というタイトルは間違っています。 あなたが書いたことは、アセンブリがGACに存在する必要があることを意味するものではありません。


EDIT - いくつかの追加情報。

依存関係を調べる場合は、Redgateのリフレクタを使用して、App.exeのようなアセンブリを調べて、依存している他のアセンブリを判断できます。これらの依存関係にはバージョン番号が含まれます。

私はコマンドラインから、アセンブリ情報を出力するツールを知りません。多分1つがあります。それぞれに埋め込まれた、

public static void Main(string[] args) 
    { 
     if ((((args == null) || (args.Length != 1)) || (args[0] == "-?")) || (args[0] == "-h")) 
     { 
      Usage(); 
     } 
     else 
     { 
      try 
      { 
       Console.WriteLine(Assembly.LoadFrom(args[0]).FullName.ToString()); 
      } 
      catch (Exception exception) 
      { 
       Console.WriteLine("Exception: {0}", exception.ToString()); 
       Usage(); 
      } 
     } 
    } 

あなたは、バージョン番号など、正確な厳密な名前を決定するために、このAPP.EXE上のツールとしてだけでなく、x.dllを実行できます。これを欠いている、私はこのように、それを行うためのツールを書きましたアセンブリ。

これは、物事が期待どおりに機能しない理由についてのいくつかの洞察を与えるのに役立ちます。

x.dllの1つのバージョンがGACにあっても、そのバージョンのDLLを使用するためにApp.exeのような任意のアプリケーションは必要ありません。アプリはローカルディレクトリに独自のバージョンのdllをインストールできます。

+0

これは要件ですが、変更することはできません。アセンブリは他のコンポーネントでも使用されることになっています。あなたの答えは残念ながら何も答えません –

+1

"他のコンポーネントによって使用されています"は、GACにインストールする正当な理由ではありません。あなたは間違っているよ! – Cheeso

+0

コンポーネントは、他のコンポーネントによって使用されるGAC内にある必要はありません。同じディレクトリになければなりません。 – Femaref

関連する問題