public AssemblyInfoViewModel(AssemblyInfo assemblyInfo)
        {
            this.assemblyInfo = assemblyInfo;
            NewGuidCommand = new RelayCommand(() => Guid = System.Guid.NewGuid());

            var cultures = CultureInfo.GetCultures(CultureTypes.AllCultures);

            Languages = new Dictionary<string, string>();
            Languages.Add(
                NONE_LANGUAGE_CODE,
                string.Format("({0})", StringParser.Parse("${res:Dialog.ProjectOptions.AssemblyInfo.None}")));

            Languages.AddRange(cultures.ToDictionary(x => x.Name, x => x.DisplayName).Distinct().OrderBy(x => x.Value));
        }
        protected override void Load(MSBuildBasedProject project, string configuration, string platform)
        {
            var assemblyInfoFileName = GetAssemblyInfoFileName(project);

            if (string.IsNullOrEmpty(assemblyInfoFileName))
            {
                assemblyInfo = new AssemblyInfo();
                MessageService.ShowError("${res:Dialog.ProjectOptions.AssemblyInfo.AssemblyInfoNotFound}");
            }
            else
            {
                var assemblyInfoProvider = new AssemblyInfoProvider();
                assemblyInfo = assemblyInfoProvider.ReadAssemblyInfo(assemblyInfoFileName);
            }

            var assemblyInfoViewModel = new AssemblyInfoViewModel(assemblyInfo);
            assemblyInfoViewModel.PropertyChanged += OnAssemblyInfoChanged;
            DataContext = assemblyInfoViewModel;

            base.Load(project, configuration, platform);
        }
		private string WriteAssemblyInfoFile(AssemblyInfo assemblyInfo, string sourceFile)
		{
			using (var inputStream = new MemoryStream(Encoding.UTF8.GetBytes(sourceFile)))
			{
				var assemblyInfoProvider = new AssemblyInfoProvider();
				return assemblyInfoProvider.MergeAssemblyInfo(assemblyInfo, inputStream);
			}
		}
		public void WriteNotDefaultAssemblyInfoToNotEmptyAssemblyInfoFileTest()
		{
			var assemblyInfoFile = AssemblyInfoSample1;

			var assemblyInfo = new AssemblyInfo
			{
				Title = "SharpDevelop-changed",
				Description = "OpenSource IDE-changed",
				Company = "Company-changed",
				Product = "Product-changed",
				Copyright = "Copyright 2014-changed",
				Trademark = "Trademark-changed",
				DefaultAlias = "Alias-changed",
				AssemblyVersion = new Version(4, 3, 2, 1).ToString(),
				AssemblyFileVersion = new Version(4, 3, 2, 1).ToString(),
				InformationalVersion = new Version(4, 3, 2, 1).ToString(),
				Guid = new Guid("dc8c889f-ced2-4167-b155-2d48a99d8c72"),
				NeutralLanguage = "en-US",
				ComVisible = false,
				ClsCompliant = false,
				JitOptimization = false,
				JitTracking = false
			};

			var result = WriteAssemblyInfoFile(assemblyInfo, assemblyInfoFile);

			Assert.AreEqual(
@"using System;
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;

// General Information about an assembly is controlled through the following 
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle (""SharpDevelop-changed"")]
[assembly: AssemblyDescription (""OpenSource IDE-changed"")]
[assembly: AssemblyCompany (""Company-changed"")]
[assembly: AssemblyProduct (""Product-changed"")]
[assembly: AssemblyCopyright (""Copyright 2014-changed"")]
[assembly: AssemblyTrademark (""Trademark-changed"")]
[assembly: AssemblyDefaultAlias (""Alias-changed"")]
// This sets the default COM visibility of types in the assembly to invisible.
// If you need to expose a type to COM, use [ComVisible(true)] on that type.
[assembly: ComVisible (false)]
// The assembly version has following format :
//
// Major.Minor.Build.Revision
//
// You can specify all the values or you can use the default the Revision and 
// Build Numbers by using the '*' as shown below:
[assembly: AssemblyVersion (""4.3.2.1"")]
[assembly: AssemblyFileVersion (""4.3.2.1"")]
[assembly: AssemblyInformationalVersion (""4.3.2.1"")]
[assembly: Guid (""dc8c889f-ced2-4167-b155-2d48a99d8c72"")]
[assembly: NeutralResourcesLanguage (""en-US"")]
[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer)]
[assembly: CLSCompliant (false)]
", result);
		}
		public void WriteNotDefaultAssemblyInfoToEmptyAssemblyInfoFileTest()
		{
			var assemblyInfoFile = "using System.Reflection;";

			var assemblyInfo = new AssemblyInfo
			{
				Title = "SharpDevelop",
				Description = "OpenSource IDE",
				Company = "Company",
				Product = "Product",
				Copyright = "Copyright 2014",
				Trademark = "Trademark",
				DefaultAlias = "Alias",
				AssemblyVersion = new Version(1, 2, 3, 4).ToString(),
				AssemblyFileVersion = new Version(1, 2, 3, 4).ToString(),
				InformationalVersion = new Version(1, 2, 3, 4).ToString(),
				Guid = new Guid("0c8c889f-ced2-4167-b155-2d48a99d8c72"),
				NeutralLanguage = "ru-RU",
				ComVisible = true,
				ClsCompliant = true,
				JitOptimization = true,
				JitTracking = true
			};

			var result = WriteAssemblyInfoFile(assemblyInfo, assemblyInfoFile);

			Assert.AreEqual(
@"using System;
using System.Reflection;
using System.Resources;
using System.Runtime.InteropServices;

[assembly: AssemblyTitle (""SharpDevelop"")]
[assembly: AssemblyDescription (""OpenSource IDE"")]
[assembly: AssemblyCompany (""Company"")]
[assembly: AssemblyProduct (""Product"")]
[assembly: AssemblyCopyright (""Copyright 2014"")]
[assembly: AssemblyTrademark (""Trademark"")]
[assembly: AssemblyDefaultAlias (""Alias"")]
[assembly: AssemblyVersion (""1.2.3.4"")]
[assembly: AssemblyFileVersion (""1.2.3.4"")]
[assembly: AssemblyInformationalVersion (""1.2.3.4"")]
[assembly: Guid (""0c8c889f-ced2-4167-b155-2d48a99d8c72"")]
[assembly: NeutralResourcesLanguage (""ru-RU"")]
[assembly: ComVisible (true)]
[assembly: CLSCompliant (true)]
[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileTracking)]
", result);
		}
		public void WriteDefaultAssemblyInfoToEmptyAssemblyInfoFileTest()
		{
			var assemblyInfoFile = "using System;";
			var assemblyInfo = new AssemblyInfo { JitOptimization = true };
			var result = WriteAssemblyInfoFile(assemblyInfo, assemblyInfoFile);

			Assert.AreEqual("using System;\r\nusing System.Reflection;\r\n\r\n", result);
		}
		public void WriteAssemblyFlagsTests()
		{
			var assemblyInfo = new AssemblyInfo { JitOptimization = false, JitTracking = true };
			Assert.AreEqual(
@"using System;
using System.Reflection;

[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer | AssemblyNameFlags.EnableJITcompileTracking)]
",
				WriteAssemblyInfoFile(assemblyInfo, string.Empty));

			assemblyInfo = new AssemblyInfo { JitOptimization = true, JitTracking = true };
			Assert.AreEqual(
@"using System;
using System.Reflection;

[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileTracking)]
",
				WriteAssemblyInfoFile(assemblyInfo, string.Empty));

			assemblyInfo = new AssemblyInfo { JitOptimization = true, JitTracking = false };
			Assert.AreEqual("using System;\r\nusing System.Reflection;\r\n\r\n", WriteAssemblyInfoFile(assemblyInfo, string.Empty));

			assemblyInfo = new AssemblyInfo { JitOptimization = false, JitTracking = false };
			Assert.AreEqual(
@"using System;
using System.Reflection;

[assembly: AssemblyFlags (AssemblyNameFlags.PublicKey | AssemblyNameFlags.EnableJITcompileOptimizer)]
",
				WriteAssemblyInfoFile(assemblyInfo, string.Empty));
		}