Ich möchte Vim Quickfix Features mit der Ausgabe von Visual Studio devenv Build-Prozess oder Msbuild verwenden.Vim Fehlerformat für Visual Studio
ich eine Batch-Datei erstellt haben genannt build.bat dem die devenv wie diese bauen ausführt:
devenv MySln.sln /Build Debug
In vim ich darauf habe die: Befehl zu dieser Batch-Datei:
:set makeprg=build.bat
Wenn ich jetzt: make ausführen, wird der Build erfolgreich ausgeführt, die Fehler werden jedoch nicht analysiert. Wenn ich also: cl oder: cn benutze, sehe ich nur die Ausgabe von devenv/Build. Ich sollte nur die Fehler sehen.
Ich habe versucht, eine Reihe von verschiedenen Fehlerformateinstellungen, die ich auf verschiedenen Seiten im Netz gefunden habe, aber keiner von ihnen hat die Fehler richtig analysiert. Hier sind ein paar, die ich versucht habe:
set errorformat=%*\\d>%f(%l)\ :\ %t%[A-z]%#\ %m
set errorformat=\ %#%f(%l)\ :\ %#%t%[A-z]%#\ %m
set errorformat=%f(%l,%c):\ error\ %n:\ %f
Und natürlich habe ich Vims Standard versucht.
Hier ist ein Beispiel einer Ausgabe aus dem build.bat:
C:\TFS\KwB Projects\Thingy>devenv Thingy.sln /Build Debug
Microsoft (R) Visual Studio Version 9.0.30729.1.
Copyright (C) Microsoft Corp. All rights reserved.
------ Build started: Project: Thingy, Configuration: Debug Any CPU ------
c:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:DEBUG;TRACE /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationCore.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\PresentationFramework.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.Linq.dll" /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\UIAutomationProvider.dll" /reference:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.0\WindowsBase.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\Thingy.exe /resource:obj\Debug\Thingy.g.resources /resource:obj\Debug\Thingy.Properties.Resources.resources /target:winexe App.xaml.cs Controller\FieldFactory.cs Controller\UserInfo.cs Data\ThingGatewaySqlDirect.cs Data\ThingListFetcher.cs Data\UserListFetcher.cs Gui\FieldList.xaml.cs Interfaces\IList.cs Interfaces\IListFetcher.cs Model\ComboBoxField.cs Model\ListValue.cs Model\ThingType.cs Interfaces\IThingGateway.cs Model\Field.cs Model\TextBoxField.cs Model\Thing.cs Gui\MainWindow.xaml.cs Gui\ThingWindow.xaml.cs Interfaces\IField.cs Properties\AssemblyInfo.cs Properties\Resources.Designer.cs Properties\Settings.Designer.cs RequiredValidation.cs "C:\TFS\KwB Projects\Thingy\Thingy\obj\Debug\Gui\FieldList.g.cs" "C:\TFS\KwB Projects\Thingy\Thingy\obj\Debug\Gui\MainWindow.g.cs" "C:\TFS\KwB Projects\Thingy\Thingy\obj\Debug\Gui\ThingWindow.g.cs" "C:\TFS\KwB Projects\Thingy\Thingy\obj\Debug\App.g.cs" "C:\TFS\KwB Projects\Thingy\Thingy\obj\Debug\GeneratedInternalTypeHelper.g.cs"
C:\TFS\KwB Projects\Thingy\Thingy\Controller\FieldFactory.cs(14,19): error CS0246: The type or namespace name 'IFieldNothing' could not be found (are you missing a using directive or an assembly reference?)
Compile complete -- 1 errors, 0 warnings
========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ==========
UPDATE: Es sieht aus wie msbuild statt devenv verwendet, ist wahrscheinlich der richtige Weg (per Jay Kommentar) zu gehen.
Mit msbuild der makeprg wäre:
:set makeprg=msbuild\ /nologo\ /v:q
Beispielausgabe whould sein:
Controller\FieldFactory.cs(14,19): error CS0246: The type or namespace name 'IFieldNothing' could not be found (are you missing a using directive or an assembly reference?)
Es sieht aus wie der schwierige Teil in der Tatsache liegen hier, dass der Pfad zu der relativ ist. csproj-Datei, nicht die .sln-Datei, die das aktuelle Verzeichnis in Vim ist und ein Verzeichnis über der .csproj-Datei liegt.
ANTWORT: ich es herausgefunden ...
set errorformat=\ %#%f(%l\\\,%c):\ %m
Das wird die Ausgabe für beide devenv/Build und msbuild erfassen. Allerdings hat Msbuild einen Haken. Standardmäßig enthält die Ausgabe keine vollständigen Pfade. Um dies zu beheben Sie die folgende Zeile in der Datei csproj Hauptproperty hinzufügen:
<GenerateFullPaths>True</GenerateFullPaths>
Für diejenigen von uns nicht VS2k8 verwenden, einige Fehlerausgabe nützlich sein würde. – Zathrus