您的位置:首页 > 其它

如何解决VS.Net生成时的“不可恢复的生成错误”

2005-07-26 21:26 471 查看
终于正确解决了“不可恢复的生成错误”
分析:上网查了好多资料,我是跋山涉水啊,翻山越岭啊,先是试验了微软提供解决方法,无果:(后来又在CSDN翻阅了很多关于这个问题的讨论,普遍认为是微软的不可预知的错误,很多人说在重装VS.NET以后又莫名其妙地好了,所以我怀疑是不是某个DLL出问题了,在重装的时候又恢复了。

解决:再查资料,犯罪嫌疑人确定到了一个叫MergeMod.dll的家伙身上,位置在C:/Program Files/Common Files/Microsoft Shared/MSI Tools,我的版本是1.2,据我“调查”,正常的应该是2.0,连忙找来一个兄弟(特向牛牧兄致谢),问他要了一个2.0的DLL,覆盖以后,重新打开项目,点“生成”,太激动了,该死的错误信息没有啦!一切OK了,我不能保证其他遇到这个问题的朋友能不能利用此方法解决,但也可以为大家提供一个新的解决方案。
另:iis修复命令行:
C:/WINNT/Microsoft.NET/Framework/v1.1.4322/aspnet_regiis.exe -i
----------------------------------------------------------------------------------------------------------------------------------------
entityTypeInterface = entityType;
   compileUnit = new CodeCompileUnit();
   tempdAssemblyNameSpace = new CodeNamespace(EntityClassGenerator.TempEntityImpNamespace);
   tempdAssemblyNameSpace.Imports.Add(new CodeNamespaceImport("System.Data"));
   className = "_Impl_"+entityType.Name;
   referencedAssemblies = new StringCollection();
   referencedAssemblies.Add("System.dll");
   referencedAssemblies.Add("System.Data.dll");
   referencedAssemblies.Add("System.XML.dll");
   referencedAssemblies.Add(entityType.Assembly.Location);
   referencedAssemblies.Add("ORMEntity.dll");
   referencedAssemblies.Add("ORMCrud.dll");
//   referencedAssemblies.Add("ORMDALayer.dll");
   CodeTypeDeclaration generateClass = CreateClass();
   tempdAssemblyNameSpace.Types.Add(generateClass);     
   compileUnit.Namespaces.Add(tempdAssemblyNameSpace);
   CodeDomProvider provider = new CSharpCodeProvider();
#if DEBUG
//   OutputSourceCode(compileUnit,provider,className);
#endif
   ICodeCompiler compiler = provider.CreateCompiler();
   CompilerParameters cp = new CompilerParameters();
   foreach(string refassembly in referencedAssemblies)
    cp.ReferencedAssemblies.Add(refassembly);
   
   cp.GenerateInMemory = true;//在内存中建立Assembly   
   cp.IncludeDebugInformation = true;// 关闭调式信息,提高性能   
   cp.TreatWarningsAsErrors = false;// 忽略警告
//   StringWriter sw = new StringWriter();
//   ICodeGenerator cg= new CSharpCodeProvider().CreateGenerator(); 
//   CodeGeneratorOptions cgOption = new CodeGeneratorOptions();
//   cgOption.BlankLinesBetweenMembers = true;
//   cgOption.BracingStyle = "Block";    
//   cg.GenerateCodeFromCompileUnit(compileUnit, sw, cgOption);
//   Console.Write(sw.ToString());
   cp.OutputAssembly= Path.GetTempPath() +TempEntityImpNamespace+"."+className+".dll";
//   cp.OutputAssembly= TempEntityImpNamespace+"."+className+".dll";
   CompilerResults results = compiler.CompileAssemblyFromDom(cp,compileUnit);
   Assembly createdAssembly = results.CompiledAssembly; 
   return createdAssembly.GetType(tempdAssemblyNameSpace.Name+"."+className);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐