TFS / C #: регистрация пользовательских предупреждений в процессе сборки - PullRequest
0 голосов
/ 09 июля 2019

Я разбираюсь с проблемой, которую мы создали для себя. Что я хотел бы сделать, так это записать предупреждение в наших сборках TFS для любого кода, который создает конкретный класс. Я не хочу, чтобы предупреждение о времени выполнения (у меня оно уже есть), я хочу, чтобы во время сборки было предупреждение о том, что ProjectX использует BadClass.cs. Идея в том, что это даст нам дополнительное место, чтобы увидеть вещи, которые нужно исправить, когда наш хак больше не нужен.

Так что-то вроде этого:

public class BadClass
{}
public class OkClass
{}

public class MyBadService
{
   var a = new BadClass(); <-- Logs a warning to the build output
}

public class MyOkService
{
   var a = new OkClass(); <-- Does not log a warning
}

Edit: Мне не нравится идея использовать устаревшие; это неправильно. У нас уже есть код с устаревшими атрибутами, и он потеряется в шуме. Я не хочу общего предупреждения, для которого я не могу контролировать сообщение. Я хочу яркие неоновые вывески с включением клаксонов и тысячу восклицательных знаков в сообщении. В основном все, что я могу сделать, кроме неудачной сборки. Я сейчас использую директиву прекомпилятора #warning, и она в основном делает то, что я хочу, но для этого нужно, чтобы человек не забыл добавить предупреждение. Я ищу что-то более автоматическое. Я видел, как сторонние библиотеки делают подобные вещи, поэтому я знаю, что это возможно.

Ответы [ 2 ]

0 голосов
/ 09 июля 2019

Почему бы просто не использовать устаревший атрибут?Он может генерировать для вас предупреждение о сборке: https://docs.microsoft.com/en-us/dotnet/api/system.obsoleteattribute?view=netframework-4.8 Вы даже можете сделать так, чтобы он выдавал ошибку, если хотите.

0 голосов
/ 09 июля 2019

Я думаю, что ответ может быть отрицательным.

Похоже, вы используете или вызываете msbuild.exe для создания своих проектов на C #.Но, насколько мне известно, MSBuild фактически вызывает csc.exe для сборки проектов C # за время сборки .

Так что на самом деле вам нужно записать предупреждение, когда компилятор компилирует код C #, если он распознает где-то в вашем коде, использует BadClass во время сборки .

Если у вас есть исходный код BadClass в том же решении, добавьте ссылочный формат проекта в xx.csproj, который содержит BadClass, и установите # warning в BadClass itможет генерировать предупреждение во время сборки.

Но я думаю, что сценарий, в котором вы находитесь, выглядит примерно так: вы разработали одну сборку и раздали ее своему пользователю, поэтому вы хотите, чтобы он генерировал предупреждение, когда пользователь вызывает один BadClass в вашей сборке и строит свой собственныйпроект, чтобы напомнить ему о заботе при использовании этого плохого класса.Если это так, это невозможно для MSbuild AFAIK.Если я что-то неправильно понимаю, не стесняйтесь знать, что я знаю:)

Обновление :

Как сказали Дэниел и Джонсон, ObsoleteAttribute достаточно, чтобы сделатьэтот.Хотя нет действительного способа генерировать предупреждения непосредственно из аспекта msbuild, но msbuild будет вызывать компилятор C # во время процесса сборки, поэтому генерирует предупреждение компилятора, которое может выводиться для построения окна вывода.

...