Visual studio 如果Visual Studio 2012/2013中的项目/解决方案中缺少文件,则报告错误/警告
Visual Studio,因此以下问题中的答案仅对早期版本有效: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 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扩展?太棒了!视觉指挥官绝对是一条路要走。我对文件夹中的文件做了一个小修改。我会