Включение компилятора Nemerle в репозиторий кода

Я пытаюсь включить компилятор Nemerle в свой репозиторий исходного кода, чтобы его можно было собрать без установки Nemerle на сервере сборки. В настоящее время мой каталог исходного кода выглядит так:

- [MySolutionFolder]
--- [.build]
------ [Nemerle]
--------- [net-4.0]
------------ ncc.exe
------------ ncc32.dll
------------ Nemerle.dll
------------ Nemerle.MSBuild.targets
------------ { all other Nemerle requirements }
--- [MyNemerleProjectFolder]
------ MyNemerleProject.nproj
------ { various .n files }
--- MySolution.sln
--- build.bat

Файл build.bat представляет собой простой сценарий, который вызывает MSBuild для файла .sln.

В моем файле .nproj я изменил строку

<Nemerle Condition=" '$(Nemerle)' == '' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>

to:

<Nemerle Condition=" '$(Nemerle)' == '' ">$(SolutionDir).build\Nemerle\$(NemerleVersion)</Nemerle>

После этого изменения я могу успешно выполнить сборку из сценария командной строки, однако не могу открыть решение в Visual Studio. При открытии решения VS жалуется, что не может найти MySolutionFolder\MyNemerleProjectFolder\.build\Nemerle\net-4.0\Nemerle.MSBuild.targets

Почему Visual Studio ищет каталог .build в папке проекта, а не в папке решения? Есть ли обходной путь для этого?

Если я изменю его на:

<Nemerle Condition=" '$(Nemerle)' == '' >$(ProjectDir)..\.build\Nemerle\$(NemerleVersion)</Nemerle>

Затем решение откроется в визуальной студии, но сборка завершится ошибкой - также не удастся выполнить сборку командной строки.


person MattDavey    schedule 31.10.2012    source источник


Ответы (2)


Попробуйте использовать $(MSBuildProjectDirectory) вместо $(ProjectDir). Например:

<Nemerle Condition=" '$(Bootstrapping)' == 'true' ">$(MSBuildProjectDirectory)\..\Boot\$(NemerleVersion)</Nemerle>
<Nemerle Condition=" '$(Bootstrapping)' == 'false' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>
person user299771    schedule 01.11.2012
comment
Благодарность! Переменная $(Bootstrapping), похоже, не имеет значения, я просто изменил ее на <Nemerle Condition=" '$(Nemerle)' == '' ">$(MSBuildProjectDirectory)\..\.build\Nemerle\$(NemerleVersion)</Nemerle>, и теперь она строится из командной строки и из Visual Studio! Большое спасибо - person MattDavey; 02.11.2012

Похоже на ошибку в Visual Studio.

Что вы можете сделать, так это указать событие перед сборкой, которое будет or-linux/">создать символическую ссылку с $(ProjectDir).build на $(SolutionDir).build.

Хакерский, да.

person catbert    schedule 01.11.2012
comment
и +1 за нестандартное мышление :) - person MattDavey; 09.11.2012