Как зайти в Даркнет?!
25th January, 01:11
6
0
Как в tkinter из поля ввода Entry получить значение в одну переменную и обновить строку кнопкой, затем получить ещё одно введённое значение и затем сложить их. Ниже пример кода
21st July, 19:00
895
0
Программа, которая создает фейковые сервера в поиске игровых серверов CS 1.6 Steam
21st March, 17:43
948
0
Очень долго работает Update запрос Oracle
27th January, 09:58
914
0
не могу запустить сервер на tomcat HTTP Status 404 – Not Found
21st January, 18:02
905
0
Где можно найти фрилансера для выполнения поступающих задач, на постоянной основе?
2nd December, 09:48
938
0
Разработка мобильной кроссплатформенной военной игры
16th July, 17:57
1724
0
период по дням
25th October, 10:44
3955
0
Пишу скрипты для BAS только на запросах
16th September, 02:42
3720
0
Некорректный скрипт для закрытия блока
14th April, 18:33
4613
0
прокидывать exception в блоках try-catch JAVA
11th March, 21:11
4381
0
Помогите пожалуйста решить задачи
24th November, 23:53
6086
0
Не понимаю почему не открывается детальное описание продукта
11th November, 11:51
4351
0
Нужно решить задачу по программированию на массивы
27th October, 18:01
4396
0
Метода Крамера С++
23rd October, 11:55
4309
0
помогите решить задачу на C++
22nd October, 17:31
4002
0
Помогите решить задачу на python с codeforces
22nd October, 11:11
4492
0
Python с нуля: полное руководство для начинающих
18th June, 13:58
2599
0
Используйте ревизию SVN для обозначения сборки в CCNET
Я использую CCNET в примерном проекте с SVN в качестве системы управления версиями. CCNET настроен для создания сборки при каждом возврате. CCNET использует MSBuild для построения исходного кода.
Я хотел бы использовать последний номер редакции для генерации AssemblyInfo.cs при компиляции.
Как я могу извлечь последнюю версию из subversion и использовать значение в CCNET?
Edit: я не использую NAnt-только MSBuild.
CruiseControl.Net 1.4.4 теперь имеет маркер версии Assembly, который генерирует номера версий, совместимые со свойствами .Net assembly.
В моем проекте он настроен следующим образом:
<labeller type="assemblyVersionLabeller" incrementOnFailure="true" major="1" minor="2"/>
(Предостережение: assemblyVersionLabeller не начнет генерировать метки на основе ревизий svn, пока не произойдет фактическая сборка, вызванная фиксацией.)
а затем потребляйте это из моих MSBuild проектов с MSBuildCommunityTasks.AssemblyInfo :
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<Target Name="BeforeBuild">
<AssemblyInfo Condition="'$(CCNetLabel)' != ''" CodeLanguage="CS" OutputFile="Properties\AssemblyInfo.cs"
AssemblyTitle="MyTitle" AssemblyCompany="MyCompany" AssemblyProduct="MyProduct"
AssemblyCopyright="Copyright © 2009" ComVisible="false" Guid="some-random-guid"
AssemblyVersion="$(CCNetLabel)" AssemblyFileVersion="$(CCNetLabel)"/>
</Target>
Для полноты описания это так же просто для проектов, использующих NAnt вместо MSBuild:
<target name="setversion" description="Sets the version number to CruiseControl.Net label.">
<script language="C#">
<references>
<include name="System.dll" />
</references>
<imports>
<import namespace="System.Text.RegularExpressions" />
</imports>
<code><![CDATA[
[TaskName("setversion-task")]
public class SetVersionTask : Task
{
protected override void ExecuteTask()
{
StreamReader reader = new StreamReader(Project.Properties["filename"]);
string contents = reader.ReadToEnd();
reader.Close();
string replacement = "[assembly: AssemblyVersion(\"" + Project.Properties["CCNetLabel"] + "\")]";
string newText = Regex.Replace(contents, @"\[assembly: AssemblyVersion\("".*""\)\]", replacement);
StreamWriter writer = new StreamWriter(Project.Properties["filename"], false);
writer.Write(newText);
writer.Close();
}
}
]]>
</code>
</script>
<foreach item="File" property="filename">
<in>
<items basedir="..">
<include name="**\AssemblyInfo.cs"></include>
</items>
</in>
<do>
<setversion-task />
</do>
</foreach>
</target>
У вас есть в основном два варианта. Либо вы пишете простой скрипт, который будет запускать и анализировать выходные данные из
svn.exe информация --ревизия HEAD
чтобы получить номер редакции (тогда генерация AssemblyInfo.cs довольно прямолинейна) или просто использовать плагин для CCNET. Вот оно:
SVN Revision Labeller -это плагин для CruiseControl.NET что позволяет вам создать CruiseControl метки для сборки, основанные на номере редакции вашей рабочей копии Subversion. Этот можно настроить с помощью префикса и/или номера основных и второстепенных версий.
Я предпочитаю первый вариант, потому что это всего лишь примерно 20 строк кода:
using System;
using System.Diagnostics;
namespace SvnRevisionNumberParserSample
{
class Program
{
static void Main()
{
Process p = Process.Start(new ProcessStartInfo()
{
FileName = @"C:\Program Files\SlikSvn\bin\svn.exe", // path to your svn.exe
UseShellExecute = false,
RedirectStandardOutput = true,
Arguments = "info --revision HEAD",
WorkingDirectory = @"C:\MyProject" // path to your svn working copy
});
// command "svn.exe info --revision HEAD" will produce a few lines of output
p.WaitForExit();
// our line starts with "Revision: "
while (!p.StandardOutput.EndOfStream)
{
string line = p.StandardOutput.ReadLine();
if (line.StartsWith("Revision: "))
{
string revision = line.Substring("Revision: ".Length);
Console.WriteLine(revision); // show revision number on screen
break;
}
}
Console.Read();
}
}
}
Я нашел этот проект на google code. Это CCNET плагин для генерации метки в CCNET .
DLL тестируется с CCNET 1.3 , но он работает с CCNET 1.4 для меня. Я успешно использую этот плагин для маркировки моей сборки.
Теперь перейдем к передаче его в MSBuild ...
Я написал файл сборки NAnt, который обрабатывает синтаксический анализ информации SVN и создает свойства. Затем я использую эти значения свойств для различных задач построения, включая установку метки на сборке. Я использую этой цели в сочетании с SVN Этикетировочные пересмотре упомянутых Любош hasko с отличными результатами.
<target name="svninfo" description="get the svn checkout information">
<property name="svn.infotempfile" value="${build.directory}\svninfo.txt" />
<exec program="${svn.executable}" output="${svn.infotempfile}">
<arg value="info" />
</exec>
<loadfile file="${svn.infotempfile}" property="svn.info" />
<delete file="${svn.infotempfile}" />
<property name="match" value="" />
<regex pattern="URL: (?'match'.*)" input="${svn.info}" />
<property name="svn.info.url" value="${match}"/>
<regex pattern="Repository Root: (?'match'.*)" input="${svn.info}" />
<property name="svn.info.repositoryroot" value="${match}"/>
<regex pattern="Revision: (?'match'\d+)" input="${svn.info}" />
<property name="svn.info.revision" value="${match}"/>
<regex pattern="Last Changed Author: (?'match'\w+)" input="${svn.info}" />
<property name="svn.info.lastchangedauthor" value="${match}"/>
<echo message="URL: ${svn.info.url}" />
<echo message="Repository Root: ${svn.info.repositoryroot}" />
<echo message="Revision: ${svn.info.revision}" />
<echo message="Last Changed Author: ${svn.info.lastchangedauthor}" />
</target>
Я не уверен, работает ли это с CCNET или нет, но я создал плагин версии SVN для проекта увеличения версии сборки на CodePlex. Этот инструмент довольно гибок и может быть настроен для автоматического создания номера версии для вас, используя версию svn. Это не требует написания какого-либо кода или редактирования xml, так что ура!
Я надеюсь, что это поможет!
Настройка файлов csproj для автогенерации AssemblyInfo.cs
http://www.codeproject.com/KB/dotnet/Customizing_csproj_files.aspx
Каждый раз, когда мы создаем новый проект C#,
Visual Studio помещает туда
AssemblyInfo.cs файл для нас. Папка
определяет assembly мета-данные, такие как
его версия, конфигурация или
производитель.
Настройка файлов csproj для автогенерации AssemblyInfo.cs
http://www.codeproject.com/KB/dotnet/Customizing_csproj_files.aspx
Каждый раз, когда мы создаем новый проект C#, Visual Studio помещает туда AssemblyInfo.cs файл для нас. Папка определяет assembly мета-данные, такие как его версия, конфигурация или производитель.
Нашел вышеописанную технику для автогенерации AssemblyInfo.cs с помощью MSBuild. Скоро мы опубликуем образец.
На основе решения skolimas я обновил сценарий NAnt, чтобы также обновить AssemblyFileVersion. Спасибо skolima за код!
<target name="setversion" description="Sets the version number to current label.">
<script language="C#">
<references>
<include name="System.dll" />
</references>
<imports>
<import namespace="System.Text.RegularExpressions" />
</imports>
<code><![CDATA[
[TaskName("setversion-task")]
public class SetVersionTask : Task
{
protected override void ExecuteTask()
{
StreamReader reader = new StreamReader(Project.Properties["filename"]);
string contents = reader.ReadToEnd();
reader.Close();
// replace assembly version
string replacement = "[assembly: AssemblyVersion(\"" + Project.Properties["label"] + "\")]";
contents = Regex.Replace(contents, @"\[assembly: AssemblyVersion\("".*""\)\]", replacement);
// replace assembly file version
replacement = "[assembly: AssemblyFileVersion(\"" + Project.Properties["label"] + "\")]";
contents = Regex.Replace(contents, @"\[assembly: AssemblyFileVersion\("".*""\)\]", replacement);
StreamWriter writer = new StreamWriter(Project.Properties["filename"], false);
writer.Write(contents);
writer.Close();
}
}
]]>
</code>
</script>
<foreach item="File" property="filename">
<in>
<items basedir="${srcDir}">
<include name="**\AssemblyInfo.cs"></include>
</items>
</in>
<do>
<setversion-task />
</do>
</foreach>
</target>
Мой подход заключается в использовании вышеупомянутого плагина для ccnet и задачи nant echo для создания файла VersionInfo.cs , содержащего только атрибуты версии. Мне нужно только включить файл VersionInfo.cs в сборку
Задача echo просто выводит строку, которую я даю файлу.
Если существует аналогичная задача MSBuild, вы можете использовать тот же подход. Вот небольшая задача nant, которую я использую:
<target name="version" description="outputs version number to VersionInfo.cs">
<echo file="${projectdir}/Properties/VersionInfo.cs">
[assembly: System.Reflection.AssemblyVersion("$(CCNetLabel)")]
[assembly: System.Reflection.AssemblyFileVersion("$(CCNetLabel)")]
</echo>
</target>
Попробовать это:
<ItemGroup>
<VersionInfoFile Include="VersionInfo.cs"/>
<VersionAttributes>
[assembly: System.Reflection.AssemblyVersion("${CCNetLabel}")]
[assembly: System.Reflection.AssemblyFileVersion("${CCNetLabel}")]
</VersionAttributes>
</ItemGroup>
<Target Name="WriteToFile">
<WriteLinesToFile
File="@(VersionInfoFile)"
Lines="@(VersionAttributes)"
Overwrite="true"/>
</Target>
Пожалуйста, обратите внимание, что я не очень близок с MSBuild, поэтому мой сценарий, вероятно, не будет работать out-of-the-box и нуждается в исправлениях...
Понятия не имею, где я это нашел. Но я нашел это в интернете "somewhere".
Это обновляет все файлы AssemblyInfo.cs перед началом сборки.
Работает как заклинание. Все мои exe-е и dll-е отображаются как 1.2.3.333 (если бы "333" был SVN-й редакцией в то время.) (И первоначальная версия в файле AssemblyInfo.cs была указана как " 1.2.3.0")
$(ProjectDir) (где находится мой файл .sln)
$(SVNToolPath) (указывает на svn.exe)
это мои пользовательские переменные, их объявления/определения ниже не определены.
http://msbuildtasks.tigris.org / и / или https://github.com/loresoft/msbuildtasks имеет задачи ( FileUpdate и SvnVersion).
<Target Name="SubVersionBeforeBuildVersionTagItUp">
<ItemGroup>
<AssemblyInfoFiles Include="$(ProjectDir)\**\*AssemblyInfo.cs" />
</ItemGroup>
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(SVNToolPath)">
<Output TaskParameter="Revision" PropertyName="MySubVersionRevision" />
</SvnVersion>
<FileUpdate Files="@(AssemblyInfoFiles)"
Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)"
ReplacementText="$1.$2.$3.$(MySubVersionRevision)" />
</Target>
EDIT --------------------------------------------------
Вышеизложенное может начать отказывать после того, как ваш номер версии SVN достигнет 65534 или выше.
Видеть:
Отключить предупреждение CS1607
Вот обходной путь.
<FileUpdate Files="@(AssemblyInfoFiles)"
Regex="AssemblyFileVersion\("(\d+)\.(\d+)\.(\d+)\.(\d+)"
ReplacementText="AssemblyFileVersion("$1.$2.$3.$(SubVersionRevision)" />
Результатом этого должно быть:
В Windows/Explorer//File/Properties....
...
Версия Assembly будет 1.0.0.0.Версия файла будет 1.0.0.333, если 333-это версия SVN.
Будьте осторожны. Структура, используемая для построения номеров, является только короткой, поэтому у вас есть потолок того, как высоко может подняться ваша ревизия.
В нашем случае мы уже превысили лимит.
Если вы попытаетесь ввести номер сборки 99.99.99.599999, то свойство file version фактически выйдет как 99.99.99.10175.