如何将MSB3245(无法parsing引用)警告视为错误?
我的问题是基于另一个 ,但我想做相反的 :告诉msbuild将该警告视为错误,而不是压制一个特定的msbuild警告。
不过,到目前为止,我所看到的只有/p:WarningsAsErrors
只能用于csc警告和错误。 我尝试着丢掉MSB
然后用Googlesearch哪些数字可以在那里工作,但没有运气。
有没有办法将msbuild(命令行)的“assembly reference not found”警告视为错误?
最近我需要类似的东西(在某些日志事件上作用),但我找不到干净的解决scheme,主要是因为我没有想到如何以编程方式访问msbuild进程中的logging器。 我确实想出了这个,适应你的问题的原则是:
- 安装自定义logging器扫描警告
- build立
- 如果发生警告,则设置一个静态标志
- 有一个自定义任务检查该标志,并提出一个错误,如果它打开
听起来很难,但代码很简单:
using Microsoft.Build.Framework; using Microsoft.Build.Utilities; namespace Foo { public static class Common { public static bool errorsOccurred = false; } public class ScanLogger : Logger { public override void Initialize( IEventSource eventSource ) { eventSource.MessageRaised += ( s, e ) => Common.errorsOccurred |= e.Message.Contains( "MSB3245" ); } } public class CheckErrors : Task { public override bool Execute() { if( Common.errorsOccurred == false ) return true; Log.LogError( "errorsOccurred = true" ); return false; } } }
这是一个使用它的示例msbuild脚本:
<UsingTask TaskName="Foo.CheckErrors" AssemblyFile="Foo.dll"/> <Target Name="MyBuild"> <Message Text="MSB3245"/> <!-- simulate the build warning --> <Foo.CheckErrors /> <!-- this will trigger an error --> </Target>
你像这样调用它:
msbuild /logger:Foo.dll my.proj
编辑我只是需要这一次,但无法find原来的DLL或项目文件等了 – 我想存储只是代码和最简单的编译指令,并build立它在飞行时需要它可能更干净。 因此,基本上将上面的代码存储在一个文件customlogger.cs中,然后在构build过程中的某个地方,在使用自定义logging器有效调用msbuild之前,使用
<Target Name="BuildCustomLoggerDll"> <Csc Sources="$(MSBuildThisFileDirectory)customlogger.cs" References="System.dll;mscorlib.dll;Microsoft.Build.Framework.dll;Microsoft.Build.Utilities.v4.0.dll" TargetType="Library" OutputAssembly="$(MSBuildThisFileDirectory)CustomLogger.dll"/> </Target>
看来与这个警告相关的消息不是一个警告:
如果您的代码需要此引用,则可能会出现编译错误
,是不是很正确。 如果缺less的引用是一个WPF主题,您将得到一个运行时错误(System.IO.FileNotFoundException)。
另外,如果你专门寻找MSB3245,你会得到:
CSC:警告CS1691:“MSB3245”不是有效的警告号码
- 从NuGet检入包到版本控制?
- 无法findv120的构build工具(Platform Toolset ='v120')
- 在Build Server上构build不带Visual Studio的ASP.NET 4.5
- 什么是MSBuild日志的默认位置?
- 我可以在Visual Studio中设置LARGEADDRESSAWARE吗?
- 升级到.NET 4.5后MSBuild部署失败
- 什么时候应该将copy-local设置为true,何时不应该这样做?
- 卡住不活动的msbuild.exe进程,lockingStylecop.dll,Nuget AccessViolationException和CIbuild立相互冲突的奥秘
- 在项目锥体之外的.csproj中包含内容文件