如果 Visual Studio 2012 / 2013 中的项目/解决方案中缺少文件,则报告错误/警告

2023-12-07

视觉工作室不再支持宏,因此以下问题中的答案仅对以前的版本有效:

如果 Visual Studio 中的项目/解决方案中缺少文件,则报告错误/警告

当您构建缺少文件的解决方案时,Visual Studio 2012 / 2013 是否可以报告错误/警告?


我修改了谢尔盖的脚本以递归地处理文件夹。

更新:为每个项目添加了一个消息框弹出窗口,其中列出了 Thomas Svensen 在评论中建议的缺失文件

更新 2:现在将丢失的文件写入输出窗口并作为错误列表中的错误。这不会导致构建失败,只会导致错误列表中的一行。

Imports EnvDTE
Imports EnvDTE80

Public Class E
    Implements VisualCommanderExt.IExtension

    Sub SetSite(DTE_ As EnvDTE80.DTE2, package As Microsoft.VisualStudio.Shell.Package) Implements VisualCommanderExt.IExtension.SetSite
        DTE = DTE_
        events = DTE.Events
        buildEvents = events.BuildEvents
        AddHandler buildEvents.OnBuildBegin, AddressOf OnBuildBegin
    End Sub

    Sub Close() Implements VisualCommanderExt.IExtension.Close
        RemoveHandler buildEvents.OnBuildBegin, AddressOf OnBuildBegin
    End Sub

    Private Sub OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction)
        For Each proj As Project In DTE.Solution.Projects
            Dim missingFiles As String = ""
            For Each item As ProjectItem In proj.ProjectItems
                missingFiles = missingFiles + CheckProjectItem(item, proj)
            Next
            If missingFiles.Length > 0 Then
                ' comment out to remove message box popup and only have missing files listed in output / error windows
                System.Windows.MessageBox.Show("Project " + proj.Name + " missing files:" + System.Environment.NewLine + missingFiles)
            End If
        Next
    End Sub

    Private Function CheckProjectItem(ByVal item As EnvDTE.ProjectItem, ByVal proj As EnvDTE.Project)
        Dim missingFiles As String = ""
        For Each chiltItem As ProjectItem In item.ProjectItems
            missingFiles = missingFiles + CheckProjectItem(chiltItem, proj)
        Next

        If (item.Kind = "{6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}") Then ' only check physical file items
            For i As Integer = 1 To item.FileCount
                Dim path As String = item.FileNames(i)
                If Not System.IO.File.Exists(item.FileNames(i)) Then
                    LogMissingFile(item.FileNames(i), proj.Name)
                    missingFiles = missingFiles + item.FileNames(i) + System.Environment.NewLine 
                End If
            Next
        End If
        Return missingFiles
    End Function

    Private Sub LogMissingFile(ByVal fileName As String, ByVal projectName As String)
        Dim ow As OutputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object
        Dim build As OutputWindowPane = ow.OutputWindowPanes.Item("Build")
        Dim outputString As String = "!! Missing file: " + fileName  + " in project " + projectName + System.Environment.NewLine
        Dim errorString As String = "Missing file in project " + projectName + ": " + fileName
        ' write to ONLY the Output window
        ' build.OutputString(outputString)
        ' write to BOTH Output and Error window; vsTaskPriorityHigh will show as error, vsTaskPriorityMedium as warning, and vsTaskPriorityLow as message
        build.OutputTaskItemString(outputString, vsTaskPriority.vsTaskPriorityHigh, vsTaskCategories.vsTaskCategoryMisc, vsTaskIcon.vsTaskIconCompile, fileName, 0, errorString)
    End Sub

    private DTE As EnvDTE80.DTE2
    private events As EnvDTE.Events
    private buildEvents as EnvDTE.BuildEvents

End Class
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如果 Visual Studio 2012 / 2013 中的项目/解决方案中缺少文件,则报告错误/警告 的相关文章

随机推荐

  • 基于通过散点的类别的彩色 3D 表面

    我有以下格式的数据 X Y Z 类别 我使用plotly 生成散点图 然后使用以下代码通过散点拟合曲线 from scipy interpolate import griddata import numpy as np import mat
  • JavaScript 事件处理程序的分配方式如何影响其执行?

    请考虑以下代码
  • 跨域调用WCF服务

    我有一个 WCF 服务 这是我要调用的方法 OperationContract WebInvoke Method POST BodyStyle WebMessageBodyStyle Wrapped ResponseFormat WebMe
  • Selenium:从下拉列表中选择值,该值取决于另一个下拉列表中选择的值

    Selenium 我必须从下拉列表中选择值 该值取决于另一个下拉列表中选择的值 例如 我有两个下拉列表 1 和 2 要在 2 中填充的值取决于 1 当我在下拉列表 1 中选择值时 页面将刷新并填充 2 中的值 我必须在下拉菜单 2 中选择值
  • ServiceStack 与 ASP.Net Web API [关闭]

    想要改进这篇文章吗 提供此问题的详细答案 包括引用和解释为什么你的答案是正确的 不够详细的答案可能会被编辑或删除 Closed 这个问题是基于意见的 目前不接受答案 我想编写一个新的 REST 风格 API 并且研究过 ServiceSta
  • 特殊字符和重音字符

    我正在为法国客户做一些工作 因此需要处理带重音的字符 但我遇到了很多困难 我希望解决方案很简单 并且有人可以向我指出 字符串 La For t pour T moin转换为 La For pour T oin 请注意重音字符后面缺少的字符
  • Wix 卸载快捷方式不起作用

    我正在尝试为我的应用程序创建卸载快捷方式 并且我正在使用此链接中的确切标记 http wixtoolset org documentation manual v3 howtos files and registry create unins
  • 是否可以让 vs2010 vsix 在本地检查更新?

    我正在工作中为 Visual Studio 编写项目结构和代码分析扩展 该项目无法发布到 Visual Studio 扩展库 有没有什么方法可以管理 Visual Studio 中内置的更新和部署 以便团队可以使用扩展并获取更新提示 不 这
  • getElementById().style.display 不起作用

    我做了一些js代码 div 出现或消失 src js openSearch gt var con document getElementById search bar if con style display none con style
  • 如何限制 QLineEdit 的文本框宽度最多显示四个字符?

    我正在使用基于 PySide 的 GUI 我制作了一个 一行 文本框QLineEdit输入的长度只有四个字符 我已经成功应用了这一限制 问题是我的文本框比需要的宽 即文本后面有很多未使用的空间 如何缩短文本框的长度 我知道通过使用 Desi
  • 访问 rshiny 中动态生成的输入

    我有一个应用程序 用户需要将随机生成的元素 在本例中为字母 分配给组 但可以决定使用多少个组 因为selectInput其中定义的成员资格是根据用户指定的数字动态生成的 命名菜单是自动完成的 例如 usergroup1 usergroup2
  • sqljocky同步查询数据库

    我正在尝试使用 sqljocky 同步查询 MySQL 数据库 我有一个Load运行查询并获取数据然后将数据导入到User目的 我遇到的问题是运行查询的 Future 没有及时返回以将对象返回到调用方法 DataObject user ne
  • 如何将 Matplotlib Axes 对象渲染为图像(作为 Numpy 数组)?

    有没有办法将特定 Axes 对象的内容呈现为图像 作为 Numpy 数组 我知道您可以对整个图形执行此操作 但我想获取特定轴的图像 我尝试渲染的轴包含一个图像 用 imshow 绘制 在顶部绘制了一些线条 理想情况下 渲染的 ndarray
  • 最佳实现:机场/火车站出发板(html/css/jquery)[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 任何人都可以向我指出使用 HTML CSS jQuery 的火车站出发板的实现吗 这适合您的需求吗 不是我的 但执行得很好 http jsfiddl
  • 将 Swift 3 升级到 4,Swift 扩展不再出现在 Objective C 中

    我刚刚完成将混合语言项目 objective c 和 Swift 从 Swift 3 升级到 Swift 4 一切似乎都很顺利 除了我所有的 Swift 扩展都无法再在 Objective C 中访问 我不知道如何获得anySwift 扩展
  • 来自另一个类库的基本控制器在 Web api 中不起作用

    我有两个 Web API 项目 还有一个MarketController我需要扩展 Api 控制器 所以我做到了 我创建了一个BaseController类并继承自ApiController像这样 public class BaseCont
  • 计算数百 GB 数据中的子序列

    我正在尝试处理一个非常大的文件并计算文件中特定长度的所有序列的频率 为了说明我正在做的事情 请考虑一个包含序列的小输入文件abcdefabcgbacbdebdbbcaebfebfebfeb 下面 代码读取整个文件 并获取长度为 n 的第一个
  • 如何在 AngularJS 中检索之前的 URL

    我知道我可以使用获取当前 URL location search and location path 但我需要一种方法来获取上一个 我可以使用全局变量或类似的变量吗 Angular rootScope将拥有所有应用程序组件的所有信息 下面在
  • 将儒略日转换为日/月/年

    我的帖子显然不清楚 所以我正在努力修复它 如果我仍然不清楚 请随时告诉我 我得到了一个物理变量的数据框 每分钟都有一个数据 我想将前 4 列转换为单个列 R 中的 d m Y H M GMT Year Julian day Hour Min
  • 如果 Visual Studio 2012 / 2013 中的项目/解决方案中缺少文件,则报告错误/警告

    视觉工作室不再支持宏 因此以下问题中的答案仅对以前的版本有效 如果 Visual Studio 中的项目 解决方案中缺少文件 则报告错误 警告 当您构建缺少文件的解决方案时 Visual Studio 2012 2013 是否可以报告错误