visual-studio - portable - visual studio in linux
Vim errorformat para Visual Studio (7)
Intenta ejecutar msbuild en lugar de devenv. Esto abrirá una tonelada de poder en cómo se ejecuta la compilación.
Abra un símbolo del sistema de Visual Studio para configurar su ruta. A continuación, realice msbuild MySln.sln /Configuration:Debug
.
Ver msbuild /?
por ayuda
Quiero usar las características de quickfix de Vim con la salida del proceso de construcción devenv de Visual Studio o msbuild.
Creé un archivo por lotes llamado build.bat que ejecuta la construcción devenv así:
devenv MySln.sln /Build Debug
En vim apunté el comando: make a ese archivo por lotes:
:set makeprg=build.bat
Cuando ejecuto ahora: make, la construcción se ejecuta con éxito, sin embargo, los errores no se analizan. Entonces si ejecuto: cl o: cn acabo de ver toda la salida devenv / Build. Debería ver solo los errores.
Probé varias configuraciones diferentes de formato de error que encontré en varios sitios de la red, pero ninguno de ellos ha analizado correctamente los errores. Aquí hay algunos que he intentado:
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
Y, por supuesto, he probado el valor predeterminado de Vim.
Aquí hay algunos ejemplos de salida de 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 ==========
ACTUALIZACIÓN: parece que usar msbuild en lugar de devenv es probablemente el camino correcto (según el comentario de Jay).
Usando msbuild, makeprg sería:
:set makeprg=msbuild/ /nologo/ /v:q
La salida de muestra debería ser:
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?)
Parece que la parte difícil aquí puede residir en el hecho de que la ruta es relativa al archivo .csproj, no al archivo .sln que es el directorio actual en Vim y se encuentra en un directorio encima del archivo .csproj.
RESPUESTA: Lo descubrí ...
set errorformat=/ %#%f(%l///,%c):/ %m
Esto capturará la salida para devenv / Build y msbuild. Sin embargo, msbuild tiene una trampa. Por defecto, su salida no incluye rutas completas. Para solucionarlo, debe agregar la siguiente línea al PropertyGroup principal de su archivo csproj:
<GenerateFullPaths>True</GenerateFullPaths>
Copiar de la pregunta para eliminar de la lista "sin respuesta"
set errorformat=/ %#%f(%l///,%c):/ %m
Esto capturará la salida para devenv /Build
y msbuild. Sin embargo, msbuild tiene una trampa. Por defecto, su salida no incluye rutas completas. Para solucionarlo, debe agregar la siguiente línea al PropertyGroup principal de su archivo csproj:
<GenerateFullPaths>True</GenerateFullPaths>
Encontré esta pregunta al buscar el formato de error para compilar c ++ en Visual Studio. Las respuestas anteriores no funcionan para mí (tampoco estoy usando MSBuild).
Lo descubrí a partir de esta sugerencia de Vim y :help errorformat
:
" filename(line) : error|warning|fatal error C0000: message
set errorformat=/ %#%f(%l)/ :/ %#%t%[A-z]%#/ %[A-Z/ ]%#%n:/ %m
Lo cual le dará una solución rápida como esta:
stats.cpp|604 error 2039| ''getMedian'' : is not a member of ''Stats''
(con error resaltado) desde
c:/p4/main/stats.cpp(604) : error C2039: ''getMedian'' : is not a member of ''Stats''
Encontré una respuesta aún mejor: use :compiler
para usar las configuraciones efm
de efm
.
" Microsoft C#
compiler cs
" Microsoft Visual C++
compiler msvc
" mono
compiler mcs
" gcc
compiler gcc
Nota: También establece el makeprg
predeterminado. Ver $ VIMRUNTIME / compilador /
Ninguno de estos formatos de error funcionó en la edición profesional de Visual Studio 2009 v9.0.21022.8. Usando cygwin, tuve que llamar a devenv desde bash, lo que hizo que establecer makeprg fuera un poco complicado (archivos de lotes de tornillos). También tuve que ajustar mi formato de error cuando devenv se divide en múltiples procesos y procede al mensaje de error con "1>" o "2>", etc.
set autowrite
"2>c:/cygwin/home/user/proj/blah.cpp(1657) : error C2065: ''blah'' : undeclared identifier
set errorformat=%.%#>/ %#%f(%l)/ :/ %#%t%[A-z]%#/ %[A-Z/ ]%#%n:/ %m
let prg="devenv"
let makepath=$MAKEPATH
let &makeprg=''cmd /c "''.prg.'' ''.makepath.''"''
Mi .bashrc establece la variable de entorno MAKEPATH utilizando cygpath para convertir a una ruta compatible con DOS:
export MAKEPATH="$(cygpath -d "proj/VC9/some.sln") /build /"Debug/""
Si tiene vim 6.x puede usar : cw, que es mucho mejor que clist (intente buscar errores entre cientos de advertencias y ya sabe a qué me refiero). Ver los ajustes de vim me dan ganas de vomitar, ¡pero estoy en el cielo! Adiós visual studio! Gracias por la base para ajustar pydave +1.
Como mencionó Simon Buchan, puedes usar esto en tu proyecto para generar las rutas completas en el resultado:
<GenerateFullPaths>True</GenerateFullPaths>
Pero puede hacerlo más portátil agregando /property:GenerateFullPaths=true
makeprg
lugar de agregar lo anterior a sus archivos de proyecto.
:set makeprg=msbuild/ /nologo/ /v:q/ /property:GenerateFullPaths=true/
Tengo una publicación de blog que repasa todos los detalles de la construcción de proyectos de C # en Vim, incluido el formato de error. Puede encontrarlo aquí: http://kevin-berridge.blogspot.com/2008/09/vim-c-compiling.html
En resumen, necesitas lo siguiente:
:set errorformat=/ %#%f(%l///,%c):/ %m
:set makeprg=msbuild/ /nologo/ /v:q/ /property:GenerateFullPaths=true