diff --git a/data/resources/StringResources.resx b/data/resources/StringResources.resx
index 8776ce0573..8791f0f8f9 100644
--- a/data/resources/StringResources.resx
+++ b/data/resources/StringResources.resx
@@ -8416,4 +8416,19 @@ Press Esc to cancel this operation.
Assembly info file was not found. Please ensure that the project contains assembly info file.
+
+ CLS compliant
+
+
+ Default alias:
+
+
+ Informational version:
+
+
+ JIT optimization
+
+
+ JIT tracking
+
\ No newline at end of file
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfo.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfo.cs
index fb4759f036..b23f10e950 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfo.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfo.cs
@@ -34,14 +34,24 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
public string Trademark { get; set; }
+ public string DefaultAlias { get; set; }
+
public Version AssemblyVersion { get; set; }
- public Version FileVersion { get; set; }
+ public Version AssemblyFileVersion { get; set; }
+
+ public Version InformationalVersion { get; set; }
public Guid Guid { get; set; }
public string NeutralLanguage { get; set; }
public bool ComVisible { get; set; }
+
+ public bool ClsCompliant { get; set; }
+
+ public bool JitOptimization { get; set; }
+
+ public bool JitTracking { get; set; }
}
}
\ No newline at end of file
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfoPanel.xaml b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfoPanel.xaml
index 66506cb3c0..494e38dafa 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfoPanel.xaml
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfoPanel.xaml
@@ -6,7 +6,8 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:core="http://icsharpcode.net/sharpdevelop/core"
xmlns:optionPanels="clr-namespace:ICSharpCode.SharpDevelop.Gui.OptionPanels"
- mc:Ignorable="d">
+ mc:Ignorable="d"
+ d:DataContext="{d:DesignInstance Type={x:Type optionPanels:AssemblyInfo}}">
@@ -44,29 +45,60 @@
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ IsChecked="{Binding ComVisible}" Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="12"/>
+
+
+
+
+
+
diff --git a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfoProvider.cs b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfoProvider.cs
index ebbcab3392..38e1956510 100644
--- a/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfoProvider.cs
+++ b/src/Main/Base/Project/Src/Gui/Dialogs/OptionPanels/ProjectOptions/AssemblyInfo/AssemblyInfoProvider.cs
@@ -19,6 +19,7 @@
using System;
using System.IO;
using System.Linq;
+using System.Reflection;
using ICSharpCode.NRefactory.CSharp;
using Mono.CSharp;
using Attribute = ICSharpCode.NRefactory.CSharp.Attribute;
@@ -37,6 +38,8 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
var assemblyInfo = new AssemblyInfo();
+ assemblyInfo.JitOptimization = true;
+
foreach (var attributeSection in syntaxTree.Children.OfType())
{
foreach (var attribute in attributeSection.Attributes)
@@ -48,41 +51,53 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
switch (attributeType.Identifier)
{
case "AssemblyTitle":
- assemblyInfo.Title = GetAttributeValueAsString(attribute);
+ assemblyInfo.Title = GetAttributeValue(attribute);
break;
case "AssemblyDescription":
- assemblyInfo.Description = GetAttributeValueAsString(attribute);
+ assemblyInfo.Description = GetAttributeValue(attribute);
break;
case "AssemblyConfigurtation":
break;
case "AssemblyCompany":
- assemblyInfo.Company = GetAttributeValueAsString(attribute);
+ assemblyInfo.Company = GetAttributeValue(attribute);
break;
case "AssemblyProduct":
- assemblyInfo.Product = GetAttributeValueAsString(attribute);
+ assemblyInfo.Product = GetAttributeValue(attribute);
break;
case "AssemblyCopyright":
- assemblyInfo.Copyright = GetAttributeValueAsString(attribute);
+ assemblyInfo.Copyright = GetAttributeValue(attribute);
break;
case "AssemblyTrademark":
- assemblyInfo.Trademark = GetAttributeValueAsString(attribute);
+ assemblyInfo.Trademark = GetAttributeValue(attribute);
break;
- case "AssemblyCulture":
+ case "AssemblyDefaultAlias":
+ assemblyInfo.DefaultAlias = GetAttributeValue(attribute);
break;
- case "ComVisible":
- assemblyInfo.ComVisible = GetAttributeValueAsBool(attribute);
+ case "AssemblyVersion":
+ assemblyInfo.AssemblyVersion = GetAttributeValueAsVersion(attribute);
+ break;
+ case "AssemblyFileVersion":
+ assemblyInfo.AssemblyFileVersion = GetAttributeValueAsVersion(attribute);
+ break;
+ case "AssemblyInformationalVersion":
+ assemblyInfo.InformationalVersion = GetAttributeValueAsVersion(attribute);
break;
case "Guid":
assemblyInfo.Guid = GetAttributeValueAsGuid(attribute);
break;
- case "AssemblyVersion":
- assemblyInfo.AssemblyVersion = GetAttributeValueAsVersion(attribute);
+ case "NeutralResourcesLanguage":
+ assemblyInfo.NeutralLanguage = GetAttributeValue(attribute);
break;
- case "AssemblyFileVersion":
- assemblyInfo.FileVersion = GetAttributeValueAsVersion(attribute);
+ case "ComVisible":
+ assemblyInfo.ComVisible = GetAttributeValue(attribute);
break;
- case "NeutralResourcesLanguageAttribute":
- assemblyInfo.NeutralLanguage = GetAttributeValueAsString(attribute);
+ case "CLSCompliant":
+ assemblyInfo.ClsCompliant = GetAttributeValue(attribute);
+ break;
+ case "AssemblyFlags":
+ var assemblyFlags = (AssemblyNameFlags)GetAttributeValue(attribute, (int)AssemblyNameFlags.PublicKey);
+ assemblyInfo.JitOptimization = !assemblyFlags.HasFlag(AssemblyNameFlags.EnableJITcompileOptimizer);
+ assemblyInfo.JitTracking = assemblyFlags.HasFlag(AssemblyNameFlags.EnableJITcompileTracking);
break;
}
}
@@ -98,17 +113,28 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
if (syntaxTree == null)
throw new Exception("Can't read assembly info syntax tree.");
- SetAttributeValueOrAddAttribute(syntaxTree, "AssemblyTitle", assemblyInfo.Title);
- SetAttributeValueOrAddAttribute(syntaxTree, "AssemblyDescription", assemblyInfo.Description);
- SetAttributeValueOrAddAttribute(syntaxTree, "AssemblyCompany", assemblyInfo.Company);
- SetAttributeValueOrAddAttribute(syntaxTree, "AssemblyProduct", assemblyInfo.Product);
- SetAttributeValueOrAddAttribute(syntaxTree, "AssemblyCopyright", assemblyInfo.Copyright);
- SetAttributeValueOrAddAttribute(syntaxTree, "AssemblyTrademark", assemblyInfo.Trademark);
- SetAttributeValueOrAddAttribute(syntaxTree, "ComVisible", assemblyInfo.ComVisible);
- SetAttributeValueOrAddAttribute(syntaxTree, "Guid", assemblyInfo.Guid.ToString());
- SetAttributeValueOrAddAttribute(syntaxTree, "AssemblyVersion", assemblyInfo.AssemblyVersion.ToString());
- SetAttributeValueOrAddAttribute(syntaxTree, "AssemblyFileVersion", assemblyInfo.FileVersion.ToString());
- SetAttributeValueOrAddAttribute(syntaxTree, "NeutralResourcesLanguageAttribute", assemblyInfo.NeutralLanguage);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyTitle", assemblyInfo.Title);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyDescription", assemblyInfo.Description);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyCompany", assemblyInfo.Company);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyProduct", assemblyInfo.Product);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyCopyright", assemblyInfo.Copyright);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyTrademark", assemblyInfo.Trademark);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyDefaultAlias", assemblyInfo.DefaultAlias);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyVersion", assemblyInfo.AssemblyVersion, new Version(), true);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyFileVersion", assemblyInfo.AssemblyFileVersion, new Version(), true);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyInformationalVersion", assemblyInfo.InformationalVersion, new Version(), true);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "Guid", assemblyInfo.Guid, Guid.Empty, true);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "NeutralResourcesLanguage", assemblyInfo.NeutralLanguage);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "ComVisible", assemblyInfo.ComVisible, false);
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "CLSCompliant", assemblyInfo.ClsCompliant, false);
+
+ AssemblyNameFlags assemblyFlags = AssemblyNameFlags.PublicKey;
+ if (!assemblyInfo.JitOptimization)
+ assemblyFlags = assemblyFlags | AssemblyNameFlags.EnableJITcompileOptimizer;
+ if (assemblyInfo.JitTracking)
+ assemblyFlags = assemblyFlags | AssemblyNameFlags.EnableJITcompileTracking;
+
+ SetAttributeValueOrAddAttributeIfNotDefault(syntaxTree, "AssemblyFlags", (int)assemblyFlags, (int)AssemblyNameFlags.PublicKey);
WriteSyntaxTree(syntaxTree, fileName);
}
@@ -131,22 +157,13 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
File.WriteAllText(fileName, syntaxTree.ToString());
}
- private string GetAttributeValueAsString(Attribute attribute)
- {
- var attributeArguments = attribute.Arguments.OfType().ToArray();
- if (attributeArguments.Length == 1)
- return attributeArguments[0].Value as string;
-
- return string.Empty;
- }
-
- private bool GetAttributeValueAsBool(Attribute attribute)
+ private T GetAttributeValue(Attribute attribute, T defaultValue = default(T))
{
var attributeArguments = attribute.Arguments.OfType().ToArray();
- if (attributeArguments.Length == 1)
- return (bool)attributeArguments[0].Value;
+ if (attributeArguments.Length == 1 && attributeArguments[0].Value is T)
+ return (T)attributeArguments[0].Value;
- return false;
+ return defaultValue;
}
private Guid GetAttributeValueAsGuid(Attribute attribute)
@@ -164,34 +181,36 @@ namespace ICSharpCode.SharpDevelop.Gui.OptionPanels
if (attributeArguments.Length == 1)
{
var versionString = attributeArguments[0].Value as string;
- var versionParts = versionString.Split('.');
- if (versionParts.Length == 4)
+ if (!string.IsNullOrEmpty(versionString))
{
- return new Version(
- int.Parse(versionParts[0]),
- int.Parse(versionParts[1]),
- int.Parse(versionParts[2]),
- int.Parse(versionParts[3]));
+ Version version;
+ if (Version.TryParse(versionString, out version))
+ return version;
}
}
return null;
}
- private void SetAttributeValueOrAddAttribute(SyntaxTree syntaxTree, string attributeName, object value)
+ private void SetAttributeValueOrAddAttributeIfNotDefault(SyntaxTree syntaxTree, string attributeName, object value, object defaultValue = null, bool transformValueToString = false)
{
+ if (value == null)
+ return;
+
var attribute = syntaxTree.Children.OfType().SelectMany(x => x.Attributes)
.FirstOrDefault(x => x.Type is SimpleType && ((SimpleType)x.Type).Identifier == attributeName);
+ var attributeValue = transformValueToString ? value.ToString() : value;
+
if (attribute != null)
{
attribute.Arguments.Clear();
- attribute.Arguments.Add(new PrimitiveExpression(value));
+ attribute.Arguments.Add(new PrimitiveExpression(attributeValue));
}
- else
+ else if (value != null && !value.Equals(defaultValue))
{
attribute = new Attribute() { Type = new SimpleType(attributeName) };
- attribute.Arguments.Add(new PrimitiveExpression(value));
+ attribute.Arguments.Add(new PrimitiveExpression(attributeValue));
var attributeSection = new AttributeSection(attribute) { AttributeTarget = "assembly" };
syntaxTree.AddChild(attributeSection, new NRefactory.Role("Member"));