VS2010: автогенерированные файлы и документация XML

Это действительно просто перепросить этот вопрос, заданный о Visual Studio 2008. VS2010 предлагает любую функцию, чтобы избавиться от предупреждения компилятора CS1591 для автоматически сгенерированного кода?

CS1591: Missing XML comment for publicly visible type or member

Чтобы процитировать вопрос для VS2008:

Это раздражение больше, чем проблема. Мой проект содержит число автогенерированных файлов (используя mgmtclassgen.exe). Когда я создаю XML-документация, моя прекрасная прокомментированная библиотека страдает от xml предупреждения о документации из этих автогенными файлами.

Есть ли способ либо a) подавить генерирующая документация для этих файлы или b) подавить предупреждение CS1591 просто для набора файлов? Я, очевидно, не хотите изменять файлы, которые автогенерируется, даже если просто добавить прагмы подавления.

EDIT: В моем случае файлы-нарушители генерируются службами WCF RIA, поэтому файл, создающий ошибки, является автоматически сгенерированным классом WebContext (MyProject.BusinessApplication.Web.g.cs).

Я не могу изменить этот файл, потому что он генерируется "на лету", все изменения будут уничтожены. Я также не хочу глобально отключать предупреждение, так как это полезно в моем неавтоматизированном коде.

Ответ 1

У меня была аналогичная проблема с автогенерированными классами сущностей. Мне удалось решить эту проблему, изменив файл шаблона. Это, очевидно, не будет работать для всех автоматически генерируемых сценариев, и это может не относиться к вашему конкретному сценарию RIA, но я опубликую здесь для кого-то другого, у которого может быть такая же проблема.

Откройте файл шаблона (something.tt) и найдите раздел сгенерированный автоматически xml-комментарий

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

Добавьте следующую строку сразу после блока комментариев

#pragma warning disable 1591 

Немного ниже этого, вы должны найти, где заканчивается блок пространства имен. Вероятно, это выглядит примерно так.

if (!String.IsNullOrEmpty(ObjectNamespace))
{
    PopIndent();
#>
}

Поместите следующую строку после этой закрывающей скобки

#pragma warning restore 1591

Если все работает правильно, всякий раз, когда ваши классы автоматически генерируются Entity Framework, они должны быть завернуты инструкциями pragma disable/restore. Это должно подавлять предупреждения о отсутствии комментариев XML в ваших классах EF без подавления предупреждений на уровне проекта.

Ответ 2

В следующей статье могут возникнуть некоторые советы по решению проблемы: http://lvquoc.blogspot.com/2010/11/disable-xml-comment-warning-in-workflow.html

Важной частью статьи является комментарий Алана МакБи: для отключения предупреждений, сгенерированных в рабочем процессе Windows VS2012 +, добавьте это в нижнюю часть вашего файла проекта:

<Target Name="XamlGeneratedCodeWarningRemoved" AfterTargets="MarkupCompilePass2">
  <Exec Command="for %%f in (@(_GeneratedCodeFiles)) do echo #pragma warning disable 1591 > %%f.temp" />
  <Exec Command="for %%f in (@(_GeneratedCodeFiles)) do type %%f >> %%f.temp" />
  <Exec Command="for %%f in (@(_GeneratedCodeFiles)) do echo #pragma warning restore 1591 >> %%f.temp" />
  <Exec Command="for %%f in (@(_GeneratedCodeFiles)) do move /y %%f.temp %%f" />
  <Message Text="Xaml Generated Code Warnings Removed: @(_GeneratedCodeFiles)" />
</Target>

Ответ 3

Для решения Quam Loc можно отключить предупреждения в файлах, созданных RIA, с использованием цели сборки:

<Target Name="CreateRiaClientFilesTaskDisableWarnings" AfterTargets="CreateRiaClientFiles">
  <Exec Command="for %%f in (@(RiaClientGeneratedFiles)) do echo #pragma warning disable &gt; %%f.temp" />
  <Exec Command="for %%f in (@(RiaClientGeneratedFiles)) do type %%f &gt;&gt; %%f.temp" />
  <Exec Command="for %%f in (@(RiaClientGeneratedFiles)) do attrib -r %%f" />
  <Exec Command="for %%f in (@(RiaClientGeneratedFiles)) do move /y %%f.temp %%f" />
  <Exec Command="for %%f in (@(RiaClientGeneratedFiles)) do attrib +r %%f" />
  <Message Text="CreateRiaClientFilesTaskDisableWarnings: @(RiaClientGeneratedFiles)" />
</Target>

Я только что опубликовал его на в моем блоге.

Ответ 4

Я столкнулся с подобной проблемой. То, что я сделал, было на любой странице, если нет комментариев XML для пространства имен, просто добавьте строку ниже кода, и вы не столкнетесь с аналогичной ошибкой.

'/// <summary>
/// Namespace provides implementation for ABC classes.
/// </summary>
[System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
class NamespaceDoc
{
}'