Здесь можно лицезреть (и попробовать) альфа-версию интеграции с VS 2010.
Инструкция по сборке
Для сборки нужно:
1. Установленная VS 2010 (не экспресс).
2. Установленный VS 2010 SDK.
3. Тартила SVN или ее заменитель.
Для сборки нужно:
1. Деинсталировать Nemerle 1.0 (если был установлен).
2. Удалить содержимое каталога %ProgramFiles%\Nemerle.
3. Собрать компилятор с помощью DevBuildQuick-4.cmd.
4. Скопировать содержимое каталога Nemerle\bin\Debug\4.0\Stage1\ в %ProgramFiles%\Nemerle.
5. Открыть VS 2010 с правами администратора (важно!). Для этого можно выбрать в контекстном меню шортката "Microsoft Visual Studio 2010" выбрать пункт "Запустить от имени администратора".
6. В VS 2010 открыть проект Nemerle\snippets\VS2010\Nemerle.VS2010.sln и собрать его (лучше выполнить Rebuild all).
7. Сделать активным (запускаемым) проект Nemerle.VisualStudio.
8. В свойствах проекта Nemerle.VisualStudio на закладке Debug:
Start external program: C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\devenv.exe
Comand line arguments: /rootSuffix Exp
9. Нажать F5 и лицезреть работу интеграции под управлением VS 2010.
Отлов, систематизация и каталогизация багов категорически приветствуется!
ЗЫ
К слову, процедура установки Интеграции теперь упростилась донельзя. После сборки Nemerle.VS2010.sln достаточно найти Nemerle.VisualStudio.vsix (находится в каталоге Nemerle\snippets\VS2010\bin\Debug), нажать на нем Enter и пару раз нажать на кнопку. Только это надо делать с правами администратора. После этого интеграция будет доступна в VS 2010. Удалить ее так же просто. Нужно открыть студию, в меню Tools выбрать пункт Extension Manager..., в появившемся диалоге найти расширение "Nemerle Visual Studio 2010 Integration" и нажать на нам кнопку Uninstall.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Отлов, систематизация и каталогизация багов категорически приветствуется!
В Nemerle.VisualStudio.csproj указаны старые сборки с VS2008 и если ее нет то при сборке проекта — куча ошибок.
<Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<Reference Include="Microsoft.VisualStudio.Web.Application, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>Здравствуйте, VladD2, Вы писали:
VD>>Отлов, систематизация и каталогизация багов категорически приветствуется!
ДА>В Nemerle.VisualStudio.csproj указаны старые сборки с VS2008 и если ее нет то при сборке проекта — куча ошибок. ДА> <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> ДА> <Reference Include="Microsoft.VisualStudio.Web.Application, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
И это еще не все сборки со старой версией. В общем вот патч:
---------------------------
Microsoft Visual Studio
---------------------------
The Application Data folder for Visual Studio could not be created.
---------------------------
ОК
---------------------------
Здравствуйте, VladD2, Вы писали:
VD>Отлов, систематизация и каталогизация багов категорически приветствуется!
Макрос PegGrammar как-то уж больно нервно реагирует на некорректности в грамматике. Иногда выдает совсем странные сообщения, например:
---------------------------
Assertion Failed: Abort=Quit, Retry=Debug, Ignore=Continue
---------------------------
System.NullReferenceException: Object reference not set to an instance of an object.
at Nemerle.Peg.Parsing._N_parseSequence__17507.apply(Token tok) in D:\SVN\Nemerle.new\snippets\peg-parser\Nemerle.Peg.Macros\Parsing.n:line 215
at Nemerle.Peg.Parsing._N_parseZeroOrMany_17434(Token tok, Function`2 parseDelemiter, Function`2 parseParser) in D:\SVN\Nemerle.new\snippets\peg-parser\Nemerle.Peg.Macros\Parsing.n:line 64
at Nemerle.Peg.Parsing._N_parseOneOrMany_17474(_N_closure_17419 _N_ParseEbnf_cp_17473, Token tok, Function`2 parseDelemiter, Function`2 parseParser, String expected) in D:\SVN\Nemerle.new\snippets\peg-parser\Nemerle.Peg.Macros\Parsing.n:line 99
at Nemerle.Peg.Parsing._N_parseOrderedChoice_17516(_N_closure_17419 _N_ParseEbnf_cp_17515, Token tok) in D:\SVN\Nemerle.new\snippets\peg-parser\Nemerle.Peg.Macros\Parsing.n:line 230
at Nemerle.Peg.Parsing._N_parseRule_17722(_N_closure_17419 _N_ParseEbnf_cp_17721, Token tok, Int32 ruleId) in D:\SVN\Nemerle.new\snippets\peg-parser\Nemerle.Peg.Macros\Parsing.n:line 363
at Nemerle.Peg.Parsing.ParseEbnf(Typer typer, Token token, Grammar grammar) in D:\SVN\Nemerle.new\snippets\peg-parser\Nemerle.Peg.Macros\Parsing.n:line 398
at Nemerle.Peg.Parsing.ParseRules(Typer typer, NameRef startRule, PExpr rules) in D:\SVN\Nemerle.new\snippets\peg-parser\Nemerle.Peg.Macros\Parsing.n:line 28
at Nemerle.Peg.PegGrammar_type_preaddMacro.Run(Typer _N__1, list`1 parms) in D:\SVN\Nemerle.new\snippets\peg-parser\Nemerle.Peg.Macros\Macro.n:line 29
at PegGrammar_type_preaddMacro.Run(Typer _N__1, list`1 parms) D:\SVN\Nemerle.new\snippets\peg-parser\Nemerle.Peg.Macros\Macro.n(29)
at AttributeMacroExpansion.Expand() D:\SVN\Nemerle.new\ncc\hierarchy\TypesManager.n(107)
at TypesManager.ExpandMacros() D:\SVN\Nemerle.new\ncc\hierarchy\TypesManager.n(181)
at TypeBuilder.process_macro_attributes(MacroPhase stage) D:\SVN\Nemerle.new\ncc\hierarchy\TypeBuilder.n(2677)
at _N__N_lambda__58791__58877.apply_void(TypeBuilder x) D:\SVN\Nemerle.new\ncc\hierarchy\TypesManager.n(345)
at _N_maybe_f__58640.apply_void(TypeBuilder ti) D:\SVN\Nemerle.new\ncc\hierarchy\TypesManager.n(258)
at NList.Iter(list`1 l, FunctionVoid`1 f) D:\SVN\Nemerle.new\lib\list.n(920)
at list`1.Iter(FunctionVoid`1 f) D:\SVN\Nemerle.new\lib\list.n(317)
at TypesManager.Iter(list`1 builders, FunctionVoid`1 f) D:\SVN\Nemerle.new\ncc\hierarchy\TypesManager.n(265)
at TypesManager.Iter(FunctionVoid`1 f) D:\SVN\Nemerle.new\ncc\hierarchy\TypesManager.n(276)
at TypesManager.Run() D:\SVN\Nemerle.new\ncc\hierarchy\TypesManager.n(347)
at ManagerClass.Run() D:\SVN\Nemerle.new\ncc\passes.n(521)
at MainClass.main_with_catching() D:\SVN\Nemerle.new\ncc\main.n(82)
at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
at ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at ThreadHelper.ThreadStart()
---------------------------
Прервать Повтор Пропустить
---------------------------
Судя по всему не переваривает пустое правило, а должен если судить по описанию.
И есть ощущение что после этого VS падает спустя какое-то время (от нескольких секунд до несколько минут).
Вот минимальный пример:
using System;
using Nemerle.Peg;
namespace Test
{
[PegGrammar(start,
grammar
{
start = ;
})
]
class Class1
{
}
}
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>Судя по всему не переваривает пустое правило, а должен если судить по описанию. ДА>И есть ощущение что после этого VS падает спустя какое-то время (от нескольких секунд до несколько минут). ДА>Вот минимальный пример:
ДА>
VD>4. Скопировать содержимое каталога Nemerle\bin\Debug\4.0\Stage1\ в %ProgramFiles%\Nemerle.
Т.е. параллельно нельзя использовать 2008 и 2010.
Может стоит их разделить, скажем: %ProgramFiles%\Nemerle\dotnet-3.5, %ProgramFiles%\Nemerle\donet-4.0 ?
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>В Nemerle.VisualStudio.csproj указаны старые сборки с VS2008 и если ее нет то при сборке проекта — куча ошибок. ДА> <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> ДА> <Reference Include="Microsoft.VisualStudio.Web.Application, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
Они не старые. Других попросту нет. А то что они цепляются из VS 2008 SDK, то это уже проблемы разрешения сборок. Не будет VS 2008 SDK — будут браться из VS 2010 SDK.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>И это еще не все сборки со старой версией. В общем вот патч:
У тебя нет прав в репозитории?
ДА>При сборке 2-ы выдается окно с ошибкой:
Кто такая "двы" (2-ы)?
ДА>
ДА>---------------------------
ДА>Microsoft Visual Studio
ДА>---------------------------
ДА>The Application Data folder for Visual Studio could not be created.
ДА>---------------------------
ДА>ОК
ДА>---------------------------
ДА>
Это после патча или до?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Дьяченко Александр, Вы писали:
ДА>>Создал Issue-1320. Пусть будет и в трекере.
VD>Это проявляется только на VS 2010? Или на 2008-й тоже?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Дьяченко Александр, Вы писали:
ДА>>В Nemerle.VisualStudio.csproj указаны старые сборки с VS2008 и если ее нет то при сборке проекта — куча ошибок. ДА>> <Reference Include="Microsoft.VisualStudio.QualityTools.UnitTestFramework, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> ДА>> <Reference Include="Microsoft.VisualStudio.Web.Application, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
VD>Они не старые. Других попросту нет. А то что они цепляются из VS 2008 SDK, то это уже проблемы разрешения сборок. Не будет VS 2008 SDK — будут браться из VS 2010 SDK.
Нет у меня VS2008 и SDK тоже нет. При сборке прям сообщение что сборку найти не может.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Дьяченко Александр, Вы писали:
ДА>>И это еще не все сборки со старой версией. В общем вот патч:
VD>У тебя нет прав в репозитории?
Нету.
ДА>>При сборке 2-ы выдается окно с ошибкой:
VD>Кто такая "двы" (2-ы)?
дважды.
ДА>>
ДА>>---------------------------
ДА>>Microsoft Visual Studio
ДА>>---------------------------
ДА>>The Application Data folder for Visual Studio could not be created.
ДА>>---------------------------
ДА>>ОК
ДА>>---------------------------
ДА>>
VD>Это после патча или до?
И так, и так. Но пакет создается и нормально ставится.
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>Здравствуйте, VladD2, Вы писали:
VD>>Это после патча или до?
ДА>И так, и так. Но пакет создается и нормально ставится.
Это я гоню — без патча у меня вообще ничего не собирается и таких сообщений естественно нет.
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>Здравствуйте, VladD2, Вы писали:
VD>>Они не старые. Других попросту нет. А то что они цепляются из VS 2008 SDK, то это уже проблемы разрешения сборок. Не будет VS 2008 SDK — будут браться из VS 2010 SDK.
ДА>Нет у меня VS2008 и SDK тоже нет. При сборке прям сообщение что сборку найти не может.
Слушай а у тебя вообще работает собранная и поставленная из пакета интеграция? А то у меня она живет от 10 секунд од 10 минут в среднем минуты 1.5-2.
Я пробовал приатачится к ней и посмотреть что происходит, но там какие-то странные процессы происходят.
В выделенном месте говорит что у тебя не Com объект. То же в практически сразу.
public void ProcessHiddenRegions(List<NewHiddenRegion> regions, int sourceVersion)
{
if (!OutliningEnabled)
return;
//var timer = Stopwatch.StartNew();
//var timerAll = Stopwatch.StartNew();
//Debug.WriteLine("SetRegions: begin " + timer.Elapsed); timer.Reset(); timer.Start();
#region Получаем список региотов которые уже есть в редакторе.
// Регионы в редакторе могут быть
// по двум причинам:
// 1. Она билы добавлены предыдущим запуском этого метода.
// 2. Они были загружены самим редакторм для востановления состояния состояния
// (открыты / закрыты) регионов после открытия файла (обычно случается только
// если файл открывается при открытом Solution).
// При этом студия не востанавливает баннеры, так что их приходится обновлять
// (см. коментарий к вызову region.SetBanner()).
IVsHiddenTextSession session = GetHiddenTextSession();
var aspan = new TextSpan[1];
aspan[0] = GetDocumentSpan();
var aregion = new IVsHiddenRegion[1];
var oldRegionsMap = new Dictionary<TextSpan, IVsHiddenRegion>(TextSpanEqCmp.Instance);
IVsEnumHiddenRegions ppenum = null;
try
{
ErrorHandler.ThrowOnFailure(session.EnumHiddenRegions((uint)FIND_HIDDEN_REGION_FLAGS.FHR_ALL_REGIONS, HiddenRegionCookie, aspan, out ppenum));
uint fetched;
while (ppenum.Next(1, aregion, out fetched) == NativeMethods.S_OK && fetched == 1)
{
var region = aregion[0];
int regTypeInt;
ErrorHandler.ThrowOnFailure(region.GetType(out regTypeInt));
uint dwData;
region.GetClientData(out dwData);
var regType = (HIDDEN_REGION_TYPE)regTypeInt;
if (regType != HIDDEN_REGION_TYPE.hrtCollapsible)// || dwData != 0 && dwData != HiddenRegionCookie)
continue;
ErrorHandler.ThrowOnFailure(region.GetSpan(aspan));
TextSpan s = aspan[0];
//var loc = Utils.LocationFromSpan(FileIndex, s);
oldRegionsMap[s] = region;
}
}
finally
{
if (ppenum != null)
Marshal.ReleaseComObject(ppenum);
}
//Debug.WriteLine("SetRegions: old regions fetched " + timer.Elapsed); timer.Reset(); timer.Start();
#endregion
3. Дальше совсем какой-то страх и ужос...
4. Еще заметил что PegGrammar или VS2010 пытается создать файлик с генерированных исходников в странных местах то в C:\Windows\System32, то в C:\Program Files (x86)\...\ куда VS2010 поставленна.
Здравствуйте, Дьяченко Александр, Вы писали:
ДА>Слушай а у тебя вообще работает собранная и поставленная из пакета интеграция? А то у меня она живет от 10 секунд од 10 минут в среднем минуты 1.5-2.
Я же сказал — альфа. Я усилием воли за две ночи ее заставил "взлететь". Теперь придется еще пару недель летать обучать.
Вылеты — это скорее всего кривой WpfHint. Вылеты связанные с ним я вроде бы пофиксил. Но проблем еще хватает.
ДА>Я пробовал приатачится к ней и посмотреть что происходит, но там какие-то странные процессы происходят.
Да там вроде все очевидно вылетало сообщение о том, что вызван делегат который уже собран сборщиком мусора.
ДА>1. D:\SVN\Nemerle.new\snippets\VS2010\Nemerle.VisualStudio\LanguageService\NemerleTypeAndMemberDropdownBars.cs
ДА>Где-то в выделенном месте говорит что выходит за границы списка. Прилетает практически на старте — достаточно ткнуть куда-нить в исходники.
У меня не воспроизводится.
ДА>2. D:\SVN\Nemerle.new\snippets\VS2010\Nemerle.VisualStudio\LanguageService\NemerleSource.cs
ДА>В выделенном месте говорит что у тебя не Com объект. То же в практически сразу.
Это я уже пофиксил. Теперь тем видимо кома нет. вот и вылетает.
Вообще это не критичная ошибка. Она приводила только к тому, что аутланинг не работал.
ДА>3. Дальше совсем какой-то страх и ужос...
Ну, запускать студию с перехватом обработанных исключений — это не самое веселое времяпрепровождение .
В МС пишут так, что без тонны исключений ничего вообще не пашет.
ДА>4. Еще заметил что PegGrammar или VS2010 пытается создать файлик с генерированных исходников в странных местах то в C:\Windows\System32, то в C:\Program Files (x86)\...\ куда VS2010 поставленна.
Это потому что текущий каталог "гуляет" во время работы макроса. Надо конечно с этим разобраться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.