【发布时间】:2017-01-17 08:23:49
【问题描述】:
一般任务。我的任务是,如果存在这样的 DLL,而这些 DLL 没有找到,因此没有被复制到输出文件夹,那么(一组 C# 项目的)构建就会失败。似乎相应的警告不是编译器的警告,因此我无法为 Visual Studio 中的“将警告视为错误”选项提供警告代码。我发现的解决方法是使用 MsBuild,就像在 here 中描述的那样。但是我仍然找不到任何使用 Visual Studio 构建的解决方案。
问题。有没有办法在 Visual Studio 的构建后事件中获取构建日志,尤其是构建警告,并在存在某些确切警告时使构建失败?
我看到了什么。看了here,但建议的宏不是一个方便的解决方案。 根据this 和this,Visual Studio 不会为 C# 项目保存构建日志。
更具体。我被要求提供有关我想要出错的特定警告的信息。这是“MSB3245:无法解析此引用。无法找到程序集...”
【问题讨论】:
-
您是否考虑过创建一个在构建之后运行的 msbuild 目标,扫描丢失的 dll 并在出现问题时引发错误?或者,如果您编辑答案并对被视为错误的条件更加具体,例如添加一个实际示例,有人可以提出适当的解决方案吗?
-
@stjin 感谢您的建议。我怎么知道丢失了哪些文件?如果我有权访问构建日志,我可以捕获带有特定代码或消息的警告。但在其他情况下......我应该分析项目文件(csproj)的结构并将参考信息与位于输出文件夹中的 DLL 进行比较吗?更新了答案;我想赶上 MSB3245。
-
@HansPassant 谢谢,我看过这些页面。我想真正的问题是项目引用的配置不一致导致运行时异常(因为找不到所需的 DLL)。因此,现在我看到解决此问题的方法很少:1)在 MSB3245 的情况下构建过程失败,2)在比较项目文件结构和输出文件夹文件(如 stjin 建议的那样)后,构建过程失败。
-
Hans 的建议是解决真正的问题,而不是诊断。还有另一种方法可以将该警告变成一个硬错误顺便说一句:添加一个运行您的程序的构建后:]。但同样,这并没有修复太多。
标签: c# visual-studio msbuild