2008-09-11 6 views
1

Bir C# kitaplığında System.Xml.Serialization.XmlSerializer sınıfının bir örneğini başlatırken bir kilitlenme görüyoruz. Kilitleme, bir sözlükte yinelenen anahtar eklemeyi denediğinde, yapıcıda gerçekleşir. Aşağıda bir yığın izleme ekledim.Crash Örnekleme System.Xml.Serialization.XmlSerializer C#

Bu kilitlenme yalnızca bir makinede meydana geliyor ve .NET 3.5 yüklememizin onarımında yardımcı olmadı. Başka herhangi bir benzer sorun gördü mü? sorunu açıklıyor bu bağlantıyı, Bulunan

System.ArgumentException was unhandled 
    Message="Item has already been added. Key in dictionary: 'mainbuild' Key being added: 'mainbuild'" 
    Source="mscorlib" 
    StackTrace: 
     at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add) 
     at System.Collections.Hashtable.Add(Object key, Object value) 
     at System.Collections.Specialized.StringDictionary.Add(String key, String value) 
     at System.CodeDom.Compiler.Executor.ExecWaitWithCaptureUnimpersonated(SafeUserTokenHandle userToken, String cmd, String currentDir, TempFileCollection tempFiles, String& outputName, String& errorName, String trueCmdLine) 
     at System.CodeDom.Compiler.Executor.ExecWaitWithCapture(SafeUserTokenHandle userToken, String cmd, String currentDir, TempFileCollection tempFiles, String& outputName, String& errorName, String trueCmdLine) 
     at Microsoft.CSharp.CSharpCodeGenerator.Compile(CompilerParameters options, String compilerDirectory, String compilerExe, String arguments, String& outputFile, Int32& nativeReturnValue, String trueArgs) 
     at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames) 
     at Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(CompilerParameters options, String[] sources) 
     at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(CompilerParameters options, String[] sources) 
     at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource(CompilerParameters options, String[] sources) 
     at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameters, Evidence evidence) 
     at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies) 
     at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, String location, Evidence evidence) 
     at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamespace) 
     at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace) 
     at System.Xml.Serialization.XmlSerializer..ctor(Type type) 
     at OurTools.Tools.Common.XML.DataAccess`1.DeserializeFromXml(String strFilePath) in c:\AutomatedBuild\projects\1.0\OurTools.Tools.Common\OurTools.Tools.Common\XML\DataAcess.cs:line 100 
     at OurTools.Tools.Common.ProjectFileManager.GetProjectInfoModel() in c:\AutomatedBuild\projects\1.0\OurTools.Tools.Common\OurTools.Tools.Common\ProjectFileManager.cs:line 252 
     at OurTools.Tools.Common.ProjectFileManager.GetAvailableCultures() in c:\AutomatedBuild\projects\1.0\OurTools.Tools.Common\OurTools.Tools.Common\ProjectFileManager.cs:line 299 
     at OurAppLib.GeneratorOptions.DefaultCultures() in c:\AutomatedBuild\projects\1.0\OurApp\OurAppLib\GeneratorOptions.cs:line 192 
     at OurAppLib.GeneratorOptions.ReadCulturesFromArgs(List`1 arglist, String& errormsg) in c:\AutomatedBuild\projects\1.0\OurApp\OurAppLib\GeneratorOptions.cs:line 358 
     at OurAppLib.GeneratorOptions.ReadFromArgs(String[] args, String& errormsg) in c:\AutomatedBuild\projects\1.0\OurApp\OurAppLib\GeneratorOptions.cs:line 261 
     at OurApp.Program.Main(String[] args) in c:\AutomatedBuild\projects\1.0\OurApp\OurApp\Program.cs:line 76`print("code sample");` 

cevap

5

: http://social.msdn.microsoft.com/forums/en-US/asmxandxml/thread/4476f044-bab9-492d-bb94-4e0960bd2d26

hızlı bir özeti: seri, nesne tüm ortam değişkenleri dışında bir sözlük yapar, ancak tüm bir tolower() çalıştırmak için görünür girdileri. Yani, kasa dışında aynı olan iki ortam değişkeniniz varsa, bir kilitlenme elde edersiniz.

Bu, yalnızca değişkenler için büyük/küçük harf duyarlılığı uygulayan cygwin gibi bir sistem içinden geçerken sorun olur. Bizim durumumuzda, make kullanıyoruz.

Birkaç çözüm var, ancak bunların hepsi, C# uygulamanız çalışırken ortamınızın çoğaltılmış değişkenlere sahip olmadığından emin olmak için dönüyor.

+1

Tam olarak aynı problemi yaşadım (Cygwin içinden de), cevabınız ÇOK yardımcı oldu! – mmmmmmmm

+0

Sevindim Size biraz zaman kazandırabilirim. Bunu anlamaya çalışırken kafamı duvara çarpıyordum. – tsellon

+0

Bu hata, 4.0 ve 4.7 arasındaki bir "son" değeri için .Net çalışma zamanının son bir sürümünde giderilmiştir. Hala 2.0-3.5 çalışma süresinde var. – RichieHindle