Новый алгоритм вычисления путей к бинарникам Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.10.11 23:57
Оценка:
Теперь, при компиляции MSBuild-проектов (они же проекты VS 20XX), путь к бинарникам Nemerle будет определяться тремя свойствами проекта:
<NemerleVersion>Net-3.5</NemerleVersion>
<NemerleBinPathRoot>$(ProgramFiles)\Nemerle</NemerleBinPathRoot>
<Nemerle Condition=" '$(Nemerle)' == '' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>


NemerleBinPathRoot определяет корневой каталог в которой должны быть установлены все версии Nemerle. Каждая конкретная версия помещается в подкаталог соответствующий названию версии (т.е. свойству NemerleVersion).

По умолчанию считается путем к корневому каталогу считается %ProgramFiles%\Nemerle. Если этот путь будет изменен в инсталляторе, то инсталлятор пропишет в переменную среды окружения NemerleBinPathRoot путь к этому каталогу.

Примечание: MSBuild (и соответственно VS) воспринимают переменные окружения как MSBuild-свойства. Так что установка переменной окружения эквивалентна заданию значения MSBuild-свойства.

Поставить разные версии Nemerle в независимые каталоги будет невозможно.

Таким образом, если вы хотите переместить бинарники немерла в какой-то другой каталог (отличный от принятого по умолчанию), вам проедется определить NemerleBinPathRoot.

Если вы захотите задать пути к бинарникам на время сборки како-либо проекта, то вы можете временно установить переменные среды NemerleBinPathRoot или Nemerle. Собственно, все должно быть понятно из определения данных свойств приведенного выше.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Новый алгоритм вычисления путей к бинарникам Nemerle
От: Ziaw Россия  
Дата: 12.10.11 05:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Теперь, при компиляции MSBuild-проектов (они же проекты VS 20XX), путь к бинарникам Nemerle будет определяться тремя свойствами проекта:

VD>
VD><NemerleVersion>Net-3.5</NemerleVersion>
VD><NemerleBinPathRoot>$(ProgramFiles)\Nemerle</NemerleBinPathRoot>
VD><Nemerle Condition=" '$(Nemerle)' == '' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>
VD>


VD>NemerleBinPathRoot определяет корневой каталог в которой должны быть установлены все версии Nemerle. Каждая конкретная версия помещается в подкаталог соответствующий названию версии (т.е. свойству NemerleVersion).


Все это правильно, только названия переменных почему-то перепутаны местами.
Бинарники ведь лежат в $(ProgramFiles)\Nemerle\Net-4.0 (это должен быть NemerleBinPathRoot)
А сам язык устанавливается в $(ProgramFiles)\Nemerle (это должен быть Nemerle)
Re[2]: Новый алгоритм вычисления путей к бинарникам Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.10.11 18:17
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Все это правильно, только названия переменных почему-то перепутаны местами.

Z>Бинарники ведь лежат в $(ProgramFiles)\Nemerle\Net-4.0 (это должен быть NemerleBinPathRoot)
Z>А сам язык устанавливается в $(ProgramFiles)\Nemerle (это должен быть Nemerle)

На мой взгляд названия адекватные. В прочем, я никогда не умел придумывать хорошие имена.

Кто-то еще согласен с Ziaw, что выбранные имена не адекватны вкладываемому в них смыслу? Если, да, то просьба предлагать альтернативные.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Новый алгоритм вычисления путей к бинарникам Nemerle
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 13.10.11 15:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Теперь, при компиляции MSBuild-проектов (они же проекты VS 20XX), путь к бинарникам Nemerle будет определяться тремя свойствами проекта:

VD>
VD><NemerleVersion>Net-3.5</NemerleVersion>
VD><NemerleBinPathRoot>$(ProgramFiles)\Nemerle</NemerleBinPathRoot>
VD><Nemerle Condition=" '$(Nemerle)' == '' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>
VD>


А в этом случае, $(NemerleBinPathRoot) — разве не будет всегда устанавливаться в значение: "$(ProgramFiles)\Nemerle", независимо от существования одноименной переменной окружения? Там по идее тоже надо проверять не выставлена ли соотвествующая переменная ранее инсталлятором:

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


Соответственно, в инсталляторе проверяем — если NemerleBinPathRoot не была установлена ранее инсталятором другой версии, то устанавливаем ее в нужное значение на основе дефолтного или выбранного пользовалем пути, а если уже была, то даем использовать для установки другой версии только этот каталог даже в advanved-режиме.

Что касается переименования, то $(Nemerle), на мой взгляд, должен указывать именно на конечный каталог с бинарниками, как есть сейчас, т.к. это обеспечит хоть какую-то обратную совместимость с уже существующими проектами. А вот $(NemerleBinPathRoot) можно назвать $(NemerleRoot), чтобы было понятнее.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[2]: Новый алгоритм вычисления путей к бинарникам Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.10.11 19:42
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

VD>>
VD>><NemerleVersion>Net-3.5</NemerleVersion>
VD>><NemerleBinPathRoot>$(ProgramFiles)\Nemerle</NemerleBinPathRoot>
VD>><Nemerle Condition=" '$(Nemerle)' == '' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>
VD>>


KV>А в этом случае, $(NemerleBinPathRoot) — разве не будет всегда устанавливаться в значение: "$(ProgramFiles)\Nemerle", независимо от существования одноименной переменной окружения? Там по идее тоже надо проверять не выставлена ли соотвествующая переменная ранее инсталлятором:


Это, конечно же, ошибка. В шаблонах все так как ты написал:
<NemerleVersion>Net-3.5</NemerleVersion>
<NemerleBinPathRoot Condition=" '$(NemerleBinPath)' == '' ">$(ProgramFiles)\Nemerle</NemerleBinPathRoot>
<Nemerle Condition=" '$(Nemerle)' == '' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>

а в проектах самого компилятора:
<NemerleVersion>Net-3.5</NemerleVersion>
<NemerleBinPathRoot Condition=" ('$(NemerleBinPathRoot)' == '') And Exists('$(ProgramFiles)\Nemerle') ">$(ProgramFiles)\Nemerle</NemerleBinPathRoot>
<NemerleBinPathRoot Condition=" ('$(NemerleBinPathRoot)' == '') And Exists('$(ProgramW6432)\Nemerle') ">$(ProgramW6432)\Nemerle</NemerleBinPathRoot>
<Nemerle Condition=" '$(Nemerle)' == '' ">$(NemerleBinPathRoot)\$(NemerleVersion)</Nemerle>


KV>Соответственно, в инсталляторе проверяем — если NemerleBinPathRoot не была установлена ранее инсталятором другой версии, то устанавливаем ее в нужное значение на основе дефолтного или выбранного пользовалем пути, а если уже была, то даем использовать для установки другой версии только этот каталог даже в advanved-режиме.


Именно так.

KV>Что касается переименования, то $(Nemerle), на мой взгляд, должен указывать именно на конечный каталог с бинарниками, как есть сейчас, т.к. это обеспечит хоть какую-то обратную совместимость с уже существующими проектами.


Так оно и есть.

KV>А вот $(NemerleBinPathRoot) можно назвать $(NemerleRoot), чтобы было понятнее.


Ну, не знаю. По мне так NemerleBinPathRoot понятнее. Тут еще нужно учитывать то, что в будущем у нас, скорее всего, появятся каталоги библиотек для разных рантаймов (сервилат, компакт-фрэймворк, фрэймворки разных версий и т.п.), а вот бинарников самого компилятора будет меньше.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.