TFS / C#:在构建过程中记录自定义警告

时间:2019-07-08 22:32:17

标签: visual-studio msbuild tfsbuild

我正在解决我们为自己创建的问题。我想做的是在实例化特定类的任何代码的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
}

编辑: 我不喜欢使用过时的想法;这是一个误称。我们已经有了带有过时属性的代码,这会在噪音中丢失。我不想发出无法控制消息的一般警告。我想要明亮的霓虹灯招牌,上面放着卡拉克斯灯,并在消息中有1000个感叹号。基本上,我可以做的所有事情都会使构建失败。我现在正在使用#warning precompiler指令,它主要是按照我的意愿进行操作,但是需要人工记住才能添加警告。我正在寻找更神奇的东西。我已经看到第三方库做了这样的事情,所以我知道它的可能性。

2 个答案:

答案 0 :(得分:0)

我认为答案可能是否定的。

似乎您使用或调用msbuild.exe来构建C#项目。但是据我所知,MSBuild实际上调用csc.exe在 build time 内构建C#项目。

因此,实际上,您想要的是在编译器编译C#代码时,如果它在代码中的某处识别出在 build time 中使用BadClass,则会记录一条警告。

如果在同一解决方案中具有BadClass的源代码,则将项目引用格式添加到包含BadClass的xx.csproj中,并在{中设置#warning {1}}可能会在构建时生成警告。

但是我认为您所处的场景是这样的:您开发了一个程序集并将其分发给您的用户,因此当用户在程序集中调用一个BadClass并构建自己的项目以提醒时,您希望它生成警告他在使用这个不好的课程时要小心。如果是这样,则对于msbuild AFAIK是不可能的。如果我误解了什么,请随时了解我的知识:)

更新

正如丹尼尔和约翰逊所说,ObsoleteAttribute足以做到这一点。虽然没有直接从msbuild方面直接生成警告的有效方法,但是msbuild将在生成过程中调用C#编译器,因此生成的编译器警告可以输出到生成输出窗口。

答案 1 :(得分:0)

为什么不仅仅使用Obsolete属性?它可以为您生成一个构建警告: https://docs.microsoft.com/en-us/dotnet/api/system.obsoleteattribute?view=netframework-4.8 您甚至可以根据需要使它发出错误。