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!
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