2
  Collection of C# class source code file, with Microsoft.Csharp.CSharpCodeProvider.CompileAssemblyFromFile(parameters,ClassFiles) we can create an assembly dll file.

       public static string[] sourcefiles = new string[]{
                    @"D:\pro1bk\projects\WCFService.cs" ,           
                    @"D:\pro1bk\projects\Calculator.cs"            
                                 };

 public Assembly Compile()
     {
        CSharpCodeProvider provider;
        CompilerParameters parameters;
        CompilerResults results;

        parameters = new System.CodeDom.Compiler.CompilerParameters();

        AddAssemblyReference(
            typeof(System.Runtime.Serialization.DataContractAttribute).Assembly,
            parameters.ReferencedAssemblies);

        AddAssemblyReference(typeof(System.Xml.XmlElement).Assembly,
            parameters.ReferencedAssemblies);

                 ........

                 ........
        parameters.GenerateInMemory = true;
        parameters.GenerateExecutable = false;
        parameters.OutputAssembly = @"D:\pro1bk\ServiceCal.dll";
        parameters.TreatWarningsAsErrors = false;
        parameters.WarningLevel = 4;
        parameters.TempFiles.KeepFiles = false;

        if (TargetFramework == TargetFramework.Silverlight)
        {
            parameters.CompilerOptions = " /nostdlib ";

        }

        parameters.ReferencedAssemblies.AddRange(DefaultReferencedAssemblies);
        //parameters.MainClass = "App";
        try
        {
            provider = new CSharpCodeProvider();
            results = provider.CompileAssemblyFromFile(parameters, sourcefiles);
            results.PathToAssembly = "";
            List<ErrorInfo> errors = new List<ErrorInfo>(results.Errors.Count);

             ......

             ......

          }

}

dllファイルを作成するための上記のコード。

その DLL (例: ClientProx.dll) を別のプロジェクトにコピーしました。これで、メソッドを含む新しいクラスが作成され、この新しく作成されたクラスを古いクラスを含む既存の DLL (例: ClientProx.dll) に追加する方法がわかりました。

そして、そのDLL(例:ClientProx.dll)に新しいクラスを追加した後、適切なファイルで新しいクラスとして更新する必要があります。

実行時にこれを行うにはどうすればよいでしょうか。既存の DLL に新しいクラスを追加して、適切なファイルの場所に更新することは可能ですか? これに対する解決策はありますか?

4

1 に答える 1

0

アセンブリの更新は危険であり、お勧めしません。

その代わり、

1>新しいコンパイル済みクラス[dll]をIsolatedstorageまたはまたは目的のフォルダに保存します。

2>イベントをサブスクライブするメソッドを作成します。このメソッドは、またはフォルダーAssemblyResolveからアプリが要求する未解決のdllを返す必要があります。IsolatedStorage

于 2012-08-01T14:43:03.367 に答える