Пытаясь изучить CodeDom в Ms visual studio, я заметил, что генерация кода, похоже, игнорирует атрибуты членов, установленные для моего класса.
Это мой пример кода
using Microsoft.CSharp;
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.IO;
namespace CodeDomTest
{
class Program
{
public static CodeCompileUnit BuildHelloWorldGraph()
{
// Create a new CodeCompileUnit to contain
// the program graph.
CodeCompileUnit compileUnit = new CodeCompileUnit();
// Declare a new namespace called Samples.
CodeNamespace samples = new CodeNamespace("Samples");
// Add the new namespace to the compile unit.
compileUnit.Namespaces.Add(samples);
// Declare a new type called Class1.
CodeTypeDeclaration class1 = new CodeTypeDeclaration("Class1");
// Add the new type to the namespace type collection.
samples.Types.Add(class1); // should be private
Console.WriteLine("Class1 attributes: " + class1.Attributes);
return compileUnit;
}
public static string GenerateCSharpCode(CodeCompileUnit compileunit)
{
// Generate the code with the C# code provider.
CSharpCodeProvider provider = new CSharpCodeProvider();
// Create a TextWriter to a StreamWriter to the output file.
StringWriter strWriter = new StringWriter();
IndentedTextWriter tw = new IndentedTextWriter(strWriter, " ");
// Generate source code using the code provider.
provider.GenerateCodeFromCompileUnit(compileunit, tw,
new CodeGeneratorOptions());
// Close the output file.
tw.Close();
return strWriter.ToString();
}
static void Main(string[] args)
{
Console.WriteLine(GenerateCSharpCode(BuildHelloWorldGraph()));
Console.ReadKey();
}
}
}
Он производит следующий вывод:
Class1 attributes: 20482
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace Samples {
public class Class1 {
}
}
Как видите, Attributes
для объекта class1
установлено на 20482, что является значением по умолчанию. Как описано здесь , это означает, что класс должен быть закрытым (20480) и окончательным (2). Вместо этого класс создается как publi c. Что здесь происходит?