2009-11-30 13 views

Répondre

0

Je fini par détecter la langue et à l'aide CodeSnippetTypeMember()

Dim onDeleting = "Partial Private Sub OnDeleting()" & Environment.NewLine & "End Sub" 
type.Members.Add(New CodeSnippetTypeMember(onDeleting)) 
1

Il est un hack horrible, aussi méchant que celui C#, mais il fonctionne:

Imports System.CodeDom 
Imports System.CodeDom.Compiler 
Imports System.IO 

Module Module1 

    Sub Main() 
     Dim unit As New CodeCompileUnit 
     Dim nspace As New CodeNamespace("SomeNamespace") 
     Dim vbclass As New CodeTypeDeclaration("SomeClass") 
     vbclass.IsClass = True 
     Dim snippet As New CodeSnippetTypeMember("Partial _") 
     vbclass.Members.Add(snippet) 
     Dim method As New CodeMemberMethod() 
     method.Name = "SomeMethod" 
     method.Attributes = MemberAttributes.Private 
     vbclass.Members.Add(method) 
     nspace.Types.Add(vbclass) 
     unit.Namespaces.Add(nspace) 

     dim provider As CodeDomProvider = CodeDomProvider.CreateProvider("VB") 
     Dim options As New CodeGeneratorOptions() 
     options.BlankLinesBetweenMembers = False 
     dim writer As new StringWriter() 
     provider.GenerateCodeFromCompileUnit(unit, writer, options) 
     Console.WriteLine(writer.ToString()) 
     Console.ReadLine() 
    End Sub 

End Module 

Notez que l'option BlankLinesBetweenMembers est crucial de faire le travail de hack. Sortie:

Option Strict Off 
Option Explicit On 

Namespace SomeNamespace 
    Public Class SomeClass 
Partial _ 
     Private Sub SomeMethod() 
     End Sub 
    End Class 
End Namespace 
+0

Merci pour la réponse, mais je préfère ne pas affecter tout mon code généré en changeant l'option BlankLinesBetweenMembers pour celui-ci petit hack. – adam0101