2013-02-15 2 views
2

Ces dernières années, j'ai utilisé le serveur d'intégration continue Cruise Control .NET, et cela a bien fonctionné. Récemment, j'ai commencé à recevoir cette erreur après le démarrage de WebDashboard. Quelqu'un at-il des suggestions sur la façon de résoudre cette erreur? Ai-je fait une erreur dans le ccnet.cong? TIA.ERREUR INTERNE: L'article a déjà été ajouté. Clé du dictionnaire: 'tmp' Clé ajoutée: 'tmp'

INTERNAL ERROR: Item has already been added. Key in dictionary: 'tmp' Key being added: 'tmp' 
System.ArgumentException: Item has already been added. Key in dictionary: 'tmp' Key being added: 'tmp' 
    at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add) 
    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 ThoughtWorks.CruiseControl.Core.State.FileStateManager.LoadState(TextReader stateFileReader) in C:\Tools\CruiseControl.NET-1.9.1.0.source\project\core\state\FileStateManager.cs:line 111 
    at ThoughtWorks.CruiseControl.Core.State.FileStateManager.LoadState(String project) in C:\Tools\CruiseControl.NET-1.9.1.0.source\project\core\state\FileStateManager.cs:line 95 
    at ThoughtWorks.CruiseControl.Core.IntegrationResultManager.get_CurrentIntegration() in C:\Tools\CruiseControl.NET-1.9.1.0.source\project\core\IntegrationResultManager.cs:line 76 
    at ThoughtWorks.CruiseControl.Core.IntegrationResultManager.get_LastIntegrationResult() in C:\Tools\CruiseControl.NET-1.9.1.0.source\project\core\IntegrationResultManager.cs:line 41 
    at ThoughtWorks.CruiseControl.Core.IntegrationResultManager.get_LastIntegration() in C:\Tools\CruiseControl.NET-1.9.1.0.source\project\core\IntegrationResultManager.cs:line 58 
    at ThoughtWorks.CruiseControl.Core.Project.get_LastIntegration() in C:\Tools\CruiseControl.NET-1.9.1.0.source\project\core\Project.cs:line 1367 
    at ThoughtWorks.CruiseControl.Core.Project.CreateProjectStatus(IProjectIntegrator integrator) in C:\Tools\CruiseControl.NET-1.9.1.0.source\project\core\Project.cs:line 1332 
    at ThoughtWorks.CruiseControl.Core.IntegrationQueueManager.GetProjectStatuses() in C:\Tools\CruiseControl.NET-1.9.1.0.source\project\core\IntegrationQueueManager.cs:line 111 
    at ThoughtWorks.CruiseControl.Core.CruiseServer.<>c__DisplayClasse.<GetProjectStatus>b__d(ServerRequest) in C:\Tools\CruiseControl.NET1.9.1.0.source\project\core\CruiseServer.cs:line 475 
    at ThoughtWorks.CruiseControl.Core.CruiseServer.RunServerRequest(ServerRequest request, Nullable`1 permission, Nullable`1 eventType, Action`1 action) in C:\Tools\CruiseControl.NET-1.9.1.0.source\project\core\CruiseServer.cs:line 1512 

MISE À JOUR: Voici le code je travaille - "l'action (demande);" CruiseServer.cs ligne 1512 quelles:

/// <summary> 
    /// Encapsulates the code to process a request. 
    /// </summary> 
    /// <param name="request"></param> 
    /// <param name="permission"></param> 
    /// <param name="eventType"></param> 
    /// <param name="action"></param> 
    /// <returns></returns> 
    private Response RunServerRequest(ServerRequest request, 
     SecurityPermission? permission, 
     SecurityEvent? eventType, 
     Action<ServerRequest> action) 
    { 
     Response response = new Response(request); 
     try 
     { 
      // Validate the request and check the security token 
      ValidateRequest(request); 
      if (permission.HasValue) 
      { 
       CheckSecurity(request.SessionToken, 
        null, 
        permission.Value, 
        eventType); 
      } 

      // Perform the actual action 
      action(request); 
      response.Result = ResponseResult.Success; 
     } 
     catch (Exception error) 
     { 
      // Security exceptions have already been logged, just need to log any other exception 
      if (!(error is SecurityException)) 
      { 
       Log.Warning(error); 
      } 

      // Tell the caller the request failed and include the error message (but not the stack trace!) 
      response.Result = ResponseResult.Failure; 
      response.ErrorMessages.Add(
       new ErrorMessage(
        error.Message, 
        error.GetType().Name)); 
     } 
     return response; 
    } 

Ceci est la fonction qu'il finit par aller, où je fais un pas, puis dans les "data = integrationQueueManager ...":

/// <summary> 
    /// Gets information about the last build status, current activity and project name. 
    /// for all projects on a cruise server 
    /// </summary> 
    public virtual ProjectStatusResponse GetProjectStatus(ServerRequest request) 
    { 
     ProjectStatus[] data = null; 
     ProjectStatusResponse response = new ProjectStatusResponse(RunServerRequest(request, 
      null, 
      null, 
      delegate 
       { 
       data = integrationQueueManager.GetProjectStatuses(); 
       if (request.SessionToken != SecurityOverride.SessionIdentifier) 
       { 
        data = this.FilterProjects(request.SessionToken, data); 
       } 
      })); 
     if (data != null) response.Projects.AddRange(data); 
     return response; 
    } 

Next I étape dans "projectStatusList.Add ...":

/// <summary> 
    /// Gets the project statuses. 
    /// </summary> 
    /// <returns></returns> 
    /// <remarks></remarks> 
    public ProjectStatus[] GetProjectStatuses() 
    { 
     ArrayList projectStatusList = new ArrayList(); 
     foreach (IProjectIntegrator integrator in projectIntegrators) 
     { 
      IProject project = integrator.Project; 
      projectStatusList.Add(project.CreateProjectStatus(integrator)); 
     } 
     return (ProjectStatus[]) projectStatusList.ToArray(typeof (ProjectStatus)); 
    } 

Puis enfin, l'application renvoie une exception à "var = lastIntegration this.LastIntegration;" dans cette fonction:

/// <summary> 
    /// Creates the project status. 
    /// </summary> 
    /// <param name="integrator">The integrator.</param> 
    /// <returns></returns> 
    /// <remarks></remarks> 
    public ProjectStatus CreateProjectStatus(IProjectIntegrator integrator) 
    { 
     var lastIntegration = this.LastIntegration; 
     ProjectStatus status = new ProjectStatus(
      this.Name, 
      this.Category, 
      this.CurrentActivity, 
      lastIntegration.Status, 
      integrator.State, 
      this.WebURL, 
      lastIntegration.StartTime, 
      lastIntegration.Label, 
      lastIntegration.LastSuccessfulIntegrationLabel, 
      this.Triggers.NextBuild, 
      this.CurrentBuildStage(), 
      this.QueueName, 
      this.QueuePriority, 
      this.Parameters); 
     status.Description = this.Description; 
     status.Messages = this.messages.ToArray(); 
     status.ShowForceBuildButton = this.ShowForceBuildButton; 
     status.ShowStartStopButton = this.ShowStartStopButton; 
     return status; 
    } 

Quand je passe la souris le curseur de la souris sur "var = lastIntegration this.LastIntegration" il dit "this.LastIntegration = 'this.LastIntegration' a jeté une exception de type« System.ArgumentException". Nous vous remercions pour vos impressions!

+0

Roger peut vous montrer le code que vous avez pour le dictionnaire où l'erreur se produit .. si vous ne savez pas où l'erreur est lancée, je suggère également 'Debugging' le code, puis collez le code ici pour que quelqu'un puisse vous aider. 'Lorsque vous utilisez un dictionnaire, vous obtenez l'erreur car il y a déjà une clé en double qui a été ajoutée à la paire de valeurs clés. – MethodMan

Répondre

2

J'ai eu le même problème avec l'installation de mon programme chez un utilisateur. Il s'est avéré que le problème était dû à l'installation de Cygwin et non à mon programme. Voici le lien.

https://github.com/git-tfs/git-tfs/issues/135

+0

Merci pour cette suggestion. Je cours sur Windows et je n'ai aucun contrôle sur les variables d'environnement sur mon poste de travail. On avait l'habitude d'être en mesure de définir l'environnement dans Visual Studio (http://stackoverflow.com/questions/100543/how-do-i-set-specific-environment-variables-when-debugging-in-visual-studio), Cependant, je ne vois pas comment faire ça dans Visual Studio 2010. – Roger

Questions connexes