我使用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);
}
}
答案 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