Подпишите каждый исполняемый файл с сертификатом Authenticode через MSBuild

Если просто необходимо получить то, что между [], Вы могут использовать \[([^\]]*)\] как это:

Pattern regex = Pattern.compile("\\[([^\\]]*)\\]");
Matcher m = regex.matcher(str);
if (m.find()) {
    result = m.group();
}

при необходимости в нем для имения форму identifier + [ + content + ] тогда, можно ограничить извлечение содержания только, когда идентификатор является алфавитно-цифровым:

[a-zA-Z][a-z-A-Z0-9_]*\s*\[([^\]]*)\]

Это проверит вещи как Foo [Bar], или myDevice_123["input"], например.

Основной вопрос

основная проблема состоит в том, когда Вы хотите извлечь содержание чего-то вроде этого:

FOO[BAR[CAT[123]]+DOG[FOO]]

Regex не будет работать и возвратится BAR[CAT[123 и FOO.
, Если мы изменяем Regex на [1 112] тогда, мы в порядке, но тогда, при попытке извлечь содержание из более сложных вещей как:

FOO[BAR[CAT[123]]+DOG[FOO]] = myOtherFoo[BAR[5]]

Ни один из Regexe не будет работать.

самый точный Regex для извлечения надлежащего содержания во всех случаях был бы намного более сложным, поскольку он должен будет сбалансировать [] пары и дать Вам, они удовлетворяют.

простое решение А

, Если Ваши проблемы становится сложным и содержание [] произвольный, Вы могли бы вместо этого сбалансировать пар [1 115] и извлечь строку с помощью простого кода rathe, чем Regex:

int i;
int brackets = 0;
string c;
result = "";
for (i = input.indexOf("["); i < str.length; i++) {
    c = str.substring(i, i + 1);
    if (c == '[') {
        brackets++;
    } else if (c == ']') {
        brackets--;
        if (brackets <= 0) 
            break;
    }
    result = result + c;
}   

Это - больше псевдокода, чем реальный код, я не кодер Java, таким образом, я не знаю, правилен ли синтаксис, но должно быть достаточно легко улучшить.
, Что количество - то, что этот код должен работать и позволить Вам извлекать содержание эти [], однако сложный, это.

9
задан Peter Mortensen 30 December 2013 в 23:32
поделиться

2 ответа

Не делайте этого.

Вы не хотите автоматически подписывать сборки. Большинство сборок в любом случае не нужно подписывать; они используются только для автоматизации тестов. Некоторые сборки могут быть переданы вашим штатным тестерам. Но только сборки, которые вы действительно выпускаете за пределами своей организации, нуждаются в подписях Authenticode.

В этом случае вы все равно должны выполнить этап проверки вручную после подписания. Итак, подписывание вручную не • Вставьте дополнительный ручной шаг в процесс выпуска, и его автоматизация сэкономит очень мало времени. В обмен на это в вашей организации будет гораздо меньше подписанных файлов, и вы сможете дать гораздо более надежные гарантии в отношении файлов, которые есть.

-5
ответ дан 4 December 2019 в 13:03
поделиться

Я не согласен. Поскольку сертификат подписи кода должен быть установлен на компьютере сборки для выполнения подписи, почему бы не подписывать все, что создается на этом компьютере каждый раз, когда он создается? Компьютер находится в «опасности», потому что на нем установлен сертификат подписи кода, поэтому его необходимо каким-либо образом защитить (физическая безопасность и безопасность системы). Если он защищен, почему бы не позволить ему выполнять работу, для которой он был предназначен, готовить файлы к доставке, последовательно, с повторяемостью, каждый раз?

К сожалению, ответ «не» также кажется стандартным для Microsoft ответ, поскольку они, похоже, почти не поддерживают в MSBuild цикл по списку имен файлов, вызывая программу один раз для каждого имени файла в списке. Я' Мы нашли способы передать сгенерированный подстановочными знаками список файлов в программу Signtool.exe, но она может обрабатывать только один файл за раз.

Я боюсь (для меня), что он вернулся к написанию командного файла, который циклически повторяется. его аргументы и вызовы signtool для каждого аргумента. Написание командных файлов для общей задачи подписания вывода сборки заставляет меня думать, что MSBuild действительно не настолько зрелая система сборки, какой должна быть. Либо так, либо у signtool неправильный интерфейс. В любом случае подписание нескольких файлов без перечисления имени каждого файла для подписи кажется недопустимым с MSBuild.

Написание командных файлов для общей задачи подписания вывода сборки заставляет меня думать, что MSBuild на самом деле не настолько зрелая система сборки, какой должна быть. Либо так, либо у signtool неправильный интерфейс. В любом случае подписание нескольких файлов без перечисления имени каждого файла для подписи кажется недопустимым с MSBuild.

Написание командных файлов для общей задачи подписания вывода сборки заставляет меня думать, что MSBuild действительно не настолько зрелая система сборки, какой должна быть. Либо так, либо у signtool неправильный интерфейс. В любом случае подписание нескольких файлов без перечисления имени каждого файла для подписи кажется недопустимым с MSBuild.

3
ответ дан 4 December 2019 в 13:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: