Как настроить автоматически сгенерированный комментарий при использовании .NET CodeDom Code Generation? - PullRequest
13 голосов
/ 18 февраля 2010

Я использую CodeCompileUnit и CSharpCodeProvider для генерации исходного кода.Это добавляет заголовок ниже ко всему сгенерированному коду.Есть ли способ настроить комментарий, чтобы он говорил что-то еще?

// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.3053
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>

Ответы [ 5 ]

6 голосов
/ 18 февраля 2010

Вы не можете. Я рекомендую добавить свой комментарий сразу после этого. Вот пример того, как это сделать: http://www.codeproject.com/KB/dotnet/ResourceClassGenerator.aspx

3 голосов
/ 15 мая 2014

Вы можете просто добавить свои комментарии в начале файла, чтобы они выглядели так:

//----------------------------------------------------------------------------
// My comments
// Are go here
//----------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by a tool.
//     Runtime Version:2.0.50727.3053
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//----------------------------------------------------------------------------

Непосредственно перед генерацией CompileUnit для TextWriter выполните:

CSharpCodeProvider provider = new CSharpCodeProvider();
var tw = new IndentedTextWriter(new StreamWriter(filename, false), "    ");

tw.WriteLine("//----------------------------------------------------------------------------");
tw.WriteLine("// My comments");
tw.WriteLine("// Are go here");

provider.GenerateCodeFromCompileUnit(compileUnit, tw, new CodeGeneratorOptions());
2 голосов
/ 12 ноября 2015

Довольно глупо, но когда мне нужно было это сделать, я создал класс, который оборачивает выходной поток и отсекает первые десять строк:

    /// <summary>
    /// Removes the first 10 lines from the output.  This removes the junk from the .NET Code Generator.
    /// </summary>
    internal class CodeOutputHelper : TextWriter
    {
        private readonly TextWriter _Inner;
        private int _CountDown = 10;

        public CodeOutputHelper( TextWriter inner )
        {
            _Inner = inner;
        }

        public override void WriteLine(string s)
        {
            if( _CountDown-- <= 0 )
            {
                _Inner.WriteLine(s);
            }
        }

        public override void Write( string value )
        {
            if (_CountDown<=0)
            _Inner.Write( value );
        }

        public override void Write( char value )
        {
            _Inner.Write( value );
        }

        public override Encoding Encoding
        {
            get
            {
                return _Inner.Encoding;
            }
        }
    }
}
1 голос
/ 01 сентября 2015

Поскольку вы не можете сделать это с помощью API в CodeDom, вот код, который я только что написал, чтобы решить проблему для себя.Не идеально, но делает трюк.

var marker = "//------------------------------------------------------------------------------";
var allTheCode = sw.ToString();
var justTheRealCode = allTheCode.Substring(allTheCode.IndexOf(marker) + marker.Length, allTheCode.LastIndexOf(marker) + marker.Length);
justTheRealCode = allTheCode.Substring(justTheRealCode.Length);
0 голосов
/ 15 июня 2013

Несмотря на то, что CodeDOM не поддерживает это напрямую, вы можете использовать тот факт, что этот комментарий явно разделен тегами <auto-generated> и </auto-generated>. Таким образом, вы можете изменить этот комментарий, просто выполнив строковые операции над выводом CodeDOM:

var provider = new CSharpCodeProvider();
string generatedCode;
using (var output = new StringWriter())
{
    provider.GenerateCodeFrom…(…, output, …);
    generatedCode = output.ToString();
}
string modifiedCode = Regex.Replace(generatedCode, …); // modify the output as you see fit
...