Автоматическое управление номером версии сборки в VS2008

Резюме существующих ответов плюс мои собственные два цента:

1. Основной ответ

Вы можете использовать функцию header() для отправки нового HTTP-заголовка, но это должно быть отправлено в браузер перед любым HTML или текстом (например, до объявления , например).

header('Location: '.$newURL);

2. Важные подробности

die () или exit ()

header("Location: http://example.com/myOtherPage.php");
die();

Почему вы должны использовать die() или exit(): The Daily WTF

Абсолютный или относительный URL

С июня 2014 года могут использоваться как абсолютные, так и относительные URL-адреса. См. RFC 7231 , который заменил старый RFC 2616 , где разрешены только абсолютные URL.

Коды статуса

PHP " Местоположение «-header по-прежнему использует HTTP 302 -предельный код, но это не тот, который вы должны использовать. Вы должны рассмотреть либо 301 (постоянная переадресация), либо 303 (другое).

Примечание: W3C упоминает , что 303 -header несовместим со многими пользовательскими агентами pre-HTTP / 1.1. В настоящее время используемыми браузерами являются все пользовательские агенты HTTP / 1.1. Это неверно для многих других пользовательских агентов, таких как пауки и роботы.

3. Документация

Заголовки HTTP и функция header() в PHP

4. Альтернативы

Вы можете использовать альтернативу метод http_redirect($url);, для которого необходимо установить пакет PECL pecl .

5. Вспомогательные функции

Эта функция не включает код состояния 303 :

function Redirect($url, $permanent = false)
{
    header('Location: ' . $url, true, $permanent ? 301 : 302);

    exit();
}

Redirect('http://example.com/', false);

Это более гибко:

function redirect($url, $statusCode = 303)
{
   header('Location: ' . $url, true, $statusCode);
   die();
}

6. Обходной путь

Как уже упоминалось, header() перенаправляет работу только до того, как что-либо выписано. Они обычно терпят неудачу, если вызывается inmidst HTML . Затем вы может использовать метод обхода HTML-заголовка (не очень профессиональный!), например:

 

Или перенаправление JavaScript даже.

window.location.replace("http://example.com/");

13
задан Mihai Limbășan 22 March 2009 в 19:46
поделиться

6 ответов

Я использую .cs файл на уровне решения, который связан всеми проектами в решении, которое содержит следующие строки:

using System.Reflection;
[assembly : AssemblyVersion("1.2.3.*")]

И убеждаться удалить эти AssemblyFileVersion атрибут из файла AssemblyInfo в Вашем проекте.

17
ответ дан Dan Atkinson 22 March 2009 в 19:46
поделиться

Поместите файл в решение, назовите этот "SolutionInfo.cs" (я принимаю C#, также работал бы в VB). В этом поместил все свойства, которые Вы имеете общего. Запустите с AssemblyVersionAttribute.

Тогда в каждой ссылке проекта к этому выбором добавляют существующий объект к каждому проекту, а скорее, чем нажатие добавляет, используйте выпадающее для добавления как ссылка.

10
ответ дан Richard 22 March 2009 в 19:46
поделиться

Можно записать пользовательскую задачу MSBuild сделать это. Взгляните на этот подход

0
ответ дан Rad 22 March 2009 в 19:46
поделиться

У нас есть единственный файл AssemblyInfoGlobal.cs на уровне решения, как другие ответы. Тогда мы имеем как часть нашего сценария сборки немного приложения, которое берет CCNetLabel, который CruiseControl.net определяет (и использование defaultLabeller, чтобы генерировать маркировки) и контроль глобальный файл, изменить номер версии и затем перепроверить глобальный файл в.

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

Мы также тогда обновляем номера версий проектов развертывания - число для них найдено в файле VDProj, но я не уверен, что Вы найдете их в специальных версиях - я думаю, что это - полный Профессионал вверх функция. И некоторые проекты имеют дюжину проектов развертывания, но никакой простой способ воплотить версию numberf из самого файла VDPROJ. (или есть ли?)

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

3
ответ дан Alan Mullett 22 March 2009 в 19:46
поделиться

Можно использовать звездочки в AssemblyInfo.cs:

// Version information
[assembly: AssemblyVersion( "1.0.*" )]

Это увеличит Ваш versionnumbers автоматически. Для совместного использования одного числа между всеми блоками... Я не уверен, но возможно Вы используете упомянутый атрибут в совместно используемом файле.

0
ответ дан tanascius 22 March 2009 в 19:46
поделиться

Я использовал задачи сообщества svnversion MSBuild , чтобы сделать что-то вроде этого, я следовал инструкциям здесь , Хотя способ, которым я делаю это, не охватывает несколько блоков.

0
ответ дан Ian Hopkinson 22 March 2009 в 19:46
поделиться
Другие вопросы по тегам:

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