Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 如果Visual Studio 2012/2013中的项目/解决方案中缺少文件,则报告错误/警告_Visual Studio_Visual Studio 2012_Visual Studio 2013 - Fatal编程技术网

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

Visual studio 如果Visual Studio 2012/2013中的项目/解决方案中缺少文件,则报告错误/警告,visual-studio,visual-studio-2012,visual-studio-2013,Visual Studio,Visual Studio 2012,Visual Studio 2013,Visual Studio,因此以下问题中的答案仅对早期版本有效: Visual Studio 2012/2013是否可以在生成包含丢失文件的解决方案时报告错误/警告?基于您引用的VS宏代码,我为报告警告创建了一个扩展: Imports EnvDTE Imports EnvDTE80 Public Class E Implements VisualCommanderExt.IExtension Sub SetSite(DTE_ As EnvDTE80.DTE2, packa

Visual Studio,因此以下问题中的答案仅对早期版本有效:


Visual Studio 2012/2013是否可以在生成包含丢失文件的解决方案时报告错误/警告?

基于您引用的VS宏代码,我为报告警告创建了一个扩展:

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
            For Each item As ProjectItem In proj.ProjectItems
                If (item.Kind <> "{6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}") Then ' only check physical file items
                    Continue For
                End If

                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
                        WriteToBuildWindow("!! Missing file:" & item.FileNames(i) + " in project " + proj.Name)
                    End If
                Next
            Next
        Next
    End Sub

    Private Sub WriteToBuildWindow(ByVal text As String)
        Dim ow As OutputWindow = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput).Object
        Dim build As OutputWindowPane = ow.OutputWindowPanes.Item("Build")
        build.OutputString(text & System.Environment.NewLine)
    End Sub

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

End Class
导入EnvDTE
进口环境80
公共E类
实现VisualCommanderExt.IExtension
子设置站点(DTE_uuu为EnvDTE80.DTE2,包为Microsoft.VisualStudio.Shell.package)实现VisualCommanderExt.IExtension.SetSite
DTE=DTE_
events=DTE.events
buildEvents=events.buildEvents
AddHandler buildEvents.OnBuildBegin,OnBuildBegin的地址
端接头
Sub Close()实现VisualCommanderExt.IExtension.Close
RemoveHandler buildEvents.OnBuildBegin,OnBuildBegin的地址
端接头
私有子OnBuildBegin(ByVal作用域为EnvDTE.vsBuildScope,ByVal操作为EnvDTE.vsBuildAction)
对于DTE.Solution.Projects中的每个项目作为项目
对于项目中作为项目项的每个项目
如果(item.Kind“{6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}”),则“仅检查物理文件项”
继续
如果结束
对于i,整数=1到item.FileCount
Dim路径为String=item.FileNames(i)
如果不存在System.IO.File.Exists(item.FileNames(i)),则
WriteToBuildWindow(!!缺少文件:&item.FileNames(i)+项目中的“+proj.Name”)
如果结束
下一个
下一个
下一个
端接头
私有子WriteToBuildWindow(ByVal文本作为字符串)
作为OutputWindow=DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput.Object)对象的Dim ow
按OutputWindowPane显示的Dim构建=ow.OutputWindowPanes.Item(“构建”)
build.OutputString(text&System.Environment.NewLine)
端接头
作为EnvDTE80.DTE2的专用DTE
私有事件作为EnvDTE.events
私有buildEvents作为EnvDTE.buildEvents
末级

我修改了Sergey的脚本以递归方式处理文件夹

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

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

导入EnvDTE
进口环境80
公共E类
实现VisualCommanderExt.IExtension
子设置站点(DTE_uuu为EnvDTE80.DTE2,包为Microsoft.VisualStudio.Shell.package)实现VisualCommanderExt.IExtension.SetSite
DTE=DTE_
events=DTE.events
buildEvents=events.buildEvents
AddHandler buildEvents.OnBuildBegin,OnBuildBegin的地址
端接头
Sub Close()实现VisualCommanderExt.IExtension.Close
RemoveHandler buildEvents.OnBuildBegin,OnBuildBegin的地址
端接头
私有子OnBuildBegin(ByVal作用域为EnvDTE.vsBuildScope,ByVal操作为EnvDTE.vsBuildAction)
对于DTE.Solution.Projects中的每个项目作为项目
Dim missingFiles As String=“”
对于项目中作为项目项的每个项目
missingFiles=missingFiles+CheckProjectItem(项目,项目)
下一个
如果缺少文件.Length>0,则
'注释掉以删除消息框弹出窗口,并且在输出/错误窗口中只列出缺少的文件
System.Windows.MessageBox.Show(“项目”+proj.Name+”缺少文件:“+System.Environment.NewLine+缺少文件”)
如果结束
下一个
端接头
私有函数CheckProjectItem(ByVal项作为EnvDTE.ProjectItem,ByVal项目作为EnvDTE.Project)
Dim missingFiles As String=“”
对于每个项目作为item.ProjectItems中的ProjectItem
missingFiles=missingFiles+CheckProjectItem(chiltItem,proj)
下一个
如果(item.Kind=“{6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}”),则“仅检查物理文件项”
对于i,整数=1到item.FileCount
Dim路径为String=item.FileNames(i)
如果不存在System.IO.File.Exists(item.FileNames(i)),则
LogMissingFile(项文件名(i)、项目名)
missingFiles=missingFiles+item.FileNames(i)+System.Environment.NewLine
如果结束
下一个
如果结束
返回丢失的文件
端函数
私有子日志文件(ByVal文件名为字符串,ByVal项目名为字符串)
作为OutputWindow=DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput.Object)对象的Dim ow
按OutputWindowPane显示的Dim构建=ow.OutputWindowPanes.Item(“构建”)
Dim outputString As String=“!!缺少文件:”+projectName+System.Environment.NewLine中的“+fileName+”
Dim ERRORSTING As String=“项目中缺少文件”+项目名称+:“+文件名
'仅写入输出窗口
'build.OutputString(OutputString)
'同时写入输出和错误窗口;vsTaskPriorityHigh将显示为错误,vsTaskPriorityMedium将显示为警告,vsTaskPriorityLow将显示为消息
build.OutputAsKitemString(outputString,vsTaskPriority.vsTaskPriorityHigh,vsTaskCategories.VSTaskCategorityMisc,vsTaskIcon.vsTaskIconCompile,文件名,0,errorString)
端接头
作为EnvDTE80.DTE2的专用DTE
私有事件作为EnvDTE.events
私有buildEvents作为EnvDTE.buildEvents
末级

关于在检测到丢失文件时中断生成,我发现最接近的方法是使用以下方法取消生成(与OnBuildBegin事件一起):

DTE.ExecuteCommand("Build.Cancel")

一个小的Visual Studio扩展?太棒了!视觉指挥官绝对是一条路要走。我对文件夹中的文件做了一个小修改。我会