Снова о сборке инсталлятора
От: gloomy rocker Россия  
Дата: 12.03.10 10:45
Оценка: 115 (3)
Я закомитил новую версию скрипта NemerleAll.nproj.

Что в ней нового:
1. Сборка компилятора, инструментов, интеграции и инсталлятора никак не зависит от наличия или отсутствия папки $(ProgramFiles)\Nemerle
2. Файл Compiler.MSBuild.targets больше не используется.
3. Добавлен батник BuildInstallerFast.cmd. Он позволяет собрать инсталлятор из Stage1 (значительно быстрее, чем из Stage4)

Инсталлятор собирается в конфигурации Release. Для сборки в конфигурации Debug еще нужно будет докручивать nemerle.wixproj, т.к. пока не понятно, где брать *.xml.

После установки только что собранного инсталлятора Visual Studio у меня нормально работала, а вот NemerleStudio отказалась. У меня есть подозрения, что причиной этого может быть файл Nemerle.VisualStudio.pkgdef, т.к. в нем фигурируют абсолютные пути, специфичные для моей машины. После инсталляции на девственно чистой машине (установлена только Visual Studio) в реестре фигурируют эти самые пути.

И еще, мне пришлось в nemerle.wixproj добавить вот такую инструкцию:
    <Copy SourceFiles="$(NRoot)\VsIntegration\Nemerle.VisualStudio\obj\$(Configuration)\Nemerle.VisualStudio.pkgdef" DestinationFolder="dist\bin" />

Дело в том, что в конфигурации Debug файл Nemerle.VisualStudio.pkgdef копируется в bin\Debug, а в конфигурации Release — не копируется в bin\Release.
Пришлось копировать из obj\Release. Может здесь какой-то косяк.

З.Ы. Доработка Nemerle.MSBuild.Tasks.dll для указания пути к Ncc.exe помогла
Скука — двигатель прогресса.
Re: Снова о сборке инсталлятора
От: seregaa Ниоткуда http://blogtani.ru
Дата: 12.03.10 11:58
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

GR>Дело в том, что в конфигурации Debug файл Nemerle.VisualStudio.pkgdef копируется в bin\Debug, а в конфигурации Release — не копируется в bin\Release.

GR>Пришлось копировать из obj\Release. Может здесь какой-то косяк.

А кто нибудь в курсе, зачем в инсталятору нужны и файл Nemerle.VisualStudio.pkgdef и файл vs2008.wxi? Имхо они дублируют друг друга.

Причем Nemerle.VisualStudio.pkgdef герерируется автоматически по атрибутам класса NemerlePackage, а vs2008.wxi по моему поддерживается вручную. Хотя утилита regpkg, котороая генерирует pkgdef, умеет также создавать и wxi файлы, для этого ее следует запускать с ключом /wixfile, как это описано в статье Tutorial: Simple VSPackage Deployment / Deployment By Using the Windows Installer XML Toolset (http://msdn.microsoft.com/en-us/library/bb458038.aspx).

Возможно я просто не разобрался с процессом сборки и vs2008.wxi тоже генерируется автоматически? Если нет, то неплохо бы избавиться от такого дублирования.
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re: Снова о сборке инсталлятора
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.10 14:00
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

Все это здорово. Но что нужно задать в командной строке, чтобы собрать отладочную версию проекта (без инсталлятора, но с интеграцией)?
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Снова о сборке инсталлятора
От: gloomy rocker Россия  
Дата: 12.03.10 14:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, gloomy rocker, Вы писали:


VD>Все это здорово. Но что нужно задать в командной строке, чтобы собрать отладочную версию проекта (без инсталлятора, но с интеграцией)?


Вот такой батник должен сделать то, что тебе нужно:
set MSBuild="%SystemRoot%\Microsoft.NET\Framework\v3.5\msbuild.exe"
%MSBuild% NemerleAll.nproj /t:IntegrationFast /p:Configuration=Debug

В результате в $(NRoot)\bin\Debug\Stage1 будет лежать собранный компилятор, а бинарники интеграции будут лежать там, куда настроено в соответствующих проектах.

А вообще могут пригодиться следующие варианты сборки (Здесь "|" означает или):

  1. %MSBuild% NemerleAll.nproj /t:Stage1 /p:Configuration=Debug|Release — сборка дебажной или релизной Stage1
  2. %MSBuild% NemerleAll.nproj /t:CompilerTests /p:Configuration=Debug|Release — запуск тестов дебажной или релизной Stage4 (если нужно, могу сделать цель и для Stage1)
  3. %MSBuild% NemerleAll.nproj /t:Install /p:Configuration=Debug|Release — Пока не работает, но будет копировать и NGen-ить все необходимое в $(ProgramFiles)\Nemerle
Скука — двигатель прогресса.
Re[3]: Снова о сборке инсталлятора
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.10 15:19
Оценка:
Здравствуйте, gloomy rocker, Вы писали:


А можно собирать компилятор в духстдийном режиме + интеграцию и выполнять тесты?
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Снова о сборке инсталлятора
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 12.03.10 16:16
Оценка: +1
Здравствуйте, gloomy rocker, Вы писали:

GR>Я закомитил новую версию скрипта NemerleAll.nproj.


Полагаю, что BuildInstallerRelease.cmd можно удалить за ненадобностью? (для полной сборки теперь вполне хватает BuildInstallerFull.cmd)
... << RSDN@Home 1.2.0 alpha 4 rev. 1437>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[3]: Снова о сборке инсталлятора
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.10 17:18
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

GR>Вот такой батник должен сделать то, что тебе нужно:

GR>
GR>set MSBuild="%SystemRoot%\Microsoft.NET\Framework\v3.5\msbuild.exe"
GR>%MSBuild% NemerleAll.nproj /t:IntegrationFast /p:Configuration=Debug
GR>

GR>В результате в $(NRoot)\bin\Debug\Stage1 будет лежать собранный компилятор, а бинарники интеграции будут лежать там, куда настроено в соответствующих проектах.

Облом.

Проект "C:\Nemerle\NemerleAll.nproj" (1) выполняет построение "C:\Nemerle\VsIntegration\Shell\NemerleStudio\NemerleStudio.vcproj" (14) на узле 0 (конечные объекты Rebuild).
C:\Nemerle\VsIntegration\Shell\NemerleStudio\NemerleStudio.vcproj : warning MSB4098: MSBuild вызывает VCBuild для сборки проекта. При сборке автономных проектов VC++ перекрестные ссылки между проектами VC++ (.VCPROJ) и проектами C#/VB/VJ# (.CSPROJ, .VBPROJ, .VJSPROJ) не поддерживаются системами, управляемыми из командной строки. Сборка проектов, содержащих такие перекрестные ссылки, невозможна. Вместо этого создайте файл решения с этим проектом.
vcbuild.exe : error VCBLD0004: Project 'C:\Nemerle\VsIntegration\Shell\NemerleStudio\NemerleStudio.vcproj' does not contain
a configuration called 'Debug'.


Причем, я даже не понял, что это за NemerleStudio.vcproj. Может это просто где-то опечатка и имеломсь в виду NemerleStudio.csproj ?
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Снова о сборке инсталлятора
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.03.10 17:21
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, gloomy rocker, Вы писали:


VD>Причем, я даже не понял, что это за NemerleStudio.vcproj. Может это просто где-то опечатка и имеломсь в виду NemerleStudio.csproj ?


Посмотрел внимательнее... это проект собирающий что-то для NemerleStudio. Но ее не нужно собирать для целей отладки.

1. Можно как-то не собирать этот проект?
2. Что с ним? Почему он не собирается?
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Снова о сборке инсталлятора
От: gloomy rocker Россия  
Дата: 13.03.10 10:52
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, VladD2, Вы писали:


VD>>Здравствуйте, gloomy rocker, Вы писали:


VD>>Причем, я даже не понял, что это за NemerleStudio.vcproj. Может это просто где-то опечатка и имеломсь в виду NemerleStudio.csproj ?


VD>Посмотрел внимательнее... это проект собирающий что-то для NemerleStudio. Но ее не нужно собирать для целей отладки.


VD>1. Можно как-то не собирать этот проект?

VD>2. Что с ним? Почему он не собирается?
Не собирается потому, что "does not contain a configuration called 'Debug'".
Нужно добавить в проект соответствующую конфигурацию.
Скука — двигатель прогресса.
Re[2]: Снова о сборке инсталлятора
От: gloomy rocker Россия  
Дата: 13.03.10 11:20
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Здравствуйте, gloomy rocker, Вы писали:


GR>>Я закомитил новую версию скрипта NemerleAll.nproj.


KV>Полагаю, что BuildInstallerRelease.cmd можно удалить за ненадобностью? (для полной сборки теперь вполне хватает BuildInstallerFull.cmd)

Думаю, вполне можно. Изобилие батников только вводит в заблужение.
Скука — двигатель прогресса.
Re[5]: Снова о сборке инсталлятора
От: gloomy rocker Россия  
Дата: 13.03.10 11:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Посмотрел внимательнее... это проект собирающий что-то для NemerleStudio. Но ее не нужно собирать для целей отладки.


VD>1. Можно как-то не собирать этот проект?

Можно сделать раздельную компиляцию интеграции и NemerleStudio. И соответствующие цели для этого.
Скука — двигатель прогресса.
Re[6]: Снова о сборке инсталлятора
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 13.03.10 11:37
Оценка: +1
Здравствуйте, gloomy rocker, Вы писали:

GR>Не собирается потому, что "does not contain a configuration called 'Debug'".

GR>Нужно добавить в проект соответствующую конфигурацию.

Ее Павел Блудов из-за какой-то зависимости ранее убрал.
... << RSDN@Home 1.2.0 alpha 4 rev. 1437>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[6]: Снова о сборке инсталлятора
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 13:07
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

GR>Не собирается потому, что "does not contain a configuration called 'Debug'".

GR>Нужно добавить в проект соответствующую конфигурацию.

Я поступил проще. Я убрал эти проекты из дебажной конфигурации. Добавить в них ее нельзя. Точные причины знает только Павел Блудов.

И вообще, в текущем состоянии собирать инсталлятор в дебаге нельзя. Нужно просто добавить генерацию PDB в релиз.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Снова о сборке инсталлятора
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 15:02
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

У меня тут возник вопрос по поводу цели "Install". Хотелось бы, чтобы она копировала и регистрировала сборки из bin\Satge1 если перед этим выполнялся цель IntegrationFast и из bin\Satge4 если перед этим выполнялся цель IntegrationFull. Как это можно сделать?

Из цели можно объявлять или менять свойства? Тогда в IntegrationFull и IntegrationFast можно было бы установить одно свойство — путь к бинарникам, и использовать его в цели Install.

ЗЫ

Я там направил NemerleAll.nproj. Добавил две цели: DevBuildFast и DevBuildFull. Она должны компилировать и регистрировать девелоперскую версию студии. Как отладим, я махну старые батники чтобы он вызвали эти цели.

Посмотри, не напортичил ли я чего?

Потом, у меня возникла одна проблема:
Я ввел свойство TargetName. Расчет был на то, что это значение этого свойства будет подставляться в значение атрибута Targets задачи MSBuild. Но что-то не выходит каменный цветок. Если используется значение по умолчанию для этого свойства (т.е. Rebuild, см. строку 4 в NemerleAll.nproj), то все работает как предполагалось. Но если я задаю значение свойства через параметр МСБилда "/p:TargetName=Build", то все бинарники получают имя Build.*. Почему это так и что делать, я так и не разобрался. Меж тем для работы над проектом при вызове цели DevBuildFast лучше использовать Build, а не Rebuild, так как зачастую все компилироваться нет смысла.

Нет мыслей по поводу того в чем я ошибся?
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Снова о сборке инсталлятора
От: seregaa Ниоткуда http://blogtani.ru
Дата: 13.03.10 20:52
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

А расскажите плиз, как сейчас правильно собирать немерле для запуска отладочной версии интеграции?
Я деинсталировал интеграцию, полностью удалил старые исходники, удалил папку c:\program files\nemerle.
Затем скачал все заново из репозитория и теперь не могу собрать билд для отладки.

Я раньше использовал комбинацию из Build-1-phase.cmd и VsIntegration\build_dev.cmd, но сейчас (rev 8604) она не работает (

Build-1-phase.cmd вылетает с сообщением:
D:\Projects\Nemerle\svn\Nemerle.nproj(32,11): error MSB4019: 
The imported project "D:\Projects\Nemerle\svn\boot\Nemerle.MSBuild.targets" was not found. 
Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.


Build.cmd вылетает с такой же ошибкой.

Если скопировать вручную \tools\msbuild-task\Nemerle.MSBuild.targets в \boot\Nemerle.MSBuild.targets, то Build-1-phase.cmd отрабатывает без ошибок, но затем начинает вылетать VsIntegration\build_dev.cmd:
D:\Projects\Nemerle\svn\VsIntegration\Nemerle.Compiler.Utils.Tests\Nemerle.Compiler.Utils.Tests.csproj(100,11): 
error MSB4019: The imported project "D:\Nemerle.MSBuild.targets" was not found. 
Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.

Сборка почемуто ищет файл targets в корне диска d:
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[2]: Снова о сборке инсталлятора
От: seregaa Ниоткуда http://blogtani.ru
Дата: 13.03.10 21:08
Оценка:
Здравствуйте, seregaa, Вы писали:

S>Если скопировать вручную \tools\msbuild-task\Nemerle.MSBuild.targets в \boot\Nemerle.MSBuild.targets, то Build-1-phase.cmd отрабатывает без ошибок, но затем начинает вылетать VsIntegration\build_dev.cmd:

S>
S>D:\Projects\Nemerle\svn\VsIntegration\Nemerle.Compiler.Utils.Tests\Nemerle.Compiler.Utils.Tests.csproj(100,11): 
S>error MSB4019: The imported project "D:\Nemerle.MSBuild.targets" was not found. 
S>Confirm that the path in the <Import> declaration is correct, and that the file exists on disk.
S>


Удалось собрать, создав предварительно вручную папку c:\program files\nemerle и скопировав в нее файлы из boot
Мобильная версия сайта RSDN — http://rsdn.org/forum/rsdn/6938747
Автор: sergeya
Дата: 19.10.17
Re[2]: Снова о сборке инсталлятора
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.03.10 22:34
Оценка:
Здравствуйте, seregaa, Вы писали:

S>А расскажите плиз, как сейчас правильно собирать немерле для запуска отладочной версии интеграции?


Пока что только с помощью батника i.cmd.

Чуть позже я налажу все варианты.
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Снова о сборке инсталлятора
От: gloomy rocker Россия  
Дата: 14.03.10 18:49
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, gloomy rocker, Вы писали:



VD>А можно собирать компилятор в духстдийном режиме + интеграцию и выполнять тесты?

В данный момент тесты заточены только на Stage4, но если нужно, можно и для Stage2 сделать. Я попробую ввести свойство NStage, которое будет устанавливаться в конце каждой стадии и указывать на последние собранные бинарники. Потом его можно будет использовать в других целях (например в Install, CompilerTests). А еще лучше добавить 2 свойства NCurStage и NPrevStage. Тогда можно будет и цель Validate обобщить.
Скука — двигатель прогресса.
Re[5]: Снова о сборке инсталлятора
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.03.10 19:51
Оценка:
Здравствуйте, gloomy rocker, Вы писали:

VD>>А можно собирать компилятор в духстдийном режиме + интеграцию и выполнять тесты?

GR>В данный момент тесты заточены только на Stage4, но если нужно, можно и для Stage2 сделать. Я попробую ввести свойство NStage, которое будет устанавливаться в конце каждой стадии и указывать на последние собранные бинарники. Потом его можно будет использовать в других целях (например в Install, CompilerTests). А еще лучше добавить 2 свойства NCurStage и NPrevStage. Тогда можно будет и цель Validate обобщить.

Это было бы то что нужно. Давай!
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Снова о сборке инсталлятора
От: gloomy rocker Россия  
Дата: 14.03.10 20:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>У меня тут возник вопрос по поводу цели "Install". Хотелось бы, чтобы она копировала и регистрировала сборки из bin\Satge1 если перед этим выполнялся цель IntegrationFast и из bin\Satge4 если перед этим выполнялся цель IntegrationFull. Как это можно сделать?


VD>Из цели можно объявлять или менять свойства? Тогда в IntegrationFull и IntegrationFast можно было бы установить одно свойство — путь к бинарникам, и использовать его в цели Install.

Думаю, можно. Надо попробовать.

VD>ЗЫ


VD>Я там направил NemerleAll.nproj. Добавил две цели: DevBuildFast и DevBuildFull. Она должны компилировать и регистрировать девелоперскую версию студии. Как отладим, я махну старые батники чтобы он вызвали эти цели.

VD>Посмотри, не напортичил ли я чего?
Ок. Посмотрю.

VD>Потом, у меня возникла одна проблема:

VD>Я ввел свойство TargetName. Расчет был на то, что это значение этого свойства будет подставляться в значение атрибута Targets задачи MSBuild. Но что-то не выходит каменный цветок. Если используется значение по умолчанию для этого свойства (т.е. Rebuild, см. строку 4 в NemerleAll.nproj), то все работает как предполагалось. Но если я задаю значение свойства через параметр МСБилда "/p:TargetName=Build", то все бинарники получают имя Build.*. Почему это так и что делать, я так и не разобрался. Меж тем для работы над проектом при вызове цели DevBuildFast лучше использовать Build, а не Rebuild, так как зачастую все компилироваться нет смысла.
Цель Rebuild там стоит намеренно, т.к. в данный момент в bin\$(Configuration)\StageX бинарники складируются по стадиям, а в obj\$(Configuration) все лежит в одной куче. И чтобы obj очищался перед каждой фазой я и поставил насильственный Rebuild. Нужно сделать так, чтобы в obj бинарники складировались так же как в bin. Тогда цель Build будет собираться корректно.

VD>Нет мыслей по поводу того в чем я ошибся?

Судя по тому, что я видел в истории изменения NemerleAll.nproj, проблема уже решена. Дело было в отсутствии "$" (вместо (TargetName) нужно было $(TargetName)).
По крайней мере сейчас со сборкой проблем нет.
Скука — двигатель прогресса.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.