Я почти уверен, что вы ищете:
var staticClass = new CodeTypeDeclaration("Extensions")
{
Attributes = MemberAttributes.Public|MemberAttributes.Static
};
Однако, похоже, это не работает.Интересно, что:
provider.Supports(GeneratorSupport.StaticConstructors);
// True
provider.Supports(GeneratorSupport.PublicStaticMembers);
// True
Но когда вы идете и выводите его, никаких изменений не происходит, хотя свойство Attributes явно меняется с 0x00005002
на 0x00006003
.
По MicrosoftПодключить это невозможно :
Спасибо за сообщение об этом.К сожалению, не похоже, что мы можем поддерживать статические классы для CodeDom.
Причина заключается в том, что одна из целей разработки CodeDom состоит в том, чтобы быть независимым от языка, чтобы любой код, сгенерированный для одного языка, можно было легко сгенерировать для другого языка.Хотя статические классы часто используются в C #, VB не поддерживает их.Следовательно, добавление поддержки статических классов будет означать, что некоторый код, который может компилироваться для C #, не будет компилироваться для VB, что идет вразрез с нашими целями.
Хотя мы не можем принять решение по этому вопросу, мы просим вас продолжать предоставлять отзывы в будущем, чтобы помочь нам улучшить.
Грязное решение:
var type = new CodeTypeDeclaration("Extensions");
type.Attributes = MemberAttributes.Public;
type.StartDirectives.Add(
new CodeRegionDirective(CodeRegionMode.Start, "\nstatic"));
type.EndDirectives.Add(
new CodeRegionDirective(CodeRegionMode.End, String.Empty));
Производит:
#region
static
public class Extensions
{
}
#endregion
, который компилируется.