Как определить путь к sn.exe
От: Sergey J. A. Беларусь  
Дата: 07.04.14 05:59
Оценка:
Нужно определить путь где проинсталена утилита sn.exe (для подписывания .NET сборок).

Сейчас на билд сервере захардкожен путь на SDK в одном из скриптов настройки окружения:

set PATH=%PATH%;C:\Program Files\Microsoft SDKs\Windows\v7.0A\Bin


Хочу генерить этот скрипт автоматически, чтоб не зависеть от конфигурации билд сервера.

Пока ничего не придумал лучше, чем взять путь к Program Files (x86) добавить Microsoft SDKs\Windows и найти максимальное SDK содержащее утилиту sn.exe

Но может можно определить путь установки SDK X.X как-то более надёжно?
Re: Как определить путь к sn.exe
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 07.04.14 09:46
Оценка: 2 (1) +2
Здравствуйте, Sergey J. A., Вы писали:

SJA>Но может можно определить путь установки SDK X.X как-то более надёжно?


Вижу два варианта: положить sn.exe в /tools/ в репозитории или же исправить скрипт, которым конфигурируется сам билд-сервер и в этом скрипте править %PATH%.
HgLab: Mercurial Server and Repository Management for Windows
Re: Как определить путь к sn.exe
От: Sinix  
Дата: 07.04.14 10:48
Оценка:
Здравствуйте, Sergey J. A., Вы писали:

SJA>Но может можно определить путь установки SDK X.X как-то более надёжно?

Можно передавать через свойства msbuild, оба популярных варианта есть вот тут:
http://stackoverflow.com/questions/18249027/import-targets-file-from-command-line-in-msbuild
Re[2]: Как определить путь к sn.exe
От: Sergey J. A. Беларусь  
Дата: 08.04.14 11:56
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

SJA>>Но может можно определить путь установки SDK X.X как-то более надёжно?


Н>Вижу два варианта: положить sn.exe в /tools/ в репозитории


Не хотелось бы, но видимо это самый простой вариант.

Н>или же исправить скрипт, которым конфигурируется сам билд-сервер и в этом скрипте править %PATH%.

Хочется этот скрипт генерировать "на лету", что бы не править его для каждого нового билд сервера.
Re[2]: Как определить путь к sn.exe
От: Sergey J. A. Беларусь  
Дата: 08.04.14 12:06
Оценка:
Здравствуйте, Sinix, Вы писали:

SJA>>Но может можно определить путь установки SDK X.X как-то более надёжно?

S>Можно передавать через свойства msbuild, оба популярных варианта есть вот тут:
S>http://stackoverflow.com/questions/18249027/import-targets-file-from-command-line-in-msbuild

С передачей проблем нет. Вопрос в автоматическом определении настроек конфигурации.
Что-то вроде


.\configure.ps1 > _env.bat

rem _env.bat contains set PATH=%PATH%;<path to SDK>
call _env.bat

...
sn.exe Assembly.dll
Re[3]: Как определить путь к sn.exe
От: Sinix  
Дата: 08.04.14 12:20
Оценка: 4 (1) +1
Здравствуйте, Sergey J. A., Вы писали:

SJA>С передачей проблем нет. Вопрос в автоматическом определении настроек конфигурации.

SJA>Что-то вроде

Из опыта: автоматический подбор версии sdk/компилятора/etc приводит к очень неожиданным и очень трудноуловимым ошибкам. Просто заведите несколько файлов настроек и задавайте нужный через командную строку.
Сам файл, если сильно хочется, можно генерить автоматом, главное проверять после генерации. Пути можно брать из реестра

Если нужен именно путь к sn, то я бы не изобретал велосипед и брал бы путь из GetFrameworkSdkPath Task.
Вот готовое решение.
Re[4]: Как определить путь к sn.exe
От: Sergey J. A. Беларусь  
Дата: 08.04.14 13:17
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Из опыта: автоматический подбор версии sdk/компилятора/etc приводит к очень неожиданным и очень трудноуловимым ошибкам.

Подбором заниматься не буду. Буду искать конкретную версию SDK/студии/что там надо ещё.

S>Сам файл, если сильно хочется, можно генерить автоматом, главное проверять после генерации.

Для начала так и сделаю.

S>Пути можно брать из реестра


То что нужно, спасибо.

S>Если нужен именно путь к sn, то я бы не изобретал велосипед и брал бы путь из GetFrameworkSdkPath Task.

S>Вот готовое решение.

У нас подписывание из батника происходит, думаю вариант с реестром будет удобнее. Но на будущее запомню.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.