2011-01-20 16 views
0

新しいAppDomain内でテキストテンプレートクラスプロキシをホストしようとしています。次実行中のアセンブリを新しいAppDomain、FileNotFoundExceptionにロードできません

_TemplateDomain = AppDomain.CreateDomain(templateDomainFriendlyName); 
_TemplateProxy = (ITemplateProxy)_TemplateDomain.CreateInstanceAndUnwrap(
    Assembly.GetExecutingAssembly().FullName, 
    "TextTemplate.TemplateProxy"); 

Iで、私は私の新しいクラスでこれをしようとすると、しかし

_ScriptAppDomain = AppDomain.CreateDomain(scriptDomainFriendlyName); 
_ScriptProxy = (IScriptEngineProxy)_ScriptAppDomain.CreateInstanceAndUnwrap(
    Assembly.GetExecutingAssembly().FullName, 
    "LVK.Scripting.ScriptEngineProxy"); 

私はこの作業のコードが含まれている類似した何かを、いくつかの古いスクリプトコードを、持っています

ファイルまたはアセンブリ 'TextTemplateを読み込めませんでした。次のような詳細を含む「FileNotFoundException」を取得してください。バージョン= 1.0.0.0、文化=ニュートラル、PublicKeyToken = bb70a2e62a722ace 'またはその依存関係の1つ。システムは、指定されたファイルを見つけることができません。

私は何が欠けていますか?

基本的には、TemplateProxyクラス(MarshalByRefObjectから降順)を新しいappdomainにロードしようとするTextTemplate名前空間(およびアセンブリ)にTemplateクラスがありますが、メインアセンブリがこのドメインにロードされていないようです。

これは古いコードを使用していても、この新しいコードでは使用できない場合に機能しますが、違いはわかりません。

はここにいくつかの詳細です:

  • 総会は、私がどんなに、AssemblyResolveイベントをオーバーライドしていない
  • (どちらの作品古いもの、なかった)(どちらも古いものを、やったGACに登録されていません作品)

私はAssemblyResolveイベントを処理することにそれが必要な場合は嫌です。私はちょうど私の古いコードが働いたことが奇妙であることを発見した、そしてこれはしなかった。あなたのアセンブリをAssumying

+0

は、あなたがアセンブリ解決するためのコードを追加しなかった私のためにそれらを解決?たぶん、それはあなたが詳細を取得するのに役立つ可能性があります。 –

+0

TextTemplateアセンブリはGACにデプロイされていますか? –

+0

@Sam、いいえ、古いアセンブリではありませんでした。 –

答えて

11

は、現在のアプリケーションのベースと同じディレクトリにある、アプリケーションのベースを指定してみてください:

 AppDomain.CreateDomain(templateDomainFriendlyName, null, 
      new AppDomainSetup 
      { 
       ApplicationBase = AppDomain.CurrentDomain.SetupInformation.ApplicationBase 
      }); 
+0

これで、コードのその部分が問題なく実行されましたが、「コンパイラ実行ファイルcsc.exeが見つかりません」というメッセージが表示されます。 –

+1

このエラーはどこで発生しましたか? –

+0

私のテンプレートをコンパイルするコード。私はすべてを小さなプログラムに減らそうとしましたが、これはうまくいきましたので、問題をどこに戻すかを調べてみましょう。 –

3

あなたは何をしているかわからない場合は、新しいドメインを作成するための最良の方法ですこのように、現在の1からすべての設定をコピーします

 var newDomain = AppDomain.CreateDomain("NAME", 
         AppDomain.CurrentDomain.Evidence, 
         AppDomain.CurrentDomain.SetupInformation); 

私は同様の問題があったが、コピーを作成することは

関連する問題