BuildAction для файла nitra-based языка
От: meadow_meal  
Дата: 19.01.17 22:21
Оценка:
Привет,

Продублирую сюда вопрос с другого треда, так как видимо там он потерялся.

Собрал плагин с интеграцией nitra-based языка. После установки происходит следующее:

Я могу подключить файлы с заданным расширением к проекту Nemerle (nproj), установить им BuildAction Nitra и получить работающую подсветку, навигацию и т.п.

Я могу подключить файлы с заданным расширением к проекту C# (csproj), установить им BuildAction Compile и получить работающую подсветку, навигацию и т.п., но студия делает также попытку скомпилировать их как C# файлы, выдает тонну ошибок и фэйлит проект.

Во всех остальных случаях (другой BuildAction или файлы не принадлежащие проекту) в логе появляется эксепшн Can't find file with id=xxx, и интеграция не работает.

Вопросы:

Есть ли возможность получить работающую интеграцию внутри C# проекта?

Есть ли возможность получить работающую интеграцию для файлов, не относящихся ни к одному проекту?
Re: BuildAction для файла nitra-based языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.01.17 06:48
Оценка: 2 (1)
Здравствуйте, meadow_meal, Вы писали:

_>Я могу подключить файлы с заданным расширением к проекту C# (csproj), установить им BuildAction Compile и получить работающую подсветку, навигацию и т.п., но студия делает также попытку скомпилировать их как C# файлы, выдает тонну ошибок и фэйлит проект.


При компиляции запускается стандартный компилятор C#, ну, и он, естественно, вашего языка не знает. Решить эту проблему можно двумя способами:
1. Подхачить сам проект переопределив таск ответственный за сборку.
2. Использовать BuildAction "Nitra". Его надо хотя бы для одного файла задать вручную (иначе студия на даст его указать в GUI). Для этого надо открыть файл проекта, найти текг "<Compile..." со своим файлом, и поменять "Compile" на "Nitra". После этого в студии будет доступен BuildAction "Nitra".

_>Во всех остальных случаях (другой BuildAction или файлы не принадлежащие проекту) в логе появляется эксепшн Can't find file with id=xxx, и интеграция не работает.


Это не доработка. Файлы не входящие в проекты солюшена должны попадать в фэйковый проект "misc".

_>Вопросы:

_>Есть ли возможность получить работающую интеграцию внутри C# проекта?

Да. AMMY именно так и работает (в режиме препроцессора).

_>Есть ли возможность получить работающую интеграцию для файлов, не относящихся ни к одному проекту?


Это будет чуть позже. Сейчас я бьюсь над тем, чтобы плагины надежно работали в C# и Nemerle проектах. Там, к сожалению, не все так просто. Когода закончю постараюсь разобраться с misc-проектом. По идее он и так должен работать, но видимо "что-то пошло не так" (ц).
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: BuildAction для файла nitra-based языка
От: Kolesiki  
Дата: 21.01.17 09:33
Оценка:
Здравствуйте, VladD2, Вы писали:

_>>Я могу подключить файлы с заданным расширением к проекту C# (csproj)

VD>Это не доработка. Файлы не входящие в проекты солюшена должны попадать в фэйковый проект "misc".

Влад, вот как раз интересный вопрос про смешение языков в проекте: У вас это поддерживается? Не просто отдельная DLLя, а именно один проект, где .cs и .n файлы.
Спрашиваю, потому что узнал про интересную фичу — оказывается, CS файлы можно как и в обычных компилерах, скомпилять в "промежуточный объектник" (расширение "netmodule") и потом при помощи стандартного AL.EXE собрать все объектники в сборку. О как!
Re[3]: BuildAction для файла nitra-based языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.01.17 15:25
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Влад, вот как раз интересный вопрос про смешение языков в проекте: У вас это поддерживается? Не просто отдельная DLLя, а именно один проект, где .cs и .n файлы.


Да. Это даже Nemerle 1.x может.

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

K>Спрашиваю, потому что узнал про интересную фичу — оказывается, CS файлы можно как и в обычных компилерах, скомпилять в "промежуточный объектник" (расширение "netmodule") и потом при помощи стандартного AL.EXE собрать все объектники в сборку. О как!


Вот тут связь не уловил. Это как раз средство склеивание различных сборок полученных независимым путем. Для этого не нужно иметь разные языки в одном проекте.

Да и на практике это все мало (редко) нужно. Ведь языки то должны тесно взаимодействовать, а раз это разные модули, то это тесного взаимодействия не получится. Разве что ссылка одной сборки на другую.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: BuildAction для файла nitra-based языка
От: Kolesiki  
Дата: 22.01.17 23:08
Оценка:
Здравствуйте, VladD2, Вы писали:

K>>Спрашиваю, потому что узнал про интересную фичу — оказывается, CS файлы можно как и в обычных компилерах, скомпилять в "промежуточный объектник" (расширение "netmodule") и потом при помощи стандартного AL.EXE собрать все объектники в сборку. О как!


VD>Вот тут связь не уловил. Это как раз средство склеивание различных сборок полученных независимым путем. Для этого не нужно иметь разные языки в одном проекте.


Хм... как раз наоборот: если все сорсы — один язык, то он и компиляется единственным вызовом csc.exe и генерацией однофайловой сборки; Если у тебя .cs файл + .n файл, как ты их соединишь в один EXE?
Re[5]: BuildAction для файла nitra-based языка
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.17 08:38
Оценка:
Здравствуйте, Kolesiki, Вы писали:

K>Хм... как раз наоборот: если все сорсы — один язык, то он и компиляется единственным вызовом csc.exe и генерацией однофайловой сборки; Если у тебя .cs файл + .n файл, как ты их соединишь в один EXE?


Немерл умеет компилировать шарповские файлы. Добавляешь их в один проект и получаешь единую сборку.

А вот соединять разные сборки в одну длл особого смысл нет. Их можно просто рядом положить.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.