11
votes

Rapport Erreur / Avertissement Si des fichiers manquants dans le projet / solution dans Visual Studio

Y a-t-il un moyen pour Visual Studio de signaler une erreur / avertissement lorsque vous créez une solution qui a des fichiers manquants (icône triangle jaune avec l'exclamation) qui ont nécessairement une erreur de compilation? Comme un fichier de configuration manquant qui est lu pendant l'exécution.

merci


1 commentaires

Je voudrais aussi une réponse à cette question. Je trouve qu'il est en train de résoudre qu'un fichier peut être manquant et que la construction compile avec succès, ainsi que la compilation de la vue. Sûrement, à tout le moins, il devrait au moins d'être un paramètre de Visual Studio ou du projet que je peux fixer pour appliquer cela.


4 Réponses :


11
votes

Vous devez définir un respect de l'environnement Macro . Voir la description générale sur la façon de faire ici: Personnalisez votre processus de construction de votre projet .

Et voici le code que vous pouvez passer directement dans l'environnement macro pour vérifier les fichiers manquants: xxx

Il affichera le texte "Fichier manquant" directement dans la version Visual Studio "Construire "Fenêtre de sortie. Il devrait être assez facile de comprendre et de régler vos besoins. Par exemple, vous pouvez ajouter des erreurs à la sortie d'erreur.


2 commentaires

Visual Studio 2012/2013 ne prend plus en charge les macros, voir Stackoverflow.com/questions/20689829/... pour une solution mise à jour


Merci pour la VS 2012 et Up Redirect!



3
votes

Lorsque nous avions des fichiers manquants, nous devions avoir des erreurs de compilation folle, comme incapable d'écrire xyz.pdb, même si le fichier a fini par être écrit. J'ai pris ce que Simon avait fourni (merci!) Et la retourna un peu; Spécifiquement, j'ai ajouté un peu de récursivité et ajout de la prise en charge des dossiers et des fichiers avec des sous-fichiers (par exemple les jeux de données, le code de code).

Private Sub BuildEvents_OnBuildBegin(ByVal Scope As EnvDTE.vsBuildScope, ByVal Action As EnvDTE.vsBuildAction) Handles BuildEvents.OnBuildBegin

    For Each proj As Project In DTE.Solution.Projects
        walkTree(proj.ProjectItems, False)
    Next

End Sub

Private Sub walkTree(ByVal list As ProjectItems, ByVal showAll As Boolean)

    For Each item As ProjectItem In list

        ' from http://msdn.microsoft.com/en-us/library/z4bcch80(v=vs.80).aspx
        ' physical files:   {6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}
        ' physical folders: {6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C}

        If (item.Kind = "{6BB5F8EE-4483-11D3-8BCF-00C04F8EC28C}" OrElse _
            item.Kind = "{6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C}") Then

            For i As Integer = 1 To item.FileCount ' appears to be 1 all the time...

                Dim existsOrIsFolder As Boolean = (item.Kind = "{6BB5F8EF-4483-11D3-8BCF-00C04F8EC28C}" OrElse System.IO.File.Exists(item.FileNames(i)))

                If (showAll OrElse _
                    existsOrIsFolder = False) Then

                    WriteToBuildWindow(String.Format("{0}, {1}, {2} ", existsOrIsFolder, item.ContainingProject.Name, item.FileNames(i)))

                End If

            Next

            If (item.ProjectItems.Count > 0) Then
                walkTree(item.ProjectItems, showAll)
            End If

        End If

    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 & Environment.NewLine)
End Sub


0 commentaires

0
votes

Si vous avez un environnement de type Linux avec accès au dossier de projet (par exemple, si vous utilisez GIT pour le contrôle de la version, vous pouvez probablement utiliser le git bash inclus pour cela, ou si vous utilisez Cygwin), voici Ma manière vraiment rapide et sale: xxx

(Comment cela fonctionne: j'essaie de ls chaque fichier nommé dans le projet et envoyez la sortie STDOUT du LS commande à / dev / null , il sera donc masqué. Si des fichiers n'existent pas, LS Barbe de leurs noms à STDERR plutôt que STDOUT , donc ceux-ci seront visibles.)

Notez que cela ne comprend pas les évasions codées par l'URL, vous obtiendrez donc quelques faux positifs si votre projet contient des noms de fichiers avec des personnages comme '(' en eux. < / p>


1 commentaires

Bon sang, je dois apprendre SED un jour parce que cela fonctionnait comme un charme pour moi, merci beaucoup :)