همة errorformat Visual Studio
-
01-07-2019 - |
سؤال
أريد أن استخدام Vim هو quickfix الميزات مع الإخراج من Visual Studio devenv بناء العملية أو msbuild.
لقد قمت بإنشاء ملف دفعي يسمى بناء.الخفافيش التي ينفذ devenv بناء مثل هذا:
devenv MySln.sln /Build Debug
في همة لقد أشار :جعل الأمر إلى أن الملف الدفعي:
:set makeprg=build.bat
عندما كنت الآن تشغيل :جعل ، بناء ينفذ بنجاح, لكن الأخطاء لا تحصل على تحليل.لذلك إذا كنت تعمل :cl أو :cn لقد شاهدت جميع الإخراج من devenv /بناء.لا ينبغي أن يرى إلا الأخطاء.
لقد حاولت عدد من مختلف errorformat الإعدادات التي وجدت في مواقع مختلفة في جميع أنحاء الشبكة ، ولكن أيا منهم تحليل الأخطاء بشكل صحيح.وهنا عدد قليل حاولت:
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
وبالطبع حاولت همة الافتراضي.
وهنا بعض الأمثلة على الإخراج من بناء.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 ==========
تحديث: يبدو باستخدام msbuild بدلا من devenv ربما هو الطريق الصحيح للذهاب (حسب جاي تعليق).
باستخدام msbuild على makeprg ليكون:
:set makeprg=msbuild\ /nologo\ /v:q
إخراج نموذج وينبغي أن تكون:
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?)
يبدو أن الجزء صعبة هنا قد تكمن في حقيقة أن المسار النسبي .الملف csproj, لا .sln الملف الذي هو الدليل الحالي في همة يكمن دليل واحد فوق .الملف csproj.
الجواب: فهمت
set errorformat=\ %#%f(%l\\\,%c):\ %m
هذا سوف التقاط الإخراج لكل من devenv /بناء msbuild.ومع ذلك ، msbuild واحد الصيد.افتراضيا ، يتم إخراج لا تشمل المسارات الكاملة.لإصلاح هذا يجب إضافة السطر التالي إلى الملف csproj الرئيسية PropertyGroup:
<GenerateFullPaths>True</GenerateFullPaths>
المحلول
لدي بلوق وظيفة التي يمشي من خلال كل التفاصيل من الحصول على C# مشاريع بناء في همة ، بما في ذلك الخطأ الشكل.يمكنك العثور عليها هنا: http://kevin-berridge.blogspot.com/2008/09/vim-c-compiling.html
باختصار تحتاج إلى ما يلي:
:set errorformat=\ %#%f(%l\\\,%c):\ %m
:set makeprg=msbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true
نصائح أخرى
نسخة من السؤال لإزالة من دون إجابة قائمة
set errorformat=\ %#%f(%l\\\,%c):\ %m
هذا سوف التقاط الإخراج لكل من devenv /Build
و msbuild.ومع ذلك ، msbuild واحد الصيد.افتراضيا ، يتم إخراج لا تشمل المسارات الكاملة.لإصلاح هذا يجب إضافة السطر التالي إلى الملف csproj الرئيسية PropertyGroup:
<GenerateFullPaths>True</GenerateFullPaths>
لقد وجدت أفضل إجابة:استخدام :compiler
استخدام المدمج في efm
الإعدادات.
" Microsoft C#
compiler cs
" Microsoft Visual C++
compiler msvc
" mono
compiler mcs
" gcc
compiler gcc
ملاحظة:كما يحدد الافتراضي makeprg
.انظر $VIMRUNTIME/مترجم/
حاول تشغيل msbuild بدلا من devenv.هذا وسوف تفتح طن من الطاقة في كيفية بناء يعمل.
فتح موجه الأوامر Visual Studio للحصول على المسار الخاص بك اقامة.ثم القيام msbuild MySln.sln /Configuration:Debug
.
انظر msbuild /?
للحصول على مساعدة.
لقد وجدت هذا السؤال عندما تبحث عن errorformat تجميع c++ Visual Studio.الإجابات أعلاه لا تعمل بالنسبة لي (أنا لا تستخدم MSBuild إما).
أنا أحسب هذا من هذه همة نصيحة و :help errorformat
:
" filename(line) : error|warning|fatal error C0000: message
set errorformat=\ %#%f(%l)\ :\ %#%t%[A-z]%#\ %[A-Z\ ]%#%n:\ %m
والتي سوف تعطيك quickfix تبدو مثل هذا:
stats.cpp|604 error 2039| 'getMedian' : is not a member of 'Stats'
(مع خطأ الضوء) من
c:\p4\main\stats.cpp(604) : error C2039: 'getMedian' : is not a member of 'Stats'
كما سيمون بوكان المذكورة يمكنك استخدام هذا المشروع إلى إنشاء مسارات الكاملة في الإخراج:
<GenerateFullPaths>True</GenerateFullPaths>
ولكن يمكنك جعلها أكثر المحمولة من خلال إضافة /property:GenerateFullPaths=true
لك makeprg
بدلا من إضافة المذكورة أعلاه إلى ملفات المشروع الخاص بك.
:set makeprg=msbuild\ /nologo\ /v:q\ /property:GenerateFullPaths=true\
أيا من هذه errorformats عملت في Visual studio 2009 v9.0.21022.8 professional edition.باستخدام cygwin, كان الاتصال devenv من باش مما جعل وضع makeprg صعبة قليلا (المسمار الملفات الدفعية).كما أن قرص بلدي errorformat عندما devenv يقسم إلى عدة عمليات العائدات ظهور رسالة خطأ "1>" أو "2>" إلخ:
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.'"'
بلدي .bashrc يحدد MAKEPATH متغير البيئة باستخدام cygpath لتحويل دوس متوافق المسار:
export MAKEPATH="$(cygpath -d "proj/VC9/some.sln") /build \"Debug\""
إذا كان لديك همة 6.× يمكنك استخدام :cw والذي هو أفضل بكثير من clist (حاول البحث عن الأخطاء من بين المئات من تحذيرات وأنت تعرف ما أعني).تبحث في همة القرص يجعلني تريد القيء ولكن أنا في همة السماء!!!وداعا visual studio!شكرا على قاعدة أن يعدل pydave +1.