Apps built with ArcGIS Runtime SDK for .NET require an ArcGIS Runtime deployment. The ArcGIS Runtime deployment contains the minimum set of ArcGIS Runtime components required to support the functionality in your app, from rendering beautiful maps to performing complex GIS analysis. Likewise, excluding unneeded components produces focused apps with a smaller footprint, containing bits only for the capabilities you need.
Define ArcGIS Runtime components to deploy
If you've created a deployment for a version 10.2.x ArcGIS Runtime app then you're familiar with the ArcGIS Runtime .NET Deployment Manifest file and perhaps the Visual Studio UI that was available for selecting the runtime components you needed in your deployment. At version 100.x of ArcGIS Runtime SDK for .NET, you no longer use a manifest file to configure your standard runtime deployment. In fact, at version 100.0 and later all you need to do is, well .... nothing. An ArcGIS Runtime deployment is now created for you automatically when you build your project.
The ArcGIS Runtime SDK for .NET NuGet package(s) you add to your project will deploy the necessary runtime components according to your build configuration. If you're building a WPF project for both 32 and 64 bit platforms, for example, ArcGIS Runtime deployments will be created in directories called client32 and client64. These directories appear under a folder called ArcGISRuntime100.x in the project output folder (bin/Debug or bin/Release, for example).
If you have a 10.2.x version of ArcGIS Runtime SDK for .NET installed, you will see the Add ArcGIS Runtime .NET Deployment Manifest menu choice in Visual Studio when working in your ArcGIS Runtime SDK for .NET version 100.x projects. You cannot use this manifest file to define your deployment package, however, and will receive an error ("Unsupported SDK version") when attempting to add the file.
You will require an ArcGIS Runtime deployment for every target platform for your app. The ArcGIS Runtime NuGet packages will automatically detect the build target for the project and build an ArcGIS Runtime with the appropriate architecture. This can be one or more of x86 (32 bit), x64 (64 bit), any CPU, or ARM depending on your app type.
Deployment steps may differ for each platform in ArcGIS Runtime SDK for .NET (WPF, Windows Universal, Android, iOS). Consult the deployment information for each platform you want to deploy.
Deploying specialized symbols
You may need to deploy specialized symbols, such as military symbol dictionaries, for use with your ArcGIS Runtime SDK app. In ArcGIS Runtime SDK for .NET versions prior to 100.0, these symbols were included in the SDK install and could simply be copied to a deployment folder for your app. To reduce the size of the setup (especially with the increased number of supported platforms), these symbols are not included in the ArcGIS Runtime SDK for .NET NuGet packages.
You have a couple of options for including these symbols in your deployment.
- Download the .stylx files from ArcGIS Online. The ArcGIS for Defense group hosts the following ArcGIS Online items that contain .stylx files with military symbols. Once downloaded, you can include the files in your app deployment. Logic in your app, of course, would be required to locate and use the files as needed.
- Add logic to your app that prepares the app for offline use by downloading the files and storing them locally. You can access these resources when your user is online either by programmatically downloading them (using System.Net.Http.HttpClient, for example) or accessing them as portal items using the ArcGIS Runtime API, reading their contents, and storing them locally. The following example shows how to access the military symbol items listed above using ArcGIS Runtime code.
// Get the ArcGIS Online portal (default if no URI is provided) ArcGISPortal agol = await ArcGISPortal.CreateAsync(); // Get the military symbol items (use their unique item IDs) PortalItem itemMil2525c = await PortalItem.CreateAsync(agol, "5190cc905bff4ecda122d5e0c69ddeda"); PortalItem itemMilStd2525d = await PortalItem.CreateAsync(agol, "e34835bf5ec5430da7cf16bb8c0b075c"); // Read the data from the items var dataMil2525c = await itemMil2525c.GetDataAsync(); var dataMilStd2525d = await itemMilStd2525d.GetDataAsync(); // ... Code here to read the data and write it to a local file ...