C# 可以将新类添加到现有dll并将其更新到源文件 C类源代码文件的集合,使用Microsoft.Csharp.CSharpCodeProvider.CompileAsemblyFromFile(参数,类文件)我们可以创建一个程序集dll文件。 公共静态字符串[]源文件=新字符串[]{ @“D:\pro1bk\projects\WCFService.cs”, @“D:\pro1bk\projects\Calculator.cs” }; 公众集会 { CSharpCodeProvider; 编译器参数参数; 编译结果; parameters=new System.CodeDom.Compiler.CompilerParameters(); AddAssemblyReference( typeof(System.Runtime.Serialization.DataContractAttribute).Assembly, 参数(参考组件); AddAssemblyReference(typeof(System.Xml.xmlement).Assembly, 参数(参考组件); ........ ........ parameters.GenerateInMemory=true; parameters.GenerateExecutable=false; parameters.OutputAssembly=@“D:\pro1bk\ServiceCal.dll”; parameters.TreatWarningsAsErrors=false; 参数.WarningLevel=4; parameters.TempFiles.KeepFiles=false; if(TargetFramework==TargetFramework.Silverlight) { parameters.CompilerOptions=“/nostlib”; } parameters.ReferencedAssemblys.AddRange(DefaultReferencedAssemblys); //parameters.MainClass=“App”; 尝试 { provider=新的CSharpCodeProvider(); 结果=provider.CompileAssemblyFromFile(参数、源文件); results.PathToAssembly=“”; 列表错误=新列表(results.errors.Count); ...... ...... } }
以上代码用于创建dll文件 我刚刚将该DLL(例如ClientProx.DLL)复制到另一个项目中。现在,我创建了一个带有方法的新类,以及如何使用旧类将这个新创建的类添加到现有的DLL(例如ClientProx.DLL) 在该DLL中添加新类(例如ClientProx.DLL)后,该类应在相应的文件中更新为新类 我们如何在运行时做到这一点?是否可以在现有DLL中添加新类并将其更新到正确的文件位置?C# 可以将新类添加到现有dll并将其更新到源文件 C类源代码文件的集合,使用Microsoft.Csharp.CSharpCodeProvider.CompileAsemblyFromFile(参数,类文件)我们可以创建一个程序集dll文件。 公共静态字符串[]源文件=新字符串[]{ @“D:\pro1bk\projects\WCFService.cs”, @“D:\pro1bk\projects\Calculator.cs” }; 公众集会 { CSharpCodeProvider; 编译器参数参数; 编译结果; parameters=new System.CodeDom.Compiler.CompilerParameters(); AddAssemblyReference( typeof(System.Runtime.Serialization.DataContractAttribute).Assembly, 参数(参考组件); AddAssemblyReference(typeof(System.Xml.xmlement).Assembly, 参数(参考组件); ........ ........ parameters.GenerateInMemory=true; parameters.GenerateExecutable=false; parameters.OutputAssembly=@“D:\pro1bk\ServiceCal.dll”; parameters.TreatWarningsAsErrors=false; 参数.WarningLevel=4; parameters.TempFiles.KeepFiles=false; if(TargetFramework==TargetFramework.Silverlight) { parameters.CompilerOptions=“/nostlib”; } parameters.ReferencedAssemblys.AddRange(DefaultReferencedAssemblys); //parameters.MainClass=“App”; 尝试 { provider=新的CSharpCodeProvider(); 结果=provider.CompileAssemblyFromFile(参数、源文件); results.PathToAssembly=“”; 列表错误=新列表(results.errors.Count); ...... ...... } },c#,.net,C#,.net,以上代码用于创建dll文件 我刚刚将该DLL(例如ClientProx.DLL)复制到另一个项目中。现在,我创建了一个带有方法的新类,以及如何使用旧类将这个新创建的类添加到现有的DLL(例如ClientProx.DLL) 在该DLL中添加新类(例如ClientProx.DLL)后,该类应在相应的文件中更新为新类 我们如何在运行时做到这一点?是否可以在现有DLL中添加新类并将其更新到正确的文件位置? 此问题的任何解决方案?更新组件将是危险的,不建议使用 相反 1> 将新编译的类[dll]存储在Is
此问题的任何解决方案?更新组件将是危险的,不建议使用 相反 1> 将新编译的类[dll]存储在
Isolatedstorage
或所需的文件夹中
2> 创建订阅
AssemblyResolve
事件的方法。此方法现在应返回应用程序从IsolatedStorage
或文件夹中所需的未解析dll。更新程序集将是危险的,不推荐使用
相反
1> 将新编译的类[dll]存储在Isolatedstorage
或所需的文件夹中
2> 创建订阅AssemblyResolve
事件的方法。此方法现在应返回应用程序从IsolatedStorage
或文件夹中所需的未解析dll
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);
......
......
}
}