2012-01-06 10 views
1

私はこのような他のアプリ(APP 2)をロードアプリ(APP1)がをロードできませんでした。ファイルまたはアセンブリを読み込めませんでした。のAppDomain ExecuteAssemblyは、ファイルまたはアセンブリ

App2にはFooへの参照があります。 app1にFooへの参照を追加すると、それは機能します。問題は、app1がFooを参照しないようにすることです。 App1の主な目的は、ネットワーク共有上のapp2の新しいバージョンを検出し、app2をアンロードし、新しいバイナリをコピーし、上記の行を使ってapp2を再起動することです。これを実行した後、app1に古いFooがある場合、app2はそれ自身の実行ディレクトリでFooの代わりにそのappを使用します。

どのようにしてapp2だけがFooを承認するようにすることができますが、app1はまだそのエラーなしでapp2をロードしますか?

注:私はシャドウコピーを使用しています。これは、app1がFooへの参照を持つときに機能しています。

appDomainSetup.ShadowCopyFiles = "true"; 
+0

いいえ、Fooはapp2が必要とする私自身のアセンブリです。 Fooはapp2が進化するにつれて時間の経過と共に変化することができ、私はapp1を実行しているフォルダに失効したFooを望んでいません。 –

+0

私の間違い - 私は意味しました:Fooをapp2に埋め込むことで、Fooを実行中のフォルダのどこにでも別のファイルとして保存する必要がなくなり、Fooは決して古くならないでしょう... – Yahia

+0

ああ、それは意味がありますそれもやってください。他のプロジェクトはFooを参照しています。私は、以下のMikaelによって提供されたリンクがうまくいくと思います。 –

答えて

1

AppDomainSetup.ApplicationBaseを参照してください。このプロパティを使用して、アプリドメインの基本アプリケーションディレクトリを指定できます。 ApplicationBaseは、本質的にアセンブリプロービングの出発点です。さらに、AppDomainSetup.PrivateBinPathを使用してプライベートビンの追加パスを指定することもできます。これにより、プロービングは追加のディレクトリを検索することができます。 MSDNページにはコード例があります。

+1

それはうまくいった!シンプルで簡単:appDomainSetup.ApplicationBase = this._runningAppPath; –

2

このSO質問を参照してください:How to add folder to assembly search path at runtime in .NET?

またはあなたがどこのアセンブリを検索し、APP2の依存関係への参照を追加する指定して、あなたの設定に<codebase>タグを追加することができます。

<configuration> 
    <runtime> 
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="MyAssembly2" culture="neutral" publicKeyToken="307041694a995978"/> 
      <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/> 
     </dependentAssembly> 
     </assemblyBinding> 
    </runtime> 
</configuration> 
関連する問題