Skip to content

Commit 907e108

Browse files
committed
[setup-windows] Provide a Windows installer
I really didn't want to do this. I wanted the Xamarin.Android SDK on Windows to be usable side-by-side, so that multiple `oss-xamarin.android*.zip` files could be extracted, and developers could switch between them by overriding MSBuild properties. This is what was documented in commit 87ca273, by overriding the `$(TargetFrameworkRootPath)` MSBuild property. There's just one "minor" problem with that approach: it only works if the project that is being built, and *all* project dependencies, are Xamarin.Android projects. If *any* other kind of dependency is brought in, this approach will no longer work, as the `GetReferenceAssemblies` target -- which looks for assemblies *rooted within `$(TargetFrameworkRootPath)`* -- won't be able to find them. Unfortunately, *everything of interest* doesn't fit within this restriction. A Xamarin.Forms app, or any other app using PCL assemblies, quickly runs afoul of it: error MSB3644: The reference assemblies for framework ".NETPortable,Version=v4.5,Profile=Profile259" were not found. Consequently, the instructions from commit 87ca273 are borderline worthless. There is only one way to actually build such projects, and that's to install Xamarin.Android *system-wide*, so that MSBuild's `GetReferenceAssemblies` target can find everything it needs. :-( Thus, we need an "installer." I was hoping for a simple `.cmd` file, but that stymied me. Then I hoped for a PowerShell script, but installation requires access to the `%VSINSTALLDIR%` environment variable, which is only exported from Visual Studio Developer Command Prompts, and all the solutions I found to import the VS command prompt environment info into PowerShell looked decidedly ugly. Which brings us to a minimal effort command-line installer: `setup-windows.exe`. This utility backs up existing installs, then creates symbolic links within the system-wide directories, pointing them into the extracted `oss-xamarin.android*.zip` contents which contains `setup-windows.exe`. `setup-windows.exe /uninstall` is also provided, to put directories back the way they were found. `Documentation/UsingJenkinsBuildArtifacts.md` has been updated accordingly.
1 parent 6b83f34 commit 907e108

File tree

5 files changed

+307
-49
lines changed

5 files changed

+307
-49
lines changed

Documentation/UsingJenkinsBuildArtifacts.md

Lines changed: 47 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -44,22 +44,8 @@ and download the `oss-xamarin.android*.zip` file, e.g.
4444

4545
There are two ways to install a Jenkins build of Xamarin.Android on Windows:
4646

47-
1. Through the `oss-xamarin.android*.zip` file.
48-
2. Through the `Xamarin.Android.Sdk-OSS*.vsix` file.
49-
50-
### `oss-xamarin.android*.zip` Installation
51-
52-
Windows users can right-click the `oss-xamarin.android*.zip` file within
53-
Windows Explorer and click **Extract All...**, and in the
54-
**Extract Compressed (Zipped) Folders** dialog enter a *short* path such as
55-
`C:\xa-sdk`. This is necessary because some of the contained filenames are
56-
quite long. This will result in a path such as:
57-
58-
C:\xa-sdk\oss-xamarin.android_v7.2.99.19_Darwin-x86_64_master_3b893cd\bin\Debug\bin\mono-symbolicate.cmd
59-
60-
See the [**Command-line use: Windows**](#cmd-use-Windows) section for details
61-
on using this installation within a **Developer Command Prompt for VS 2017**
62-
window.
47+
1. Through the `Xamarin.Android.Sdk-OSS*.vsix` file.
48+
2. Through the `oss-xamarin.android*.zip` file.
6349

6450
### `Xamarin.Android.Sdk-OSS*.vsix` Installation
6551

@@ -103,6 +89,51 @@ Once you've selected the desired Visual Studio products, click the **Install**
10389
button to install the Xamarin.Android SDK extension into Visual Studio 2017.
10490

10591

92+
### `oss-xamarin.android*.zip` Installation
93+
94+
Windows users can right-click the `oss-xamarin.android*.zip` file within
95+
Windows Explorer and click **Extract All...**, and in the
96+
**Extract Compressed (Zipped) Folders** dialog enter a *short* path such as
97+
`C:\xa-sdk`. This is necessary because some of the contained filenames are
98+
quite long. This will result in a path such as:
99+
100+
C:\xa-sdk\oss-xamarin.android_v7.4.99.57_Darwin-x86_64_master_97f08f7\bin\Debug\bin\setup-windows.exe
101+
102+
Once the `.zip` file has been extracted, please run the `setup-windows.exe`
103+
utility within the `bin\Debug` or `bin\Release` folders. If you have
104+
Visual Studio 2017 installed, this utility *must* be run within an
105+
Administrator-elevated **Developer Command Prompt for VS 2017** window:
106+
107+
1. In the Start menu, search for **Developer Command Prompt for VS 2017**.
108+
2. Right-click the **Developer Command Prompt for VS 2017** entry.
109+
3. Click **Run as administrator**.
110+
111+
Within the elevated command prompt, execute the `setup-windows.exe` program:
112+
113+
> C:\xa-sdk\oss-xamarin.android_v7.4.99.57_Darwin-x86_64_master_97f08f7\bin\Debug\bin\setup-windows.exe
114+
Executing: MKLINK /D "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\MonoAndroid" "C:\xa-sdk\oss-xamarin.android_v7.4.99.57_Darwin-x86_64_master_97f08f7\bin\Debug\lib\xamarin.android\xbuild-frameworks\MonoAndroid"
115+
Executing: MKLINK /D "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Xamarin\Android" "C:\xa-sdk\oss-xamarin.android_v7.4.99.57_Darwin-x86_64_master_97f08f7\bin\Debug\lib\xamarin.android\xbuild\Xamarin\Android"
116+
Success!
117+
118+
To uninstall, run `setup-windows.exe /uninstall`:
119+
120+
> C:\xa-sdk\oss-xamarin.android_v7.4.99.57_Darwin-x86_64_master_97f08f7\bin\Debug\bin\setup-windows.exe /uninstall
121+
122+
The `setup-windows.exe` utility checks for an existing Xamarin.Android install,
123+
renames the existing directories for backup/easy restoration purposes, then
124+
create symbolic links into the extracted Xamarin.Android directory.
125+
126+
(Unfortunately, this means that you can't easily have side-by-side installs
127+
of the Xamarin.Android SDK. Only one install can be active at a time.)
128+
129+
If Visual Studio 2017 isn't installed, it should be fine to right-click
130+
`setup-windows.exe` from within Windows Explorer, then click
131+
**Run as administrator**. (`setup-windows.exe` will *not* do the correct thing
132+
when Visual Studio 2017 is installed, as `%VSINSTALLDIR%` isn't properly
133+
set outside of the Developer Command Prompt for VS 2017, so the *global*
134+
`%ProgramFiles(x86)%\MSBuild\Xamarin\Android` directory is modified, not the
135+
per-SKU Visual Studio 2017 directory.)
136+
106137
# Using Jenkins Build Artifacts
107138

108139
## Command-line use: Linux and macOS
@@ -145,20 +176,11 @@ MSBuild properties:
145176
* `AndroidSdkDirectory`: The location of the Android SDK.
146177
* `AndroidNdkDirectory`: The location of the Android NDK.
147178
* `JavaSdkDirectory`: The location of the Java SDK/JDK.
148-
* `MonoAndroidBinDirectory`: The `xbuild\Xamarin\Android` directory in the
149-
`oss-xamarin.android*.zip` installation.
150-
* `MonoAndroidToolsDirectory`: The `xbuild\Xamarin\Android` directory in the
151-
`oss-xamarin.android*.zip` installation.
152-
* `TargetFrameworkRootPath`: The `xbuild-frameworks` directory in the
153-
`oss-xamarin.android*.zip` installation.
154179

155180
For example (using the paths from [Android SDK Setup](#Android_SDK_Setup)):
156181

157182
msbuild /p:AndroidSdkDirectory="C:\xa-sdk\android-sdk" ^
158183
/p:AndroidNdkDirectory="C:\xa-sdk\android-ndk\android-ndk-r14" ^
159-
/p:MonoAndroidBinDirectory="C:\xa-sdk\oss-xamarin.android_v7.2.99.19_Darwin-x86_64_master_3b893cd\bin\Debug\lib\xamarin.android\xbuild\Xamarin\Android" ^
160-
/p:MonoAndroidToolsDirectory="C:\xa-sdk\oss-xamarin.android_v7.2.99.19_Darwin-x86_64_master_3b893cd\bin\Debug\lib\xamarin.android\xbuild\Xamarin\Android" ^
161-
/p:TargetFrameworkRootPath="C:\xa-sdk\oss-xamarin.android_v7.2.99.19_Darwin-x86_64_master_3b893cd\bin\Debug\lib\xamarin.android\xbuild-frameworks" ^
162184
/t:SignAndroidPackage ^
163185
samples\HelloWorld\HelloWorld.csproj
164186

Xamarin.Android.sln

Lines changed: 33 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,6 @@ Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Xamarin.Android.NamingCusto
2929
EndProject
3030
Project("{D954291E-2A0B-460D-934E-DC6B0785DB48}") = "Java.Interop.Tools.TypeNameMappings", "external\Java.Interop\src\Java.Interop.Tools.TypeNameMappings\Java.Interop.Tools.TypeNameMappings.shproj", "{E706B6F2-5562-4765-8F07-8CF84A797B30}"
3131
EndProject
32-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Android", "src\Mono.Android\Mono.Android.csproj", "{66CF299A-CE95-4131-BCD8-DB66E30C4BF7}"
33-
EndProject
34-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Mono.Android.Export", "src\Mono.Android.Export\Mono.Android.Export.csproj", "{B8105878-D423-4159-A3E7-028298281EC6}"
35-
EndProject
3632
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Android.Tools.Aidl", "src\Xamarin.Android.Tools.Aidl\Xamarin.Android.Tools.Aidl.csproj", "{D27AD8F7-7710-40BE-B03B-55EFBEC13C44}"
3733
EndProject
3834
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Xamarin.Android.Build.Tasks", "src\Xamarin.Android.Build.Tasks\Xamarin.Android.Build.Tasks.csproj", "{3F1F2F50-AF1A-4A5A-BEDB-193372F068D7}"
@@ -111,6 +107,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "create-vsix", "build-tools\
111107
EndProject
112108
Project("{9344BDBB-3E7F-41FC-A0DD-8665D75EE146}") = "netstandard", "src\netstandard\netstandard.mdproj", "{93614CB8-4564-43B9-93B0-4AF4B3B16AAE}"
113109
EndProject
110+
Project("{9344BDBB-3E7F-41FC-A0DD-8665D75EE146}") = "Mono.Android", "src\Mono.Android\Mono.Android.csproj", "{8B10353F-2D58-41D4-BB26-E75218A4A800}"
111+
EndProject
112+
Project("{9344BDBB-3E7F-41FC-A0DD-8665D75EE146}") = "Mono.Android.Export", "src\Mono.Android.Export\Mono.Android.Export.csproj", "{C31712E0-CFB1-47E5-855B-D0B59979F7B0}"
113+
EndProject
114+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "setup-windows", "tools\setup-windows\setup-windows.csproj", "{73DF9E10-E933-4222-B8E1-F4536FFF9FAD}"
115+
EndProject
114116
Global
115117
GlobalSection(SolutionConfigurationPlatforms) = preSolution
116118
Debug|AnyCPU = Debug|AnyCPU
@@ -135,14 +137,6 @@ Global
135137
{3FC3E78B-F7D4-42EA-BBE8-4535DF42BFF8}.XAIntegrationDebug|Any CPU.Build.0 = Debug|Any CPU
136138
{3FC3E78B-F7D4-42EA-BBE8-4535DF42BFF8}.XAIntegrationRelease|Any CPU.ActiveCfg = Debug|An yCPU
137139
{3FC3E78B-F7D4-42EA-BBE8-4535DF42BFF8}.XAIntegrationRelease|Any CPU.Build.0 = Debug|An yCPU
138-
{66CF299A-CE95-4131-BCD8-DB66E30C4BF7}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
139-
{66CF299A-CE95-4131-BCD8-DB66E30C4BF7}.Debug|AnyCPU.Build.0 = Debug|Any CPU
140-
{66CF299A-CE95-4131-BCD8-DB66E30C4BF7}.Release|AnyCPU.ActiveCfg = Release|Any CPU
141-
{66CF299A-CE95-4131-BCD8-DB66E30C4BF7}.Release|AnyCPU.Build.0 = Release|Any CPU
142-
{66CF299A-CE95-4131-BCD8-DB66E30C4BF7}.XAIntegrationDebug|Any CPU.ActiveCfg = Debug|Any CPU
143-
{66CF299A-CE95-4131-BCD8-DB66E30C4BF7}.XAIntegrationDebug|Any CPU.Build.0 = Debug|Any CPU
144-
{66CF299A-CE95-4131-BCD8-DB66E30C4BF7}.XAIntegrationRelease|Any CPU.ActiveCfg = Debug|Any CPU
145-
{66CF299A-CE95-4131-BCD8-DB66E30C4BF7}.XAIntegrationRelease|Any CPU.Build.0 = Debug|Any CPU
146140
{8FF78EB6-6FC8-46A7-8A15-EBBA9045C5FA}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
147141
{8FF78EB6-6FC8-46A7-8A15-EBBA9045C5FA}.Debug|AnyCPU.Build.0 = Debug|Any CPU
148142
{8FF78EB6-6FC8-46A7-8A15-EBBA9045C5FA}.Release|AnyCPU.ActiveCfg = Release|Any CPU
@@ -181,14 +175,6 @@ Global
181175
{B17475BC-45A2-47A3-B8FC-62F3A0959EE0}.XAIntegrationDebug|Any CPU.Build.0 = Debug|Any CPU
182176
{B17475BC-45A2-47A3-B8FC-62F3A0959EE0}.XAIntegrationRelease|Any CPU.ActiveCfg = Debug|Any CPU
183177
{B17475BC-45A2-47A3-B8FC-62F3A0959EE0}.XAIntegrationRelease|Any CPU.Build.0 = Debug|Any CPU
184-
{B8105878-D423-4159-A3E7-028298281EC6}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
185-
{B8105878-D423-4159-A3E7-028298281EC6}.Debug|AnyCPU.Build.0 = Debug|Any CPU
186-
{B8105878-D423-4159-A3E7-028298281EC6}.Release|AnyCPU.ActiveCfg = Release|Any CPU
187-
{B8105878-D423-4159-A3E7-028298281EC6}.Release|AnyCPU.Build.0 = Release|Any CPU
188-
{B8105878-D423-4159-A3E7-028298281EC6}.XAIntegrationDebug|Any CPU.ActiveCfg = Debug|Any CPU
189-
{B8105878-D423-4159-A3E7-028298281EC6}.XAIntegrationDebug|Any CPU.Build.0 = Debug|Any CPU
190-
{B8105878-D423-4159-A3E7-028298281EC6}.XAIntegrationRelease|Any CPU.ActiveCfg = Debug|Any CPU
191-
{B8105878-D423-4159-A3E7-028298281EC6}.XAIntegrationRelease|Any CPU.Build.0 = Debug|Any CPU
192178
{53EE4C57-1C03-405A-8243-8DA539546C88}.XAIntegrationDebug|Any CPU.ActiveCfg = Debug|Any CPU
193179
{53EE4C57-1C03-405A-8243-8DA539546C88}.XAIntegrationRelease|Any CPU.ActiveCfg = Debug|Any CPU
194180
{53EE4C57-1C03-405A-8243-8DA539546C88}.Debug|AnyCPU.Build.0 = Debug|Any CPU
@@ -509,6 +495,30 @@ Global
509495
{93614CB8-4564-43B9-93B0-4AF4B3B16AAE}.XAIntegrationDebug|AnyCPU.Build.0 = Debug|Any CPU
510496
{93614CB8-4564-43B9-93B0-4AF4B3B16AAE}.XAIntegrationRelease|AnyCPU.ActiveCfg = Debug|Any CPU
511497
{93614CB8-4564-43B9-93B0-4AF4B3B16AAE}.XAIntegrationRelease|AnyCPU.Build.0 = Debug|Any CPU
498+
{8B10353F-2D58-41D4-BB26-E75218A4A800}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
499+
{8B10353F-2D58-41D4-BB26-E75218A4A800}.Debug|AnyCPU.Build.0 = Debug|Any CPU
500+
{8B10353F-2D58-41D4-BB26-E75218A4A800}.Release|AnyCPU.ActiveCfg = Release|Any CPU
501+
{8B10353F-2D58-41D4-BB26-E75218A4A800}.Release|AnyCPU.Build.0 = Release|Any CPU
502+
{8B10353F-2D58-41D4-BB26-E75218A4A800}.XAIntegrationDebug|Any CPU.ActiveCfg = Debug|Any CPU
503+
{8B10353F-2D58-41D4-BB26-E75218A4A800}.XAIntegrationDebug|Any CPU.Build.0 = Debug|Any CPU
504+
{8B10353F-2D58-41D4-BB26-E75218A4A800}.XAIntegrationRelease|Any CPU.ActiveCfg = Debug|Any CPU
505+
{8B10353F-2D58-41D4-BB26-E75218A4A800}.XAIntegrationRelease|Any CPU.Build.0 = Debug|Any CPU
506+
{C31712E0-CFB1-47E5-855B-D0B59979F7B0}.Debug|AnyCPU.ActiveCfg = Debug|Any CPU
507+
{C31712E0-CFB1-47E5-855B-D0B59979F7B0}.Debug|AnyCPU.Build.0 = Debug|Any CPU
508+
{C31712E0-CFB1-47E5-855B-D0B59979F7B0}.Release|AnyCPU.ActiveCfg = Release|Any CPU
509+
{C31712E0-CFB1-47E5-855B-D0B59979F7B0}.Release|AnyCPU.Build.0 = Release|Any CPU
510+
{C31712E0-CFB1-47E5-855B-D0B59979F7B0}.XAIntegrationDebug|Any CPU.ActiveCfg = Debug|Any CPU
511+
{C31712E0-CFB1-47E5-855B-D0B59979F7B0}.XAIntegrationDebug|Any CPU.Build.0 = Debug|Any CPU
512+
{C31712E0-CFB1-47E5-855B-D0B59979F7B0}.XAIntegrationRelease|Any CPU.ActiveCfg = Debug|Any CPU
513+
{C31712E0-CFB1-47E5-855B-D0B59979F7B0}.XAIntegrationRelease|Any CPU.Build.0 = Debug|Any CPU
514+
{73DF9E10-E933-4222-B8E1-F4536FFF9FAD}.Debug|AnyCPU.ActiveCfg = Debug|AnyCPU
515+
{73DF9E10-E933-4222-B8E1-F4536FFF9FAD}.Debug|AnyCPU.Build.0 = Debug|AnyCPU
516+
{73DF9E10-E933-4222-B8E1-F4536FFF9FAD}.Release|AnyCPU.ActiveCfg = Release|AnyCPU
517+
{73DF9E10-E933-4222-B8E1-F4536FFF9FAD}.Release|AnyCPU.Build.0 = Release|AnyCPU
518+
{73DF9E10-E933-4222-B8E1-F4536FFF9FAD}.XAIntegrationDebug|AnyCPU.ActiveCfg = Debug|AnyCPU
519+
{73DF9E10-E933-4222-B8E1-F4536FFF9FAD}.XAIntegrationDebug|AnyCPU.Build.0 = Debug|AnyCPU
520+
{73DF9E10-E933-4222-B8E1-F4536FFF9FAD}.XAIntegrationRelease|AnyCPU.ActiveCfg = Release|AnyCPU
521+
{73DF9E10-E933-4222-B8E1-F4536FFF9FAD}.XAIntegrationRelease|AnyCPU.Build.0 = Release|AnyCPU
512522
EndGlobalSection
513523
GlobalSection(NestedProjects) = preSolution
514524
{8FF78EB6-6FC8-46A7-8A15-EBBA9045C5FA} = {E351F97D-EA4F-4E7F-AAA0-8EBB1F2A4A62}
@@ -521,8 +531,6 @@ Global
521531
{FE789F04-5E95-42C5-AEF1-E33F8DF06B3F} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
522532
{74598F5C-B8CC-4CE6-8EE2-AB9CA1400076} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
523533
{E706B6F2-5562-4765-8F07-8CF84A797B30} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
524-
{66CF299A-CE95-4131-BCD8-DB66E30C4BF7} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
525-
{B8105878-D423-4159-A3E7-028298281EC6} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
526534
{D27AD8F7-7710-40BE-B03B-55EFBEC13C44} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
527535
{3F1F2F50-AF1A-4A5A-BEDB-193372F068D7} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
528536
{91713046-C358-4647-B162-ED4E1442F3D8} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
@@ -562,11 +570,12 @@ Global
562570
{BD1D66BF-5AC7-4926-8EBE-B2198A112EB0} = {CAB438D8-B0F5-4AF0-BEBD-9E2ADBD7B483}
563571
{94756FEB-1F64-411D-A18E-81B5158F776A} = {E351F97D-EA4F-4E7F-AAA0-8EBB1F2A4A62}
564572
{93614CB8-4564-43B9-93B0-4AF4B3B16AAE} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
573+
{8B10353F-2D58-41D4-BB26-E75218A4A800} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
574+
{C31712E0-CFB1-47E5-855B-D0B59979F7B0} = {04E3E11E-B47D-4599-8AFC-50515A95E715}
575+
{73DF9E10-E933-4222-B8E1-F4536FFF9FAD} = {864062D3-A415-4A6F-9324-5820237BA058}
565576
EndGlobalSection
566577
GlobalSection(MonoDevelopProperties) = preSolution
567578
Policies = $0
568579
$0.DotNetNamingPolicy = $1
569-
$1.DirectoryNamespaceAssociation = None
570-
$1.ResourceNamePolicy = FileFormatDefault
571580
EndGlobalSection
572581
EndGlobal
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
using System.Reflection;
2+
using System.Runtime.CompilerServices;
3+
4+
// Information about this assembly is defined by the following attributes.
5+
// Change them to the values specific to your project.
6+
7+
[assembly: AssemblyTitle ("setup-windows")]
8+
[assembly: AssemblyDescription ("")]
9+
[assembly: AssemblyConfiguration ("")]
10+
[assembly: AssemblyCompany ("Microsoft Corporation")]
11+
[assembly: AssemblyProduct ("")]
12+
[assembly: AssemblyCopyright ("")]
13+
[assembly: AssemblyTrademark ("")]
14+
[assembly: AssemblyCulture ("")]
15+
16+
// The assembly version has the format "{Major}.{Minor}.{Build}.{Revision}".
17+
// The form "{Major}.{Minor}.*" will automatically update the build and revision,
18+
// and "{Major}.{Minor}.{Build}.*" will update just the revision.
19+
20+
[assembly: AssemblyVersion ("1.0.*")]
21+
22+
// The following attributes are used to specify the signing key for the assembly,
23+
// if desired. See the Mono documentation for more information about signing.
24+
25+
//[assembly: AssemblyDelaySign(false)]
26+
//[assembly: AssemblyKeyFile("")]

0 commit comments

Comments
 (0)