main
cs 126 lines 4.75 KB
Raw
1 // Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information.
2
3 using System.Resources;
4
5 [assembly: NeutralResourcesLanguage("en-US")]
6
7 namespace WixToolset.Core.ExtensibilityServices
8 {
9 using System;
10 using System.Diagnostics;
11 using System.IO;
12 using System.Reflection;
13 using WixToolset.Extensibility.Services;
14
15 /// <summary>
16 /// Branding strings.
17 /// </summary>
18 internal class WixBranding : IWixBranding
19 {
20 /// <summary>
21 /// News URL for the distribution.
22 /// </summary>
23 public static string NewsUrl = "http://wixtoolset.org/news/";
24
25 /// <summary>
26 /// Short product name for the distribution.
27 /// </summary>
28 public static string ShortProduct = "WiX Toolset";
29
30 /// <summary>
31 /// Support URL for the distribution.
32 /// </summary>
33 public static string SupportUrl = "http://wixtoolset.org/";
34
35 /// <summary>
36 /// Telemetry URL format for the distribution.
37 /// </summary>
38 public static string TelemetryUrlFormat = "http://wixtoolset.org/telemetry/v{0}/?r={1}";
39
40 /// <summary>
41 /// VS Extensions Landing page Url for the distribution.
42 /// </summary>
43 public static string VSExtensionsLandingUrl = "http://wixtoolset.org/releases/";
44
45 public string GetCreatingApplication()
46 {
47 return this.ReplacePlaceholders("[AssemblyProduct] ([FileVersion])");
48 }
49
50 public string ReplacePlaceholders(string original, Assembly assembly = null)
51 {
52 if (assembly == null)
53 {
54 assembly = typeof(WixBranding).Assembly;
55 }
56
57 var commonVersionPath = Path.Combine(Path.GetDirectoryName(typeof(WixBranding).Assembly.Location), "wixver.dll");
58 if (File.Exists(commonVersionPath))
59 {
60 var commonFileVersion = FileVersionInfo.GetVersionInfo(commonVersionPath);
61
62 original = original.Replace("[FileCopyright]", commonFileVersion.LegalCopyright);
63 original = original.Replace("[FileVersion]", commonFileVersion.FileVersion);
64 original = original.Replace("[ProductVersion]", commonFileVersion.ProductVersion);
65 }
66
67 var fileVersion = FileVersionInfo.GetVersionInfo(assembly.Location);
68
69 original = original.Replace("[FileComments]", fileVersion.Comments);
70 original = original.Replace("[FileCopyright]", fileVersion.LegalCopyright);
71 original = original.Replace("[FileProductName]", fileVersion.ProductName);
72 original = original.Replace("[FileVersion]", fileVersion.FileVersion);
73 original = original.Replace("[ProductVersion]", fileVersion.ProductVersion);
74
75 if (original.Contains("[FileVersionMajorMinor]"))
76 {
77 var version = new Version(fileVersion.FileVersion);
78 original = original.Replace("[FileVersionMajorMinor]", String.Concat(version.Major, ".", version.Minor));
79 }
80
81 if (TryGetAttribute(assembly, out AssemblyCompanyAttribute company))
82 {
83 original = original.Replace("[AssemblyCompany]", company.Company);
84 }
85
86 if (TryGetAttribute(assembly, out AssemblyCopyrightAttribute copyright))
87 {
88 original = original.Replace("[AssemblyCopyright]", copyright.Copyright);
89 }
90
91 if (TryGetAttribute(assembly, out AssemblyDescriptionAttribute description))
92 {
93 original = original.Replace("[AssemblyDescription]", description.Description);
94 }
95
96 if (TryGetAttribute(assembly, out AssemblyProductAttribute product))
97 {
98 original = original.Replace("[AssemblyProduct]", product.Product);
99 }
100
101 if (TryGetAttribute(assembly, out AssemblyTitleAttribute title))
102 {
103 original = original.Replace("[AssemblyTitle]", title.Title);
104 }
105
106 original = original.Replace("[NewsUrl]", NewsUrl);
107 original = original.Replace("[ShortProduct]", ShortProduct);
108 original = original.Replace("[SupportUrl]", SupportUrl);
109
110 return original;
111 }
112
113 private static bool TryGetAttribute<T>(Assembly assembly, out T attribute) where T : Attribute
114 {
115 attribute = null;
116
117 var customAttributes = assembly.GetCustomAttributes(typeof(T), false);
118 if (null != customAttributes && 0 < customAttributes.Length)
119 {
120 attribute = customAttributes[0] as T;
121 }
122
123 return null != attribute;
124 }
125 }
126 }