Продублирую сюда вопрос с другого треда, так как видимо там он потерялся.
Собрал плагин с интеграцией nitra-based языка. После установки происходит следующее:
Я могу подключить файлы с заданным расширением к проекту Nemerle (nproj), установить им BuildAction Nitra и получить работающую подсветку, навигацию и т.п.
Я могу подключить файлы с заданным расширением к проекту C# (csproj), установить им BuildAction Compile и получить работающую подсветку, навигацию и т.п., но студия делает также попытку скомпилировать их как C# файлы, выдает тонну ошибок и фэйлит проект.
Во всех остальных случаях (другой BuildAction или файлы не принадлежащие проекту) в логе появляется эксепшн Can't find file with id=xxx, и интеграция не работает.
Вопросы:
Есть ли возможность получить работающую интеграцию внутри C# проекта?
Есть ли возможность получить работающую интеграцию для файлов, не относящихся ни к одному проекту?
Здравствуйте, 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-проектом. По идее он и так должен работать, но видимо "что-то пошло не так" (ц).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
_>>Я могу подключить файлы с заданным расширением к проекту C# (csproj) VD>Это не доработка. Файлы не входящие в проекты солюшена должны попадать в фэйковый проект "misc".
Влад, вот как раз интересный вопрос про смешение языков в проекте: У вас это поддерживается? Не просто отдельная DLLя, а именно один проект, где .cs и .n файлы.
Спрашиваю, потому что узнал про интересную фичу — оказывается, CS файлы можно как и в обычных компилерах, скомпилять в "промежуточный объектник" (расширение "netmodule") и потом при помощи стандартного AL.EXE собрать все объектники в сборку. О как!
Здравствуйте, Kolesiki, Вы писали:
K>Влад, вот как раз интересный вопрос про смешение языков в проекте: У вас это поддерживается? Не просто отдельная DLLя, а именно один проект, где .cs и .n файлы.
Да. Это даже Nemerle 1.x может.
В Nitra ты сам решаешь какие языки могут жить в твоем проекте. Ну, могут быть даже несколько независимых языков в одном проекте.
K>Спрашиваю, потому что узнал про интересную фичу — оказывается, CS файлы можно как и в обычных компилерах, скомпилять в "промежуточный объектник" (расширение "netmodule") и потом при помощи стандартного AL.EXE собрать все объектники в сборку. О как!
Вот тут связь не уловил. Это как раз средство склеивание различных сборок полученных независимым путем. Для этого не нужно иметь разные языки в одном проекте.
Да и на практике это все мало (редко) нужно. Ведь языки то должны тесно взаимодействовать, а раз это разные модули, то это тесного взаимодействия не получится. Разве что ссылка одной сборки на другую.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
K>>Спрашиваю, потому что узнал про интересную фичу — оказывается, CS файлы можно как и в обычных компилерах, скомпилять в "промежуточный объектник" (расширение "netmodule") и потом при помощи стандартного AL.EXE собрать все объектники в сборку. О как!
VD>Вот тут связь не уловил. Это как раз средство склеивание различных сборок полученных независимым путем. Для этого не нужно иметь разные языки в одном проекте.
Хм... как раз наоборот: если все сорсы — один язык, то он и компиляется единственным вызовом csc.exe и генерацией однофайловой сборки; Если у тебя .cs файл + .n файл, как ты их соединишь в один EXE?
Здравствуйте, Kolesiki, Вы писали:
K>Хм... как раз наоборот: если все сорсы — один язык, то он и компиляется единственным вызовом csc.exe и генерацией однофайловой сборки; Если у тебя .cs файл + .n файл, как ты их соединишь в один EXE?
Немерл умеет компилировать шарповские файлы. Добавляешь их в один проект и получаешь единую сборку.
А вот соединять разные сборки в одну длл особого смысл нет. Их можно просто рядом положить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.