diff --git a/src/Generator/Generators/CSharp/CSharpSources.cs b/src/Generator/Generators/CSharp/CSharpSources.cs index e694c54c..4e90c4d7 100644 --- a/src/Generator/Generators/CSharp/CSharpSources.cs +++ b/src/Generator/Generators/CSharp/CSharpSources.cs @@ -153,18 +153,21 @@ namespace CppSharp.Generators.CSharp public virtual void GenerateUsings() { PushBlock(BlockKind.Usings); - WriteLine("using System;"); - WriteLine("using System.Runtime.InteropServices;"); - WriteLine("using System.Security;"); + var requiredNameSpaces = new List { + "System", + "System.Runtime.InteropServices", + "System.Security", + }; var internalsVisibleTo = (from m in Options.Modules where m.Dependencies.Contains(Module) select m.LibraryName).ToList(); + if (internalsVisibleTo.Any()) - WriteLine("using System.Runtime.CompilerServices;"); + requiredNameSpaces.Add("System.Runtime.CompilerServices"); - foreach (var customUsingStatement in Options.DependentNameSpaces) - WriteLine("using {0};", customUsingStatement); + foreach (var @namespace in requiredNameSpaces.Union(Options.DependentNameSpaces).OrderBy(x => x)) + WriteLine($"using {@namespace};"); WriteLine("using __CallingConvention = global::System.Runtime.InteropServices.CallingConvention;"); WriteLine("using __IntPtr = global::System.IntPtr;"); diff --git a/tests/NamespacesDerived/NamespacesDerived.cs b/tests/NamespacesDerived/NamespacesDerived.cs index 47d8c403..ab14cff8 100644 --- a/tests/NamespacesDerived/NamespacesDerived.cs +++ b/tests/NamespacesDerived/NamespacesDerived.cs @@ -18,7 +18,7 @@ namespace CppSharp.Tests base.Setup(driver); driver.Options.GenerateDefaultValuesForArguments = true; driver.Options.GenerateClassTemplates = true; - + driver.Options.DependentNameSpaces.Add("System.Runtime.CompilerServices"); driver.Options.Modules[1].IncludeDirs.Add(GetTestsDirectory("NamespacesDerived")); var @base = "NamespacesBase"; var module = driver.Options.AddModule(@base); @@ -35,7 +35,6 @@ namespace CppSharp.Tests driver.Generator.OnUnitGenerated += o => { Block firstBlock = o.Outputs[0].RootBlock.Blocks[1]; - firstBlock.WriteLine("using System.Runtime.CompilerServices;"); firstBlock.NewLine(); firstBlock.WriteLine("[assembly:InternalsVisibleTo(\"NamespacesDerived.CSharp\")]"); };