私は、ユーザーの要求に応じてクラスをコンパイルし、dll(Equation.dllという名前)をWebサイトのサブディレクトリに配置します。管理者はいつでも再コンパイルできます。ただし、クラスのインスタンスが作成されると、「別のプロセスによって使用されているため、プロセスはファイルにアクセスできません」というメッセージが表示されます。AppDomainを使用してDLL内のクラスをインスタンス化する
私が理解しているように、これを回避するには、別のAppDomainからインスタンスを作成するしかありません。次回管理者が再コンパイルする必要があるときは、このAppDomainをアンロードする必要があります。 (おそらく私の仮定は間違っていますか?)
私の人生を救うために、このクラスのインスタンスを作成することはできません。確かに、私はここに私の頭の上に少しだ...だから私は何にでもスイングしている。この時点で私の抜粋です:DLLが(私は楽しみのために、「ビン」でこれを置く試みているものの、いずれか全く成功)にコンパイルされていないところ
AppDomainSetup ads = new AppDomainSetup();
ads.PrivateBinPath = HttpContext.Current.Server.MapPath("~/equationcache/");
ads.ApplicationBase = HttpContext.Current.Server.MapPath("~/equationcache/");
AppDomain appDomain = AppDomain.CreateDomain("EquationDomain", null, ads);
Object wrapper = appDomain.CreateInstance("Equation, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null", "Cnn.CostModel.Business.CalculationEngine");
「equationcache」フォルダがあります。呼び出し中のアセンブリ名が正しいように見えます(appDomain.Loadで動作します)。呼び出しの型名が正しいように見えます。ログによると、次の処理が行われます。私はそれが「equationcache」ディレクトリ内の「Cnn.CostModel」の異なる形を探している理由を理解していない
=== Pre-bind state information ===
LOG: User = xxx\xxx
LOG: DisplayName = Cnn.CostModel, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
(Fully-specified)
LOG: Appbase = file:///C:/Users/xxx/Documents/Visual Studio 2008/Projects/CnnCostModel/CnnCostModels/equationcache/
LOG: Initial PrivatePath = C:\Users\xxx\Documents\Visual Studio 2008\Projects\ACnnCostModel\CnnCostModels\equationcache\Calling assembly : Equation, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null.
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///C:/Users/xxx/Documents/Visual Studio 2008/Projects/CnnCostModel/CnnCostModels/equationcache/Cnn.CostModel.DLL.
LOG: Attempting download of new URL file:///C:/Users/xxx/Documents/Visual Studio 2008/Projects/CnnCostModel/CnnCostModels/equationcache/Cnn.CostModel/Apa.CostModel.DLL.
LOG: Attempting download of new URL file:///C:/Users/xxx/Documents/Visual Studio 2008/Projects/CnnCostModel/CnnCostModels/equationcache/Cnn.CostModel.EXE.
LOG: Attempting download of new URL file:///C:/Users/xxx/Documents/Visual Studio 2008/Projects/CnnCostModel/CnnCostModels/equationcache/Cnn.CostModel/Cnn.CostModel.EXE.
。確かに、呼び出しコードはbinフォルダの "Cnn.CostModel.dll"にあります。代わりに "Equation.dll"ファイルを取得するために何をする必要がありますか?
また、私はこの努力の根底にありますか?非常に不満。どんな助けでも大いに感謝します。
私はMEFに見てみましょう...ありがとう:
リックシュトラールは、すべてこれを行う方法のいくつかの良い情報を持っている、その私が学んだからどこ! –