Created
March 28, 2018 20:54
-
-
Save steveoh/12392453cf5354ddebbbfbe0164cfaba to your computer and use it in GitHub Desktop.
get the version info from a pro addin
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var myDocs = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); | |
var arcGisProLocation = Path.Combine(myDocs, "ArcGIS", "AddIns", "ArcGISPro"); | |
var attribute = (GuidAttribute) _assembly.GetCustomAttributes(typeof(GuidAttribute), true)[0]; | |
var proAddinFolder = $"{{{attribute.Value}}}"; | |
var addinFolder = Path.Combine(arcGisProLocation, proAddinFolder); | |
if (!Directory.Exists(addinFolder)) | |
return null; | |
// glob for *.esriAddinX | |
var addins = Directory.GetFiles(addinFolder, "*.esriAddinX"); | |
if (!addins.Any()) | |
throw new ArgumentOutOfRangeException($"Could not find the addin in {addinFolder}"); | |
if (addins.Length > 1) | |
throw new ArgumentOutOfRangeException($"Multiple esriAddinX files in {addinFolder}"); | |
var addin = addins.FirstOrDefault(); | |
var entry = ZipFile.OpenRead(addin) | |
.Entries | |
.FirstOrDefault(x => x.Name.Equals("config.daml", StringComparison.InvariantCultureIgnoreCase)); | |
if (entry == null) | |
throw new ArgumentException("Could not find config.daml"); | |
var text = new string( | |
new StreamReader( | |
entry | |
.Open(), Encoding.UTF8) | |
.ReadToEnd() | |
.ToArray()); | |
var xmlDoc = XDocument.Parse(text); | |
var ns = XNamespace.Get("http://schemas.esri.com/DADF/Registry"); | |
var addInInfo = xmlDoc.Root?.Element(ns + "AddInInfo"); | |
if (addInInfo == null) | |
throw new ArgumentException("could not find AddInInfo xml element"); | |
var name = addInInfo.Element(ns + "Name"); | |
return new VersionInformation(name?.Value, addInInfo.Attributes().Single(x => x.Name == "version").Value, | |
addInInfo.Attributes().Single(x => x.Name == "desktopVersion").Value); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment