• We have updated our Community Code of Conduct. Please read through the new rules for the forum that are an integral part of Paradox Interactive’s User Agreement.
It would be great if you could port this to Mono. Now it shows this:
Unhandled Exception: System.Security.SecurityException: No access to the given key
at Microsoft.Win32.KeyHandler..ctor (Microsoft.Win32.RegistryKey rkey, System.String basedir, Boolean is_volatile) [0x00000] in <filename unknown>:0
at Microsoft.Win32.KeyHandler..ctor (Microsoft.Win32.RegistryKey rkey, System.String basedir) [0x00000] in <filename unknown>:0
at Microsoft.Win32.KeyHandler.Lookup (Microsoft.Win32.RegistryKey rkey, Boolean createNonExisting) [0x00000] in <filename unknown>:0
at Microsoft.Win32.UnixRegistryApi.OpenSubKey (Microsoft.Win32.RegistryKey rkey, System.String keyname, Boolean writable) [0x00000] in <filename unknown>:0
at Microsoft.Win32.RegistryKey.OpenSubKey (System.String name, Boolean writable) [0x00000] in <filename unknown>:0
at Microsoft.Win32.RegistryKey.OpenSubKey (System.String name) [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) Microsoft.Win32.RegistryKey:OpenSubKey (string)
at Audax.Validator.Boot.FrameworkVersionCheck.HasRequiredVersion () [0x00000] in <filename unknown>:0
at Audax.Validator.Boot.FrameworkVersionCheck.Check40Installed () [0x00000] in <filename unknown>:0
at Audax.Validator.Boot.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0
[ERROR] FATAL UNHANDLED EXCEPTION: System.Security.SecurityException: No access to the given key
at Microsoft.Win32.KeyHandler..ctor (Microsoft.Win32.RegistryKey rkey, System.String basedir, Boolean is_volatile) [0x00000] in <filename unknown>:0
at Microsoft.Win32.KeyHandler..ctor (Microsoft.Win32.RegistryKey rkey, System.String basedir) [0x00000] in <filename unknown>:0
at Microsoft.Win32.KeyHandler.Lookup (Microsoft.Win32.RegistryKey rkey, Boolean createNonExisting) [0x00000] in <filename unknown>:0
at Microsoft.Win32.UnixRegistryApi.OpenSubKey (Microsoft.Win32.RegistryKey rkey, System.String keyname, Boolean writable) [0x00000] in <filename unknown>:0
at Microsoft.Win32.RegistryKey.OpenSubKey (System.String name, Boolean writable) [0x00000] in <filename unknown>:0
at Microsoft.Win32.RegistryKey.OpenSubKey (System.String name) [0x00000] in <filename unknown>:0
at (wrapper remoting-invoke-with-check) Microsoft.Win32.RegistryKey:OpenSubKey (string)
at Audax.Validator.Boot.FrameworkVersionCheck.HasRequiredVersion () [0x00000] in <filename unknown>:0
at Audax.Validator.Boot.FrameworkVersionCheck.Check40Installed () [0x00000] in <filename unknown>:0
at Audax.Validator.Boot.Program.Main (System.String[] args) [0x00000] in <filename unknown>:0

Mono JIT compiler version 2.10.8.1

At least command-line tool (I think Linux users would be fine with it :)).
 
Last edited:
I am currently working on a new version of the Validator. It will not initially support either Ck2 or Eu4, but eventually it may do so. (Is Eu4 out yet? Do I need to make a validator for that?)

The current Validator will continue to be developed with bug fixes and stuff as necessary, and will probably be used for Eu4 since the new one won't be ready for a bit.

Why? Basically, in the current Validator, I often want to do something, but the architecture makes it really difficult to do. Changing it is immensely difficult and leads to misery. So it's easier to start over with a clean slate.

The new Validator will have a CLI that supports popular OSes, and likely a GUI that won't work on all popular OSes.

So, what are your top features of the Validator that you use, or that you'd want. I need to know what is most important to people and get those set up first. Examples include: a GUI, non-Windows support, Windows support, comment metadata, helpful error correction + suggestion, errors that go to the file directly, and whatever you want.
 
I am currently working on a new version of the Validator. It will not initially support either Ck2 or Eu4, but eventually it may do so. (Is Eu4 out yet? Do I need to make a validator for that?)

The current Validator will continue to be developed with bug fixes and stuff as necessary, and will probably be used for Eu4 since the new one won't be ready for a bit.

Why? Basically, in the current Validator, I often want to do something, but the architecture makes it really difficult to do. Changing it is immensely difficult and leads to misery. So it's easier to start over with a clean slate.

The new Validator will have a CLI that supports popular OSes, and likely a GUI that won't work on all popular OSes.

So, what are your top features of the Validator that you use, or that you'd want. I need to know what is most important to people and get those set up first. Examples include: a GUI, non-Windows support, Windows support, comment metadata, helpful error correction + suggestion, errors that go to the file directly, and whatever you want.
I think it is important to note that CKII is by far the most popular CKII game out (the CKII Wiki gets more traffic than my other 4 wikis combined), so it would be wise to ensure it works with it.

As to features:
A basic GUI is important (though I can personally handle a command line just fine, I'd prefer a GUI)
Windows support. The other OSes is not a priority to me, though I imagine people who use them would rather like that ;)
If most/all errors can go to the appropriate line in the for the relevant mod file that'd be great, yeah

Beyond that the most important thing to me is really just clear, understandable error messages. If I can't figure out what the Validator is actually reacting to it isn't particularly helpful. The current version handles this nicely though.
The automatic correction feature is not something I've ever used. I prefer fixing errors manually in nearly all cases.

Can't think of anything important beyond that.
 
Getting another error again. It's just my luck that it's in the area I know is somehow causing a CTD! :/

Code:
Beginning validation...
Beginning Bookmarks validation...
Bookmarks validation complete in 34 ms!
Beginning Buildings validation...
Buildings validation complete in 4417 ms!
Beginning Casus belli validation...
Casus belli validation complete in 1018 ms!
Beginning Characters validation...

ec) EXCEPTION CONTEXT
ec) Validation Task: Characters
Validation Key: CharacterFile
Validation Type: Audax.Validator.TypeExtension.DeclarativeValidatorJob



ERROR
System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   --- End of inner exception stack trace ---
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.LoadDb()
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.GetChar(String target)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.GetMe(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharMaxAgeCheck.Run(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.RunOnElement(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.DeclarativeValidatorWorker.Validate()
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.ValidateOverride()
   at Audax.Validator.ValidatorJobBase.Validate()
   at Audax.Validator.ValidatorJob.Validate()
   at Audax.Validator.GameValidator.<>c__DisplayClass5.<Validate>b__3(ValidatorJob val)
   at System.Threading.Tasks.Parallel.<>c__DisplayClassf`1.<ForWorker>b__c()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass10.<ExecuteSelfReplicating>b__f(Object param0)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body)
   at Audax.Validator.GameValidator.Validate(Action onEachValidatorCompleteAction)
---> (Inner Exception #0) System.AggregateException: One or more errors occurred. ---> System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   --- End of inner exception stack trace ---
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.LoadDb()
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.GetChar(String target)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.GetMe(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharMaxAgeCheck.Run(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.RunOnElement(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.DeclarativeValidatorWorker.Validate()
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.ValidateOverride()
   at Audax.Validator.ValidatorJobBase.Validate()
   at Audax.Validator.ValidatorJob.Validate()
   at Audax.Validator.GameValidator.<>c__DisplayClass5.<Validate>b__3(ValidatorJob val)
   at System.Threading.Tasks.Parallel.<>c__DisplayClassf`1.<ForWorker>b__c()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass10.<ExecuteSelfReplicating>b__f(Object param0)
---> (Inner Exception #0) System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)<---
<---

If I uncheck "characters", the same thing happens, but instead at title history.
 
Getting another error again. It's just my luck that it's in the area I know is somehow causing a CTD! :/

Code:
Beginning validation...
Beginning Bookmarks validation...
Bookmarks validation complete in 34 ms!
Beginning Buildings validation...
Buildings validation complete in 4417 ms!
Beginning Casus belli validation...
Casus belli validation complete in 1018 ms!
Beginning Characters validation...

ec) EXCEPTION CONTEXT
ec) Validation Task: Characters
Validation Key: CharacterFile
Validation Type: Audax.Validator.TypeExtension.DeclarativeValidatorJob



ERROR
System.AggregateException: One or more errors occurred. ---> System.AggregateException: One or more errors occurred. ---> System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   --- End of inner exception stack trace ---
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.LoadDb()
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.GetChar(String target)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.GetMe(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharMaxAgeCheck.Run(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.RunOnElement(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.DeclarativeValidatorWorker.Validate()
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.ValidateOverride()
   at Audax.Validator.ValidatorJobBase.Validate()
   at Audax.Validator.ValidatorJob.Validate()
   at Audax.Validator.GameValidator.<>c__DisplayClass5.<Validate>b__3(ValidatorJob val)
   at System.Threading.Tasks.Parallel.<>c__DisplayClassf`1.<ForWorker>b__c()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass10.<ExecuteSelfReplicating>b__f(Object param0)
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at System.Threading.Tasks.Task.Wait()
   at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEachWorker[TSource,TLocal](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Action`3 bodyWithStateAndIndex, Func`4 bodyWithStateAndLocal, Func`5 bodyWithEverything, Func`1 localInit, Action`1 localFinally)
   at System.Threading.Tasks.Parallel.ForEach[TSource](IEnumerable`1 source, ParallelOptions parallelOptions, Action`1 body)
   at Audax.Validator.GameValidator.Validate(Action onEachValidatorCompleteAction)
---> (Inner Exception #0) System.AggregateException: One or more errors occurred. ---> System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   --- End of inner exception stack trace ---
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector)
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.LoadDb()
   at Audax.Validator.Clausewitz.Ck2.CharacterDb.GetChar(String target)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.GetMe(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharMaxAgeCheck.Run(ElementNode node)
   at Audax.Validator.Clausewitz.Ck2.CharConstraintBase.RunOnElement(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.PlaceholderConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ChildConstraintSystem.ChildConstraint.Validate(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ValidateInstanceAsBase(ElementNode node, NodeFlags flags)
   at Audax.Validator.TypeCore.ComplexConstraint.ComplexConstraintWorker.ElementValidate(ElementNode node)
   at Audax.Validator.TypeCore.ComplexConstraint.ElementValidate(ElementNode node)
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.DeclarativeValidatorWorker.Validate()
   at Audax.Validator.TypeExtension.DeclarativeValidatorJob.ValidateOverride()
   at Audax.Validator.ValidatorJobBase.Validate()
   at Audax.Validator.ValidatorJob.Validate()
   at Audax.Validator.GameValidator.<>c__DisplayClass5.<Validate>b__3(ValidatorJob val)
   at System.Threading.Tasks.Parallel.<>c__DisplayClassf`1.<ForWorker>b__c()
   at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
   at System.Threading.Tasks.Task.<>c__DisplayClass10.<ExecuteSelfReplicating>b__f(Object param0)
---> (Inner Exception #0) System.ArgumentException: An item with the same key has already been added.
   at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   at System.Linq.ParallelEnumerable.ToDictionary[TSource,TKey,TElement](ParallelQuery`1 source, Func`2 keySelector, Func`2 elementSelector, IEqualityComparer`1 comparer)<---
<---

If I uncheck "characters", the same thing happens, but instead at title history.

Wait, this exact same error still happens with 1.4.2? As far as I can see it should not.
 
this program is actually a must-have for the paradox game developers and i hope they use it to check their game data prior to releasing a new patch or extension.
What can I say except a simple "H3H3H3"
 
I've noticed an error: I have the Validator set to scan for mod errors only, yet duplicate IDs with vanilla files are still showing up.
 
I've noticed an error: I have the Validator set to scan for mod errors only, yet duplicate IDs with vanilla files are still showing up.

The Validator is supposed to show the error if either of the duplicates are found in a mod. Since if your mod conflicts with vanilla, you should probably fix your mod. Or do you mean that vanilla files that are overwritten by files in the mod still show up?
 
The Validator is supposed to show the error if either of the duplicates are found in a mod. Since if your mod conflicts with vanilla, you should probably fix your mod. Or do you mean that vanilla files that are overwritten by files in the mod still show up?

The latter. These are the localisations, which haven't shown up before when it was set to "show mod errors", at least not for me.
 
Does anyone else have this issue? I can't seem to reproduce it

I think I MIGHT be getting the same issue, if I'm reading this correctly.

validator2_zps78f16187.png
 
http://forum.paradoxplaza.com/forum/showthread.php?711348-1.11-custom_tooltip

Please have a look at this thread, an undocumented syntax change in the last patch.

also the "add_trait=" in character lists is now "trait="

Hmm, and in your mod folder you have files called "localisation\SwordOfIslam.csv", "localisation\text1.csv", etc?

hm ok that's weird no I don't. Strange because I didn't get those particular conflicts before. Wonder if some file names changed? Ah well.