使用codeDom生成接口时的大括号和大括号

时间:2014-11-25 21:54:34

标签: c# codedom

我使用codeDom生成一个接口,我在不想要的地方得到大括号和大括号。我正在用[OperationContract()]装饰方法,但我不想要那里的括号。这是我写的代码

toStringMethod.CustomAttributes.Add(new CodeAttributeDeclaration("OperationContract"));

此外,生成的方法添加了大括号。我不想要那个。由于这是一个界面,我只想要一个分号。这就是现在的样子。

[OperationContract()]
System.Collections.Generic.List<Aristotle.P6.Model.KeyIssue.Issue> GetAllIssues()
{
}

以下是我编写的大部分代码;

  foreach (var dll in dlls)
        {
            Assembly assembly = Assembly.LoadFrom(dll);

            foreach (var type in assembly.ExportedTypes)
            {
                var methodInfo = type.GetMethods();
                CodeCompileUnit targetUnit;
                CodeTypeDeclaration targetClass;
                targetUnit = new CodeCompileUnit();
                CodeNamespace samples = new CodeNamespace("CodeDOMSample");
                samples.Imports.Add(new CodeNamespaceImport("System"));
                targetClass = new CodeTypeDeclaration("CodeDOMCreatedClass");
                targetClass.IsClass = true;
                targetClass.TypeAttributes =
                    TypeAttributes.Public | TypeAttributes.Sealed;
                samples.Types.Add(targetClass);
                targetUnit.Namespaces.Add(samples);




                foreach (var method in methodInfo)
                {
                    CodeMemberMethod toStringMethod = new CodeMemberMethod();
                    toStringMethod.Attributes =
                        MemberAttributes.AccessMask;
                    toStringMethod.Name = method.Name;
                    toStringMethod.CustomAttributes.Add(new CodeAttributeDeclaration("OperationContract"));
                    foreach (var item in method.GetParameters())
                    {
                        toStringMethod.Parameters.Add(new CodeParameterDeclarationExpression(item.ParameterType, item.Name));
                    }

                    toStringMethod.ReturnType =
                            new CodeTypeReference(method.ReturnType);

                    targetClass.Members.Add(toStringMethod);


                } 

                Program program = new Program();
                program.GenerateCSharpCode(type.Name, targetUnit);
            }

        }

更新

这就是我的GenerateCSharpCode方法:

  public void GenerateCSharpCode(string fileName, CodeCompileUnit targetUnit)
    {
        CodeDomProvider provider = CodeDomProvider.CreateProvider("CSharp");
        CodeGeneratorOptions options = new CodeGeneratorOptions();
        options.BracingStyle = "C";
        using (StreamWriter sourceWriter = new StreamWriter(fileName))
        {
            provider.GenerateCodeFromCompileUnit(
                targetUnit, sourceWriter, options);
        }
    }

1 个答案:

答案 0 :(得分:0)

当您使用CodeDom时,我知道您有一些关于如何创建代码的选项。如果要更改默认行为,则必须使用CodeGeneratorOptions并设置BracingStyle = "C";

请查看以下文章中的示例部分。

http://msdn.microsoft.com/en-us/library/system.codedom.compiler.codegeneratoroptions(v=vs.110).aspx

希望这有帮助。

修改

您是否生成了创建类或接口的代码?我了解您需要接口,因此您应将IsClass = true替换为IsInterface = true。 看看这个问题:how to create an interface method with CodeDom