Browse Source

Move UpdateAssemblyInfo to update-assemblyinfo.ps1

pull/863/head
Siegfried Pammer 8 years ago
parent
commit
15072606ab
  1. 125
      BuildTools/Automated.proj
  2. BIN
      BuildTools/MSBuildCommunityTasks/ICSharpCode.SharpZipLib.dll
  3. 73
      BuildTools/MSBuildCommunityTasks/MSBuild.Community.Tasks.Targets
  4. BIN
      BuildTools/MSBuildCommunityTasks/MSBuild.Community.Tasks.dll
  5. 153
      BuildTools/MSBuildCommunityTasks/Sample.proj
  6. 294
      BuildTools/UpdateAssemblyInfo/Main.cs
  7. 63
      BuildTools/UpdateAssemblyInfo/UpdateAssemblyInfo.csproj
  8. 18
      BuildTools/UpdateAssemblyInfo/UpdateAssemblyInfo.sln
  9. 30
      BuildTools/appveyor-install.ps1
  10. 8
      BuildTools/buildAndCreatePackage.bat
  11. 111
      BuildTools/update-assemblyinfo.ps1
  12. 6
      ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj

125
BuildTools/Automated.proj

@ -1,125 +0,0 @@ @@ -1,125 +0,0 @@
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" DefaultTargets="go">
<!-- This file is called by the build server. -->
<!-- Expected properties:
ArtefactsOutputDir : full path of directory to write the build artefacts to.
TestReportsDir : full path of directory to write CC.net report files to
-->
<PropertyGroup>
<ProjectDir Condition=" '$(ProjectDir)' == '' ">$(MSBuildProjectDirectory)\..</ProjectDir>
<ILSpyBin>$(ProjectDir)\ILSpy\bin\Release</ILSpyBin>
<VsixBin>$(ProjectDir)\ILSpy.AddIn\bin\Release</VsixBin>
<MSBuildCommunityTasksPath>$(ProjectDir)\BuildTools\MSBuildCommunityTasks</MSBuildCommunityTasksPath>
<ArtefactPrefix>ILSpy_</ArtefactPrefix>
<!-- we cannot use <MSBuild> to build a solution because -->
<!-- A) passing properties to a solution called with <MSBuild> doesn't make the
properties available for the projects inside the solution
(but this works using the command line) -->
<!-- C) We need to use MSBuild 4.0, but the build server uses MSBuild 2.0 -->
<MSBuildExecutable>&quot;$(MSBuildBinPath)\msbuild.exe&quot;</MSBuildExecutable>
<BuildProperties>/p:Configuration=Release &quot;/p:Platform=Any CPU&quot;</BuildProperties>
<BuildProperties>$(BuildProperties) &quot;/p:BranchName=$(BranchName)&quot;</BuildProperties>
<BuildProperties>$(BuildProperties) $(AdditionalBuildProperties)</BuildProperties>
</PropertyGroup>
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/>
<Target Name="go">
<Error Text="ArtefactsOutputDir not set" Condition="'$(ArtefactsOutputDir)' == ''"/>
<Error Text="TestReportsDir not set" Condition="'$(TestReportsDir)' == ''"/>
<Message Text="ArtefactPrefix=$(ArtefactPrefix)" Importance="high"/>
<Message Text="ArtefactsOutputDir=$(ArtefactsOutputDir)" Importance="high"/>
<Message Text="BuildProperties=$(BuildProperties)" Importance="high"/>
<CallTarget Targets="clean1"/>
<CallTarget Targets="build"/>
<CallTarget Targets="createsetup"/>
<!--
<CallTarget Targets="buildunittests"/>
<CallTarget Targets="rununittests"/>
-->
<CallTarget Targets="clean2"/>
<CallTarget Targets="zipsource"/>
<CallTarget Targets="addnote" Condition=" '$(IsOfficialBuildServer)' == 'True' "/>
</Target>
<Target Name="build">
<MSBuild Projects="$(ProjectDir)\BuildTools\UpdateAssemblyInfo\UpdateAssemblyInfo.csproj" Targets="Build" Properties="Configuration=Debug" />
<Exec WorkingDirectory="$(ProjectDir)\BuildTools\UpdateAssemblyInfo\bin\Debug" Command="UpdateAssemblyInfo.exe --REVISION --branchname $(BranchName)" Timeout="60000" Condition=" '$(BranchName)' != '' " />
<Exec WorkingDirectory="$(ProjectDir)\BuildTools\UpdateAssemblyInfo\bin\Debug" Command="UpdateAssemblyInfo.exe --REVISION" Timeout="60000" Condition=" '$(BranchName)' == '' " />
<!-- read content of REVISION into $(BuildNumber) -->
<XmlRead XPath="/versionInfo/version"
XmlFileName="$(ProjectDir)\REVISION">
<Output TaskParameter="Value" PropertyName="BuildNumber" />
</XmlRead>
<Message Importance="high" Text="BuildNumber=$(BuildNumber)"/>
<Copy SourceFiles="$(ProjectDir)\REVISION"
DestinationFolder="$(ArtefactsOutputDir)"/>
<Exec WorkingDirectory="$(ProjectDir)"
Command="$(MSBuildExecutable) ILSpy.sln $(BuildProperties)"/>
</Target>
<!-- Yes, apparently we really need two identical clean tasks. MSBuild won't run the same task twice. -->
<Target Name="clean1">
<Exec WorkingDirectory="$(ProjectDir)"
Command="$(MSBuildExecutable) ILSpy.sln /t:Clean /p:Configuration=Debug"/>
<Exec WorkingDirectory="$(ProjectDir)"
Command="$(MSBuildExecutable) ILSpy.sln /t:Clean /p:Configuration=Release"/>
</Target>
<Target Name="clean2">
<Exec WorkingDirectory="$(ProjectDir)"
Command="$(MSBuildExecutable) ILSpy.sln /t:Clean /p:Configuration=Debug"/>
<Exec WorkingDirectory="$(ProjectDir)"
Command="$(MSBuildExecutable) ILSpy.sln /t:Clean /p:Configuration=Release"/>
</Target>
<Target Name="createsetup">
<CreateItem Include="$(ILSpyBin)\*.dll;$(ILSpyBin)\*.exe;$(ILSpyBin)\*.config"
Exclude="$(ILSpyBin)\*Debugger.*">
<Output TaskParameter="Include" ItemName="BinFileToZip"/>
</CreateItem>
<Message Importance="high" Text="Creating ZIP file $(ArtefactPrefix)$(BuildNumber)_Binaries.zip"/>
<Zip Files="@(BinFileToZip)"
ZipLevel="9"
WorkingDirectory="$(ILSpyBin)"
ZipFileName="$(ArtefactsOutputDir)\$(ArtefactPrefix)$(BuildNumber)_Binaries.zip"/>
<Copy SourceFiles="$(VsixBin)\ILSpy.AddIn.vsix"
DestinationFiles="$(ArtefactsOutputDir)\$(ArtefactPrefix)$(BuildNumber)_Addin.vsix"/>
</Target>
<Target Name="zipsource">
<CreateItem Include="$(ProjectDir)\**"
Exclude="$(ProjectDir)\**\.svn\**;$(ProjectDir)\**\obj\**;$(ProjectDir)\**\bin\**;$(ProjectDir)\.git\**;$(ProjectDir)\.git*;$(ProjectDir)\BuildTools\build\**">
<Output TaskParameter="Include" ItemName="FileToZip"/>
</CreateItem>
<Message Importance="high" Text="Creating ZIP file $(ArtefactPrefix)$(BuildNumber)_Source.zip"/>
<Zip Files="@(FileToZip)"
ZipLevel="6"
WorkingDirectory="$(ProjectDir)"
ZipFileName="$(ArtefactsOutputDir)\$(ArtefactPrefix)$(BuildNumber)_Source.zip"/>
</Target>
<Target Name="addnote">
<XmlRead XPath="/versionInfo/version"
XmlFileName="$(ProjectDir)\REVISION">
<Output TaskParameter="Value" PropertyName="BuildNumber" />
</XmlRead>
<XmlRead XPath="/versionInfo/branchName"
XmlFileName="$(ProjectDir)\REVISION">
<Output TaskParameter="Value" PropertyName="BranchName" />
</XmlRead>
<Exec WorkingDirectory="$(ProjectDir)" Command='git fetch origin refs/notes/build:refs/notes/build -f' />
<Exec WorkingDirectory="$(ProjectDir)" Command='git notes --ref build add -m "Build $(BuildNumber) on $(BranchName) successful"' IgnoreExitCode="True" />
<Exec WorkingDirectory="$(ProjectDir)" Command='git push git@github.com:icsharpcode/ILSpy.git refs/notes/build:refs/notes/build' />
</Target>
</Project>

BIN
BuildTools/MSBuildCommunityTasks/ICSharpCode.SharpZipLib.dll

Binary file not shown.

73
BuildTools/MSBuildCommunityTasks/MSBuild.Community.Tasks.Targets

@ -1,73 +0,0 @@ @@ -1,73 +0,0 @@
<?xml version="1.0" encoding="utf-8" ?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- $Id: MSBuild.Community.Tasks.Targets 139 2006-03-26 13:34:13Z cmumford $ -->
<PropertyGroup>
<MSBuildCommunityTasksPath Condition="'$(MSBuildCommunityTasksPath)' == ''">$(MSBuildExtensionsPath)\MSBuildCommunityTasks</MSBuildCommunityTasksPath>
<MSBuildCommunityTasksLib>$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.dll</MSBuildCommunityTasksLib>
</PropertyGroup>
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.AssemblyInfo" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Attrib" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.ExecuteSQL" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.FileUpdate" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.FtpUpload" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.FxCop" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.ILMerge" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Mail" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Move" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Math.Add" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Math.Divide" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Math.Multiple" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Math.Subtract" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.NDoc" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.NUnit" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.RegistryRead" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.RegistryWrite" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Script" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.ServiceController" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.ServiceQuery" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Sleep" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Schema.TaskSchema" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.SourceSafe.VssAdd" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.SourceSafe.VssCheckin" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.SourceSafe.VssCheckout" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.SourceSafe.VssClean" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.SourceSafe.VssDiff" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.SourceSafe.VssGet" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.SourceSafe.VssHistory" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.SourceSafe.VssLabel" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.SourceSafe.VssUndoCheckout" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Subversion.SvnCheckout" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Subversion.SvnClient" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Subversion.SvnCommit" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Subversion.SvnExport" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Subversion.SvnInfo" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Subversion.SvnUpdate" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Subversion.SvnVersion" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Time" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Unzip" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Version" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.WebDownload" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.XmlRead" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.XmlUpdate" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Xslt" />
<UsingTask AssemblyFile="$(MSBuildCommunityTasksLib)" TaskName="MSBuild.Community.Tasks.Zip" />
<ItemGroup>
<FxCopRuleAssemblies Include="UsageRules.dll"/>
<FxCopRuleAssemblies Include="SecurityRules.dll"/>
<FxCopRuleAssemblies Include="PortabilityRules.dll"/>
<FxCopRuleAssemblies Include="PerformanceRules.dll"/>
<FxCopRuleAssemblies Include="MobilityRules.dll"/>
<FxCopRuleAssemblies Include="InteroperabilityRules.dll"/>
<FxCopRuleAssemblies Include="GlobalizationRules.dll"/>
<FxCopRuleAssemblies Include="DesignRules.dll"/>
</ItemGroup>
</Project>

BIN
BuildTools/MSBuildCommunityTasks/MSBuild.Community.Tasks.dll

Binary file not shown.

153
BuildTools/MSBuildCommunityTasks/Sample.proj

@ -1,153 +0,0 @@ @@ -1,153 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="All" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<!-- Required Import to use MSBuild Community Tasks -->
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
<!-- These are sample targets the demonstrate the use of MSBuild Community Tasks -->
<Target Name="AssemblyInfo">
<AssemblyInfo CodeLanguage="CS"
OutputFile="AssemblyInfo.cs"
AssemblyTitle="AssemblyInfoTask"
AssemblyDescription="AssemblyInfo Description"
AssemblyConfiguration=""
AssemblyCompany="Company Name, LLC"
AssemblyProduct="AssemblyInfoTask"
AssemblyCopyright="Copyright (c) Company Name, LLC 2005"
AssemblyTrademark=""
ComVisible="false"
CLSCompliant="true"
Guid="d038566a-1937-478a-b5c5-b79c4afb253d"
AssemblyVersion="1.0.0.0"
AssemblyFileVersion="1.0.0.0" />
</Target>
<Target Name="Math">
<Add Numbers="4;3">
<Output TaskParameter="Result" PropertyName="Result" />
</Add>
<Message Text="Add 4+3= $(Result)"/>
<Add Numbers="4;3;7">
<Output TaskParameter="Result" PropertyName="Result" />
</Add>
<Message Text="Add 4+3+7= $(Result)"/>
<Subtract Numbers="10;3">
<Output TaskParameter="Result" PropertyName="Result" />
</Subtract>
<Message Text="Subtract 10-3= $(Result)"/>
<Multiple Numbers="10;3">
<Output TaskParameter="Result" PropertyName="Result" />
</Multiple>
<Message Text="Multiple 10*3= $(Result)"/>
<Divide Numbers="1;2">
<Output TaskParameter="Result" PropertyName="Result" />
</Divide>
<Message Text="Divide 1/2= $(Result)"/>
</Target>
<Target Name="Version">
<Version VersionFile="version.txt" RevisionType="Increment">
<Output TaskParameter="Major" PropertyName="Major" />
<Output TaskParameter="Minor" PropertyName="Minor" />
<Output TaskParameter="Build" PropertyName="Build" />
<Output TaskParameter="Revision" PropertyName="Revision" />
</Version>
<Message Text="Version: $(Major).$(Minor).$(Build).$(Revision)"/>
</Target>
<Target Name="Registry">
<RegistryRead
KeyName="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework"
ValueName="InstallRoot">
<Output TaskParameter="Value" PropertyName="InstallRoot" />
</RegistryRead>
<Message Text="InstallRoot: $(InstallRoot)"/>
<RegistryWrite
KeyName="HKEY_CURRENT_USER\SOFTWARE\MSBuildTasks"
ValueName="RegistryWrite"
Value="Test Write" />
</Target>
<Target Name="Service">
<ServiceQuery ServiceName="w3svc">
<Output TaskParameter="Status" PropertyName="Status" />
</ServiceQuery>
<Message Text="Web Server: $(Status)"/>
<ServiceController ServiceName="w3svc" Action="Restart" />
</Target>
<Target Name="WebDownload">
<WebDownload FileUri="http://www.microsoft.com/default.aspx"
FileName="microsoft.html" />
</Target>
<Target Name="Attrib" DependsOnTargets="Version">
<Attrib Files="version.txt"
ReadOnly="true" Hidden="true" System="true"/>
<Attrib Files="version.txt"
Hidden="false" System="false"/>
<Attrib Files="version.txt"
Normal="true"/>
</Target>
<PropertyGroup>
<Code>
<![CDATA[
public static void ScriptMain() {
List<string> list = new List<string>();
list.Add("Happy");
list.Add("New");
list.Add("Year");
Console.WriteLine("Hello MSBuild Community Scripting World.");
foreach(string s in list)
{
Console.WriteLine(s);
}
}
]]>
</Code>
</PropertyGroup>
<Target Name="Script">
<Script Language="C#" Code="$(Code)" />
</Target>
<Target Name="Sleep">
<Message Text="Sleep: 200"/>
<Sleep Milliseconds="200" />
</Target>
<ItemGroup>
<ZipFiles Include="**\*.*" Exclude="" />
</ItemGroup>
<Target Name="Zip">
<Zip Files="@(ZipFiles)"
ZipFileName="Sample.zip" />
</Target>
<Target Name="All">
<CallTarget Targets="AssemblyInfo" />
<CallTarget Targets="Math" />
<CallTarget Targets="Version" />
<CallTarget Targets="Registry" />
<CallTarget Targets="Service" />
<CallTarget Targets="WebDownload" />
<CallTarget Targets="Attrib" />
<CallTarget Targets="Script" />
<CallTarget Targets="Sleep" />
<CallTarget Targets="Zip" />
</Target>
</Project>

294
BuildTools/UpdateAssemblyInfo/Main.cs

@ -1,294 +0,0 @@ @@ -1,294 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Specialized;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading;
using System.Xml.Linq;
namespace UpdateAssemblyInfo
{
// Updates the version numbers in the assembly information.
class MainClass
{
const string BaseCommit = "d779383cb85003d6dabeb976f0845631e07bf463";
const int BaseCommitRev = 1;
const string globalAssemblyInfoTemplateFile = "ILSpy/Properties/AssemblyInfo.template.cs";
static readonly TemplateFile[] templateFiles = {
new TemplateFile {
Input = globalAssemblyInfoTemplateFile,
Output = "ILSpy/Properties/AssemblyInfo.cs"
},
new TemplateFile {
Input = "ICSharpCode.Decompiler/Properties/AssemblyInfo.template.cs",
Output = "ICSharpCode.Decompiler/Properties/AssemblyInfo.cs"
},
new TemplateFile {
Input = "ILSpy/Properties/app.config.template",
Output = "ILSpy/app.config"
}
};
class TemplateFile
{
public string Input, Output;
}
public static int Main(string[] args)
{
try {
string exeDir = Path.GetDirectoryName(typeof(MainClass).Assembly.Location);
bool createdNew;
using (Mutex mutex = new Mutex(true, "SharpDevelopUpdateAssemblyInfo" + exeDir.GetHashCode(), out createdNew)) {
if (!createdNew) {
// multiple calls in parallel?
// it's sufficient to let one call run, so just wait for the other call to finish
try {
mutex.WaitOne(10000);
} catch (AbandonedMutexException) {
}
return 0;
}
if (!File.Exists("ILSpy.sln")) {
string mainDir = Path.GetFullPath(Path.Combine(exeDir, "../../../.."));
if (File.Exists(Path.Combine(mainDir, "ILSpy.sln"))) {
Directory.SetCurrentDirectory(mainDir);
}
}
if (!File.Exists("ILSpy.sln")) {
Console.WriteLine("Working directory must be the ILSpy repo root!");
return 2;
}
RetrieveRevisionNumber();
for (int i = 0; i < args.Length; i++) {
if (args[i] == "--branchname" && i + 1 < args.Length && !string.IsNullOrEmpty(args[i+1]))
gitBranchName = args[i + 1];
}
UpdateFiles();
if (args.Contains("--REVISION")) {
var doc = new XDocument(new XElement(
"versionInfo",
new XElement("version", fullVersionNumber),
new XElement("revision", revisionNumber),
new XElement("commitHash", gitCommitHash),
new XElement("branchName", gitBranchName),
new XElement("versionName", versionName)
));
doc.Save("REVISION");
}
return 0;
}
} catch (Exception ex) {
Console.WriteLine(ex);
return 3;
}
}
static void UpdateFiles()
{
foreach (var file in templateFiles) {
string content;
using (StreamReader r = new StreamReader(file.Input)) {
content = r.ReadToEnd();
}
content = content.Replace("$INSERTVERSION$", fullVersionNumber);
content = content.Replace("$INSERTMAJORVERSION$", majorVersionNumber);
content = content.Replace("$INSERTREVISION$", revisionNumber);
content = content.Replace("$INSERTCOMMITHASH$", gitCommitHash);
content = content.Replace("$INSERTSHORTCOMMITHASH$", gitCommitHash.Substring(0, 8));
content = content.Replace("$INSERTDATE$", DateTime.Now.ToString("MM/dd/yyyy", CultureInfo.InvariantCulture));
content = content.Replace("$INSERTYEAR$", DateTime.Now.Year.ToString());
content = content.Replace("$INSERTBRANCHNAME$", gitBranchName);
bool isDefaultBranch = string.IsNullOrEmpty(gitBranchName) || gitBranchName == "master" || char.IsDigit(gitBranchName, 0);
content = content.Replace("$INSERTBRANCHPOSTFIX$", isDefaultBranch ? "" : ("-" + gitBranchName));
content = content.Replace("$INSERTVERSIONNAME$", versionName ?? "");
content = content.Replace("$INSERTVERSIONNAMEPOSTFIX$", string.IsNullOrEmpty(versionName) ? "" : "-" + versionName);
if (File.Exists(file.Output)) {
using (StreamReader r = new StreamReader(file.Output)) {
if (r.ReadToEnd() == content) {
// nothing changed, do not overwrite file to prevent recompilation
// every time.
continue;
}
}
}
using (StreamWriter w = new StreamWriter(file.Output, false, Encoding.UTF8)) {
w.Write(content);
}
}
}
static void GetMajorVersion()
{
majorVersionNumber = "?";
fullVersionNumber = "?";
versionName = null;
// Get main version from startup
using (StreamReader r = new StreamReader(globalAssemblyInfoTemplateFile)) {
string line;
while ((line = r.ReadLine()) != null) {
string search = "string Major = \"";
int pos = line.IndexOf(search);
if (pos >= 0) {
int e = line.IndexOf('"', pos + search.Length + 1);
majorVersionNumber = line.Substring(pos + search.Length, e - pos - search.Length);
}
search = "string Minor = \"";
pos = line.IndexOf(search);
if (pos >= 0) {
int e = line.IndexOf('"', pos + search.Length + 1);
majorVersionNumber = majorVersionNumber + "." + line.Substring(pos + search.Length, e - pos - search.Length);
}
search = "string Build = \"";
pos = line.IndexOf(search);
if (pos >= 0) {
int e = line.IndexOf('"', pos + search.Length + 1);
fullVersionNumber = majorVersionNumber + "." + line.Substring(pos + search.Length, e - pos - search.Length) + "." + revisionNumber;
}
search = "string VersionName = \"";
pos = line.IndexOf(search);
if (pos >= 0) {
int e = line.IndexOf('"', pos + search.Length + 1);
versionName = line.Substring(pos + search.Length, e - pos - search.Length);
}
}
}
}
static void SetVersionInfo(string fileName, Regex regex, string replacement)
{
string content;
using (StreamReader inFile = new StreamReader(fileName)) {
content = inFile.ReadToEnd();
}
string newContent = regex.Replace(content, replacement);
if (newContent == content)
return;
using (StreamWriter outFile = new StreamWriter(fileName, false, Encoding.UTF8)) {
outFile.Write(newContent);
}
}
#region Retrieve Revision Number
static string revisionNumber;
static string majorVersionNumber;
static string fullVersionNumber;
/// <summary>
/// Descriptive version name, e.g. 'Beta 3'
/// </summary>
static string versionName;
static string gitCommitHash;
static string gitBranchName;
static void RetrieveRevisionNumber()
{
if (revisionNumber == null) {
if (Directory.Exists(".git")) {
try {
ReadRevisionNumberFromGit();
string appVeyorBranch = Environment.GetEnvironmentVariable("APPVEYOR_REPO_BRANCH");
// AppVeyor uses a repository with detached head.
if (string.IsNullOrWhiteSpace(appVeyorBranch))
ReadBranchNameFromGit();
else
gitBranchName = appVeyorBranch;
} catch (Exception ex) {
Console.WriteLine(ex.ToString());
}
} else {
Console.WriteLine("There's no git working copy in " + Path.GetFullPath("."));
}
}
if (revisionNumber == null) {
ReadRevisionFromFile();
}
GetMajorVersion();
}
static void ReadRevisionNumberFromGit()
{
ProcessStartInfo info = new ProcessStartInfo("cmd", "/c git rev-list " + BaseCommit + "..HEAD");
string path = Environment.GetEnvironmentVariable("PATH");
path += ";" + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "git\\bin");
info.EnvironmentVariables["PATH"] = path;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
using (Process p = Process.Start(info)) {
string line;
int revNum = BaseCommitRev;
while ((line = p.StandardOutput.ReadLine()) != null) {
//keep only line that contains git hash
if (gitCommitHash == null && line != null && line.Length == BaseCommit.Length) {
// first entry is HEAD
gitCommitHash = line;
}
revNum++;
}
p.WaitForExit();
if (p.ExitCode != 0)
throw new Exception("git-rev-list exit code was " + p.ExitCode);
// Only set revisionNuber once we ensured the operation was successful,
// so that we retrieve the number from the REVISION file in case of errors
revisionNumber = revNum.ToString();
}
}
static void ReadBranchNameFromGit()
{
ProcessStartInfo info = new ProcessStartInfo("cmd", "/c git branch --no-color");
string path = Environment.GetEnvironmentVariable("PATH");
path += ";" + Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "git\\bin");
info.EnvironmentVariables["PATH"] = path;
info.RedirectStandardOutput = true;
info.UseShellExecute = false;
using (Process p = Process.Start(info)) {
string line;
gitBranchName = "(no branch)";
while ((line = p.StandardOutput.ReadLine()) != null) {
if (line.StartsWith("* ", StringComparison.Ordinal)) {
gitBranchName = line.Substring(2);
}
}
p.WaitForExit();
if (p.ExitCode != 0)
throw new Exception("git-branch exit code was " + p.ExitCode);
}
}
static void ReadRevisionFromFile()
{
try {
XDocument doc = XDocument.Load("REVISION");
revisionNumber = (string)doc.Root.Element("revision");
gitCommitHash = (string)doc.Root.Element("commitHash");
gitBranchName = (string)doc.Root.Element("branchName");
} catch (Exception e) {
Console.WriteLine(e.Message);
Console.WriteLine();
Console.WriteLine("The revision number of the SharpDevelop version being compiled could not be retrieved.");
Console.WriteLine();
Console.WriteLine("Build continues with revision number '0'...");
revisionNumber = null;
}
if (revisionNumber == null || revisionNumber.Length == 0) {
revisionNumber = "0";
gitCommitHash = "0000000000000000000000000000000000000000";
//throw new ApplicationException("Error reading revision number");
}
}
#endregion
}
}

63
BuildTools/UpdateAssemblyInfo/UpdateAssemblyInfo.csproj

@ -1,63 +0,0 @@ @@ -1,63 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<PropertyGroup>
<OutputType>Exe</OutputType>
<RootNamespace>UpdateAssemblyInfo</RootNamespace>
<AssemblyName>UpdateAssemblyInfo</AssemblyName>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProjectGuid>{605C8CDB-F0AD-4A21-9F4A-959B8DECB0F3}</ProjectGuid>
<AllowUnsafeBlocks>False</AllowUnsafeBlocks>
<CheckForOverflowUnderflow>False</CheckForOverflowUnderflow>
<NoStdLib>False</NoStdLib>
<RegisterForComInterop>False</RegisterForComInterop>
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies>
<BaseAddress>4194304</BaseAddress>
<PlatformTarget>x86</PlatformTarget>
<FileAlignment>4096</FileAlignment>
<WarningLevel>4</WarningLevel>
<TreatWarningsAsErrors>false</TreatWarningsAsErrors>
<NoWarn>1607</NoWarn>
<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
<SourceAnalysisOverrideSettingsFile>C:\Users\Daniel\AppData\Roaming\ICSharpCode/SharpDevelop3.0\Settings.SourceAnalysis</SourceAnalysisOverrideSettingsFile>
<StartArguments>--REVISION</StartArguments>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<OutputPath>bin\Debug\</OutputPath>
<Optimize>false</Optimize>
<DefineConstants>DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<OutputPath>bin\Release\</OutputPath>
<Optimize>true</Optimize>
<DefineConstants>TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' ">
<DebugType>Full</DebugType>
<DebugSymbols>true</DebugSymbols>
<StartAction>Project</StartAction>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
<DebugType>None</DebugType>
<DebugSymbols>false</DebugSymbols>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Data" />
<Reference Include="System.Data.DataSetExtensions">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
<Reference Include="System.Xml" />
<Reference Include="System.Xml.Linq">
<RequiredTargetFramework>3.5</RequiredTargetFramework>
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Main.cs" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
</Project>

18
BuildTools/UpdateAssemblyInfo/UpdateAssemblyInfo.sln

@ -1,18 +0,0 @@ @@ -1,18 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 11.00
# Visual Studio 2010
# SharpDevelop 4.0.1.7088
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UpdateAssemblyInfo", "UpdateAssemblyInfo.csproj", "{605C8CDB-F0AD-4A21-9F4A-959B8DECB0F3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{605C8CDB-F0AD-4A21-9F4A-959B8DECB0F3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{605C8CDB-F0AD-4A21-9F4A-959B8DECB0F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{605C8CDB-F0AD-4A21-9F4A-959B8DECB0F3}.Release|Any CPU.Build.0 = Release|Any CPU
{605C8CDB-F0AD-4A21-9F4A-959B8DECB0F3}.Release|Any CPU.ActiveCfg = Release|Any CPU
EndGlobalSection
EndGlobal

30
BuildTools/appveyor-install.ps1

@ -1,17 +1,29 @@ @@ -1,17 +1,29 @@
$majorVersion = 3;
$minorVersion = 0;
$revision = 0;
$baseCommitHash = "d779383cb85003d6dabeb976f0845631e07bf463";
$ErrorActionPreference = "Stop"
$baseCommit = "d779383cb85003d6dabeb976f0845631e07bf463";
$baseCommitRev = 1;
$globalAssemblyInfoTemplateFile = "ILSpy/Properties/AssemblyInfo.template.cs";
$versionParts = @{};
Get-Content $globalAssemblyInfoTemplateFile | where { $_ -match 'string (\w+) = "?(\w+)"?;' } | foreach { $versionParts.Add($Matches[1], $Matches[2]) }
$major = $versionParts.Major;
$minor = $versionParts.Minor;
$build = $versionParts.Build;
$versionName = $versionParts.VersionName;
if ($versionName -ne "null") {
$versionName = "-$versionName";
}
if ($env:APPVEYOR_REPO_BRANCH -ne 'master') {
$branch = "-$env:APPVEYOR_REPO_BRANCH";
} else {
$branch = "";
}
$build = [Int32]::Parse((git rev-list --count "$baseCommitHash..HEAD")) + 1;
$revision = [Int32]::Parse((git rev-list --count "$baseCommit..HEAD")) + 1;
$newVersion="$majorVersion.$minorVersion.$revision.$build";
$env:ilspy_version_number=$newVersion;
$env:appveyor_build_version="$newVersion$branch";
appveyor UpdateBuild -Version "$newVersion$branch";
$newVersion="$majorVersion.$minorVersion.$build.$revision";
$env:appveyor_build_version="$newVersion$branch$versionName";
appveyor UpdateBuild -Version "$newVersion$branch$versionName";

8
BuildTools/buildAndCreatePackage.bat

@ -1,8 +0,0 @@ @@ -1,8 +0,0 @@
@echo This script simulates what the build server is doing
@rem /p:AdditionalBuildProperties="/v:d /p:MSBuildTargetsVerbose=true"
"%ProgramFiles(x86)%\MSBuild\14.0\Bin\msbuild.exe" Automated.proj /p:ArtefactsOutputDir="%CD%\build" /p:TestReportsDir="%CD%\build"
@IF %ERRORLEVEL% NEQ 0 GOTO err
@exit /B 0
:err
@PAUSE
@exit /B 1

111
BuildTools/update-assemblyinfo.ps1

@ -0,0 +1,111 @@ @@ -0,0 +1,111 @@
$ErrorActionPreference = "Stop"
$baseCommit = "d779383cb85003d6dabeb976f0845631e07bf463";
$baseCommitRev = 1;
$globalAssemblyInfoTemplateFile = "ILSpy/Properties/AssemblyInfo.template.cs";
function Test-File([string]$filename) {
return [System.IO.File]::Exists( (Join-Path (Get-Location) $filename) );
}
function Test-Dir([string]$name) {
return [System.IO.Directory]::Exists( (Join-Path (Get-Location) $name) );
}
function gitVersion() {
if (-not (Test-Dir ".git")) {
return 1;
}
return [Int32]::Parse((git rev-list --count "$baseCommit..HEAD")) + $baseCommitRev;
}
function gitCommitHash() {
if (-not (Test-Dir ".git")) {
return "";
}
return (git rev-list "$baseCommit..HEAD") | Select -First 1;
}
function gitBranch() {
if (-not (Test-Dir ".git")) {
return "";
}
if ($env:APPVEYOR_REPO_BRANCH -ne $null) {
return $env:APPVEYOR_REPO_BRANCH;
} else {
return ((git branch --no-color).Split([System.Environment]::NewLine) | where { $_ -match "^\* " } | select -First 1).Substring(2);
}
}
$templateFiles = (
@{Input=$globalAssemblyInfoTemplateFile; Output="ILSpy/Properties/AssemblyInfo.cs"},
@{Input="ICSharpCode.Decompiler/Properties/AssemblyInfo.template.cs"; Output="ICSharpCode.Decompiler/Properties/AssemblyInfo.cs"},
@{Input="ILSpy/Properties/app.config.template"; Output = "ILSpy/app.config"}
);
[string]$mutexId = "ILSpyUpdateAssemblyInfo" + $PSScriptRoot.GetHashCode();
[bool]$createdNew = $false;
$mutex = New-Object System.Threading.Mutex($true, $mutexId, [ref]$createdNew);
try {
if (-not $createdNew) {
try {
$mutex.WaitOne(10000);
} catch [System.Threading.AbandonedMutexException] {
}
return 0;
}
if (-not (Test-File "ILSpy.sln")) {
Write-Host "Working directory must be the ILSpy repo root!";
return 2;
}
$versionParts = @{};
Get-Content $globalAssemblyInfoTemplateFile | where { $_ -match 'string (\w+) = "?(\w+)"?;' } | foreach { $versionParts.Add($Matches[1], $Matches[2]) }
$major = $versionParts.Major;
$minor = $versionParts.Minor;
$build = $versionParts.Build;
$versionName = $versionParts.VersionName;
$revision = gitVersion;
$branchName = gitBranch;
$gitCommitHash = gitCommitHash;
$postfixBranchName = "";
if ($branchName -ne "master") {
$postfixBranchName = "-$branchName";
}
if ($versionName -eq "null") {
$versionName = "";
$postfixVersionName = "";
} else {
$postfixVersionName = "-$versionName";
}
$fullVersionNumber = "$major.$minor.$build.$revision";
foreach ($file in $templateFiles) {
[string]$in = (Get-Content $file.Input) -Join [System.Environment]::NewLine;
$out = $in.Replace('$INSERTVERSION$', $fullVersionNumber);
$out = $out.Replace('$INSERTMAJORVERSION$', $major);
$out = $out.Replace('$INSERTREVISION$', $minor);
$out = $out.Replace('$INSERTCOMMITHASH$', $gitCommitHash);
$out = $out.Replace('$INSERTSHORTCOMMITHASH$', $gitCommitHash.Substring(0, 8));
$out = $out.Replace('$INSERTDATE$', [System.DateTime]::Now.ToString("MM/dd/yyyy"));
$out = $out.Replace('$INSERTYEAR$', [System.DateTime]::Now.Year.ToString());
$out = $out.Replace('$INSERTBRANCHNAME$', $branchName);
$out = $out.Replace('$INSERTBRANCHPOSTFIX$', $postfixBranchName);
$out = $out.Replace('$INSERTVERSIONNAME$', $versionName);
$out = $out.Replace('$INSERTVERSIONNAMEPOSTFIX$', $postfixVersionName);
if (((Get-Content $file.Input) -Join [System.Environment]::NewLine) -ne $out) {
$out | Out-File $file.Output;
}
}
} finally {
$mutex.ReleaseMutex();
$mutex.Dispose();
}

6
ICSharpCode.Decompiler/ICSharpCode.Decompiler.csproj

@ -556,11 +556,9 @@ @@ -556,11 +556,9 @@
<Target Name="BeforeBuild">
<PropertyGroup>
<UpdateAssemblyInfo>UpdateAssemblyInfo.exe</UpdateAssemblyInfo>
<UpdateAssemblyInfo>powershell.exe -NoProfile -ExecutionPolicy Bypass -File $(SolutionDir)\BuildTools\update-assemblyinfo.ps1</UpdateAssemblyInfo>
<UpdateAssemblyInfo Condition="$(OS)=='Unix'">mono $(UpdateAssemblyInfo)</UpdateAssemblyInfo>
</PropertyGroup>
<MSBuild Projects="$(MSBuildProjectDirectory)\..\BuildTools\UpdateAssemblyInfo\UpdateAssemblyInfo.csproj" Targets="Build" Properties="Configuration=Debug" />
<Exec WorkingDirectory="$(MSBuildProjectDirectory)\..\BuildTools\UpdateAssemblyInfo\bin\Debug" Command="$(UpdateAssemblyInfo) --branchname $(BranchName)" Timeout="60000" Condition=" '$(BranchName)' != '' " />
<Exec WorkingDirectory="$(MSBuildProjectDirectory)\..\BuildTools\UpdateAssemblyInfo\bin\Debug" Command="$(UpdateAssemblyInfo)" Timeout="60000" Condition=" '$(BranchName)' == '' " />
<Exec WorkingDirectory="$(SolutionDir)" Command="$(UpdateAssemblyInfo)" Timeout="60000" />
</Target>
</Project>
Loading…
Cancel
Save