From 420fa16e0a32081dc50f9974cc587169f66c4869 Mon Sep 17 00:00:00 2001 From: Danilo Del Busso Date: Thu, 13 Oct 2022 12:38:48 +0000 Subject: [PATCH 1/8] CP-40404: Add C# NuGet specs in its csproj This edits the project file so that a NuGet package is generated at build time. To achieve this this also: - Adds an icon for the NuGet package - Adds a stripped down version of the `README` (`README-NuGet`) that is shown when the package is viewed through a NuGet package manager. The `README` outputs as a Markdown file because it is a requirement. NuGet.org-like managers are smart enough to read the current format properly, without actually using Markdown syntax. - Modify `windows-line-endsings.sh` so that it doesn't corrupt the package icon. - Updated references of Citrix Hypervisor in the README back to XenServer. Citrix references are still present. In fact, they're also present in other SDKs (see Java for instance) Signed-off-by: Danilo Del Busso --- ocaml/sdk-gen/csharp/README-NuGet.dist | 53 ++++++++++++++++++ ocaml/sdk-gen/csharp/README.dist | 17 +++--- ocaml/sdk-gen/csharp/autogen/dune | 9 +++ .../csharp/autogen/src/packageIcon.png | Bin 0 -> 27482 bytes .../templates/XenServer.csproj.mustache | 21 +++++++ ocaml/sdk-gen/windows-line-endings.sh | 2 +- 6 files changed, 93 insertions(+), 9 deletions(-) create mode 100644 ocaml/sdk-gen/csharp/README-NuGet.dist create mode 100644 ocaml/sdk-gen/csharp/autogen/src/packageIcon.png diff --git a/ocaml/sdk-gen/csharp/README-NuGet.dist b/ocaml/sdk-gen/csharp/README-NuGet.dist new file mode 100644 index 00000000000..68351b5aaeb --- /dev/null +++ b/ocaml/sdk-gen/csharp/README-NuGet.dist @@ -0,0 +1,53 @@ +XenServer.NET +============= + +XenServer.NET is a complete SDK for XenServer, exposing the XenServer API +as .NET classes. It is written in C#. + +XenServer.NET includes a class for every API class, and a method for each API +call, so API documentation and examples written for other languages will apply +equally well to .NET. In particular, the SDK Guide and the Management API Guide +are ideal for developers wishing to use XenServer.NET. + +XenServer.NET is free software. You can redistribute and modify it under the +terms of the BSD 2-Clause license. See LICENSE.txt for details. + +This library is accompanied by pedagogical examples. These do not form +part of this library, and are licensed for redistribution and modification +under the BSD 2-Clause license. + + +Reference +--------- + +For XenServer documentation see https://docs.citrix.com/en-us/citrix-hypervisor/ + +The XenServer Management API Reference is available at +https://developer-docs.citrix.com/projects/citrix-hypervisor-management-api/en/latest/ + +The XenServer Software Development Kit Guide is available at +https://developer-docs.citrix.com/projects/citrix-hypervisor-sdk/en/latest/ + +For community content, blogs, and downloads, visit +https://www.citrix.com/community/citrix-developer/ + +To network with other developers using XenServer visit +https://discussions.citrix.com/forum/101-hypervisor-formerly-xenserver/ + + +Prerequisites +------------- + +This library requires .NET Standard 2.0. + + +Dependencies +------------ + +XenServer.NET is dependent upon the following libraries: + +- Newtonsoft JSON.NET by James Newton-King (see https://www.newtonsoft.com/). + JSON.NET is licensed under the MIT license; see LICENSE.Newtonsoft.Json.txt + for details. A patched version of the library (Newtonsoft.Json.CH.dll) is + shipped with XenServer.NET. Its source code and license file can be found in + https://github.com/xenserver/dotnet-packages. diff --git a/ocaml/sdk-gen/csharp/README.dist b/ocaml/sdk-gen/csharp/README.dist index a35e923565d..9614d75f5f2 100644 --- a/ocaml/sdk-gen/csharp/README.dist +++ b/ocaml/sdk-gen/csharp/README.dist @@ -1,8 +1,8 @@ XenServer.NET ============= -XenServer.NET is a complete SDK for Citrix Hypervisor, exposing the Citrix -Hypervisor API as .NET classes. It is written in C#. +XenServer.NET is a complete SDK for XenServer, exposing the XenServer +API as .NET classes. It is written in C#. XenServer.NET includes a class for every API class, and a method for each API call, so API documentation and examples written for other languages will apply @@ -20,18 +20,18 @@ under the BSD 2-Clause license. Reference --------- -For Citrix Hypervisor documentation see https://docs.citrix.com/en-us/citrix-hypervisor/ +For XenServer documentation see https://docs.citrix.com/en-us/citrix-hypervisor/ -The Citrix Hypervisor Management API Reference is available at +The XenServer Management API Reference is available at https://developer-docs.citrix.com/projects/citrix-hypervisor-management-api/en/latest/ -The Citrix Hypervisor Software Development Kit Guide is available at +The XenServer Software Development Kit Guide is available at https://developer-docs.citrix.com/projects/citrix-hypervisor-sdk/en/latest/ For community content, blogs, and downloads, visit https://www.citrix.com/community/citrix-developer/ -To network with other developers using Citrix Hypervisor visit +To network with other developers using XenServer visit https://discussions.citrix.com/forum/101-hypervisor-formerly-xenserver/ @@ -49,7 +49,8 @@ XenServer.NET is dependent upon the following libraries: - Newtonsoft JSON.NET by James Newton-King (see https://www.newtonsoft.com/). JSON.NET is licensed under the MIT license; see LICENSE.Newtonsoft.Json.txt for details. A patched version of the library (Newtonsoft.Json.CH.dll) is - shipped with XenServer.NET. + shipped with XenServer.NET. Its source code and license file can be found in + https://github.com/xenserver/dotnet-packages. Downloads @@ -74,7 +75,7 @@ A. To use the compiled binaries in your code: 3. You should now be ready to compile against XenServer.NET. B. To build the source code: - 1. Copy Newtonsoft.Json.CH.dll from the bin + 1. Copy Newtonsoft.Json.CH.dll and LICENSE.Newtonsoft.Json.txt from the bin folder into the source code folder at the same level as the project file XenServer.csproj 2. Open the project XenServer.csproj in Visual Studio. diff --git a/ocaml/sdk-gen/csharp/autogen/dune b/ocaml/sdk-gen/csharp/autogen/dune index 2a844e6a44a..e65414c7297 100644 --- a/ocaml/sdk-gen/csharp/autogen/dune +++ b/ocaml/sdk-gen/csharp/autogen/dune @@ -14,11 +14,20 @@ (action (copy %{deps} %{targets})) ) +(rule + (targets README-NuGet.md) + (deps + ../README-NuGet.dist + ) + (action (copy %{deps} %{targets})) +) + (alias (name generate) (deps LICENSE.txt README.txt + README-NuGet.md (source_tree .) ) ) diff --git a/ocaml/sdk-gen/csharp/autogen/src/packageIcon.png b/ocaml/sdk-gen/csharp/autogen/src/packageIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..31e4706202d089a1fb1acb57d3276a7ac7e9cf57 GIT binary patch literal 27482 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≫#s59cP4 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 literal 0 HcmV?d00001 diff --git a/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache b/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache index 53d0e23c374..557c0957625 100644 --- a/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache +++ b/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache @@ -1,10 +1,31 @@  + @SDK_VERSION@ netstandard2.0 Library XenAPI false + True + XenServer.NET + Citrix Systems, Inc. + $(AssemblyName).NET + $(AssemblyName).NET + .NET wrapper for the XenServer API + Copyright (c) Citrix Systems, Inc. All rights reserved. + citrix hypervisor virtualization sdk jsonrpc .net c# xen xenserver + BSD-2-Clause + https://github.com/xapi-project/xen-api + packageIcon.png + git + README-NuGet.md + + + + + + + true diff --git a/ocaml/sdk-gen/windows-line-endings.sh b/ocaml/sdk-gen/windows-line-endings.sh index 1b0c3629181..2c5703cc2d0 100644 --- a/ocaml/sdk-gen/windows-line-endings.sh +++ b/ocaml/sdk-gen/windows-line-endings.sh @@ -30,7 +30,7 @@ DIR_TO_FLIP=$1 -for file in `find ${DIR_TO_FLIP} -type f` +for file in `find ${DIR_TO_FLIP} -type f ! -name '*.png'` do sed -i -e 's,\r,,g' $file sed -i -e 's,$,\r,g' $file From 7b51a2c7b89cfa646d7f639b74e217e2e609757a Mon Sep 17 00:00:00 2001 From: Danilo Del Busso Date: Thu, 13 Oct 2022 12:39:49 +0000 Subject: [PATCH 2/8] CP-40404: Move C# SDK samples to .NET 6.0 Project wouldn't build otherwise Signed-off-by: Danilo Del Busso --- .../autogen/samples/XenSdkSample.csproj | 71 +------------------ 1 file changed, 3 insertions(+), 68 deletions(-) diff --git a/ocaml/sdk-gen/csharp/autogen/samples/XenSdkSample.csproj b/ocaml/sdk-gen/csharp/autogen/samples/XenSdkSample.csproj index 8a8b965e9ef..f6b259b787c 100644 --- a/ocaml/sdk-gen/csharp/autogen/samples/XenSdkSample.csproj +++ b/ocaml/sdk-gen/csharp/autogen/samples/XenSdkSample.csproj @@ -1,22 +1,7 @@ - - + - Debug - AnyCPU - 8.0.50727 - 2.0 - {869DC514-BCC0-42D7-BFA7-077005B23107} + net6.0 Exe - Properties - XenSdkSample - XenSdkSample - v4.5 - - - - - 2.0 - false publish\ true @@ -32,65 +17,15 @@ 1.0.0.%2a false true - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + false - False .\Newtonsoft.Json.CH.dll - - - .\XenServer.dll - - - - - - - - - - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 3.5 SP1 - true - - - - \ No newline at end of file From c5ebeb8ead8a8aabd0f5d856287cb2fa0fe43234 Mon Sep 17 00:00:00 2001 From: Danilo Del Busso Date: Thu, 17 Nov 2022 15:09:56 +0000 Subject: [PATCH 3/8] CP-40404: Do not specify assembly info in `AssemblyInfo.cs` This allows the MSBuild CLI to specify assembly version at build time Signed-off-by: Danilo Del Busso --- .../autogen/src/Properties/AssemblyInfo.cs | 68 ------------------- .../templates/XenServer.csproj.mustache | 4 +- 2 files changed, 2 insertions(+), 70 deletions(-) delete mode 100644 ocaml/sdk-gen/csharp/autogen/src/Properties/AssemblyInfo.cs diff --git a/ocaml/sdk-gen/csharp/autogen/src/Properties/AssemblyInfo.cs b/ocaml/sdk-gen/csharp/autogen/src/Properties/AssemblyInfo.cs deleted file mode 100644 index 6c33ec4169a..00000000000 --- a/ocaml/sdk-gen/csharp/autogen/src/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright (c) Citrix Systems, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1) Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System; -using System.Reflection; -using System.Runtime.CompilerServices; -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("XenServer.NET")] -[assembly: AssemblyDescription("Citrix XenServer C#.NET SDK")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Citrix Systems, Inc.")] -[assembly: AssemblyProduct("XenServer.NET")] -[assembly: AssemblyCopyright("Copyright © Citrix Systems, Inc.")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] -[assembly: CLSCompliant(true)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("5bac14b7-3480-4ce7-b787-2782bd506de8")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyInformationalVersion("1.0.0.0")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache b/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache index 557c0957625..3bc8862864d 100644 --- a/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache +++ b/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache @@ -1,10 +1,10 @@  - @SDK_VERSION@ + 0.0.0 netstandard2.0 Library XenAPI - false + True True XenServer.NET Citrix Systems, Inc. From ec1517f7a9827ac5731fb6e258f058c0aac41557 Mon Sep 17 00:00:00 2001 From: Danilo Del Busso Date: Mon, 21 Nov 2022 09:21:10 +0000 Subject: [PATCH 4/8] CP-40404: Build C# SDK to .NET Framework 4.5 Signed-off-by: Danilo Del Busso --- .../csharp/templates/XenServer.csproj.mustache | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache b/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache index 3bc8862864d..ae548a3798f 100644 --- a/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache +++ b/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache @@ -1,7 +1,7 @@  0.0.0 - netstandard2.0 + netstandard2.0;net45 Library XenAPI True @@ -20,7 +20,8 @@ README-NuGet.md - + + @@ -29,10 +30,16 @@ true - + + + False + .\lib\netstandard2.0\Newtonsoft.Json.CH.dll + + + False - .\Newtonsoft.Json.CH.dll + .\lib\net45\Newtonsoft.Json.CH.dll From 45280bef1b77d8165b3064246febf184e47bc2f1 Mon Sep 17 00:00:00 2001 From: Danilo Del Busso Date: Thu, 24 Nov 2022 15:08:02 +0000 Subject: [PATCH 5/8] CP-40404: Replace deprecated module manifest member with `RootModule` `ModuleToProcess` has been deprecated Signed-off-by: Danilo Del Busso --- ocaml/sdk-gen/powershell/autogen/XenServerPSModule.psd1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ocaml/sdk-gen/powershell/autogen/XenServerPSModule.psd1 b/ocaml/sdk-gen/powershell/autogen/XenServerPSModule.psd1 index 62b3079b22a..90950901306 100644 --- a/ocaml/sdk-gen/powershell/autogen/XenServerPSModule.psd1 +++ b/ocaml/sdk-gen/powershell/autogen/XenServerPSModule.psd1 @@ -47,7 +47,7 @@ PowerShellHostVersion = '' ProcessorArchitecture = 'None' #Contents -ModuleToProcess = 'XenServerPowerShell.dll' +RootModule = 'XenServerPowerShell.dll' RequiredModules = @() NestedModules = @() RequiredAssemblies = @('Newtonsoft.Json.CH.dll', From 4256e1667227aae885ce16aa3a4383b47d71953a Mon Sep 17 00:00:00 2001 From: Danilo Del Busso Date: Thu, 24 Nov 2022 16:00:25 +0000 Subject: [PATCH 6/8] Fix missing `Reference` value in PS SDK cmdlets output Signed-off-by: Danilo Del Busso --- ocaml/sdk-gen/powershell/autogen/XenServer.format.ps1xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ocaml/sdk-gen/powershell/autogen/XenServer.format.ps1xml b/ocaml/sdk-gen/powershell/autogen/XenServer.format.ps1xml index d20e637f757..5cf6f993e1a 100644 --- a/ocaml/sdk-gen/powershell/autogen/XenServer.format.ps1xml +++ b/ocaml/sdk-gen/powershell/autogen/XenServer.format.ps1xml @@ -44,7 +44,7 @@ - uuid + opaque_ref From 6e48fb94ad93d4b3ee92d0a69a5db9dad07638a6 Mon Sep 17 00:00:00 2001 From: Danilo Del Busso Date: Tue, 29 Nov 2022 10:22:18 +0000 Subject: [PATCH 7/8] CP-40404: Do not specify PS SDK assembly info in `AssemblyInfo.cs` Also fix some whitespace Signed-off-by: Danilo Del Busso --- .../templates/XenServer.csproj.mustache | 2 +- .../autogen/src/Properties/AssemblyInfo.cs | 66 ------------------- .../XenServerPowerShell.csproj.mustache | 5 +- 3 files changed, 4 insertions(+), 69 deletions(-) delete mode 100644 ocaml/sdk-gen/powershell/autogen/src/Properties/AssemblyInfo.cs diff --git a/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache b/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache index ae548a3798f..e573b5fa215 100644 --- a/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache +++ b/ocaml/sdk-gen/csharp/templates/XenServer.csproj.mustache @@ -17,7 +17,7 @@ https://github.com/xapi-project/xen-api packageIcon.png git - README-NuGet.md + README-NuGet.md diff --git a/ocaml/sdk-gen/powershell/autogen/src/Properties/AssemblyInfo.cs b/ocaml/sdk-gen/powershell/autogen/src/Properties/AssemblyInfo.cs deleted file mode 100644 index 12ee4750d2d..00000000000 --- a/ocaml/sdk-gen/powershell/autogen/src/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,66 +0,0 @@ -/* - * Copyright (c) Citrix Systems, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1) Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * 2) Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS - * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -using System.Reflection; -using System.Runtime.CompilerServices; -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("XenServerPowerShell")] -[assembly: AssemblyDescription("Citrix XenServer PowerShell Module")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Citrix Systems, Inc.")] -[assembly: AssemblyProduct("XenServerPowerShell")] -[assembly: AssemblyCopyright("Copyright © Citrix Systems, Inc.")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("723a56c5-53ab-40b0-90b2-02fd87a3b201")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Revision and Build Numbers -// by using the '*' as shown below: -[assembly: AssemblyInformationalVersion("1.0.0.0")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/ocaml/sdk-gen/powershell/templates/XenServerPowerShell.csproj.mustache b/ocaml/sdk-gen/powershell/templates/XenServerPowerShell.csproj.mustache index 1646c9bb4a3..cf7d8074d83 100644 --- a/ocaml/sdk-gen/powershell/templates/XenServerPowerShell.csproj.mustache +++ b/ocaml/sdk-gen/powershell/templates/XenServerPowerShell.csproj.mustache @@ -1,11 +1,12 @@ + 0.0.0 net6.0 Library - false + True - true + True Program C:\Program Files\PowerShell\7\pwsh.exe -NoLogo -NoExit -Command "Import-Module '.\XenServerPowerShell.dll'" From 4d21f7359cb3394339c843dd622ab91c73ef3692 Mon Sep 17 00:00:00 2001 From: Danilo Del Busso Date: Tue, 29 Nov 2022 10:44:13 +0000 Subject: [PATCH 8/8] CP-40404: Update Powershell and C# SDK READMEs Signed-off-by: Danilo Del Busso --- ocaml/sdk-gen/csharp/README-NuGet.dist | 4 +- ocaml/sdk-gen/csharp/README.dist | 33 ++++++++-------- ocaml/sdk-gen/powershell/README.dist | 54 +++++++++++--------------- 3 files changed, 42 insertions(+), 49 deletions(-) diff --git a/ocaml/sdk-gen/csharp/README-NuGet.dist b/ocaml/sdk-gen/csharp/README-NuGet.dist index 68351b5aaeb..66b6fa92b2c 100644 --- a/ocaml/sdk-gen/csharp/README-NuGet.dist +++ b/ocaml/sdk-gen/csharp/README-NuGet.dist @@ -1,8 +1,8 @@ XenServer.NET ============= -XenServer.NET is a complete SDK for XenServer, exposing the XenServer API -as .NET classes. It is written in C#. +XenServer.NET is a complete SDK for XenServer, exposing the XenServer +API as .NET classes. It is written in C#. XenServer.NET includes a class for every API class, and a method for each API call, so API documentation and examples written for other languages will apply diff --git a/ocaml/sdk-gen/csharp/README.dist b/ocaml/sdk-gen/csharp/README.dist index 9614d75f5f2..b83d6c43f2d 100644 --- a/ocaml/sdk-gen/csharp/README.dist +++ b/ocaml/sdk-gen/csharp/README.dist @@ -57,7 +57,7 @@ Downloads --------- This archive contains the following folders that are relevant to .NET developers: -- XenServer.NET\bin: contains the ready compiled binaries +- XenServer.NET: contains the ready compiled binaries in the form of a NuGet package. - XenServer.NET\src: contains the source code shipped as a Visual Studio project. - XenServer.NET\samples: contains the examples shipped as a Visual studio solution. @@ -67,24 +67,25 @@ Getting Started Extract the contents of this archive. -A. To use the compiled binaries in your code: - 1. Copy XenServer.dll and Newtonsoft.Json.CH.dll - from the bin folder into your own workspace. - 2. In Visual Studio, add references to all DLLs from your own program. - Project > Add Reference > Browse. - 3. You should now be ready to compile against XenServer.NET. +A. To build the source code: + 1. Open the project XenServer.csproj in Visual Studio. + 2. You should now be ready to build the source code. -B. To build the source code: - 1. Copy Newtonsoft.Json.CH.dll and LICENSE.Newtonsoft.Json.txt from the bin - folder into the source code folder at the same level as the project file - XenServer.csproj - 2. Open the project XenServer.csproj in Visual Studio. - 3. You should now be ready to build the source code. +B. To use the NuGet package in your code (offline): + 1. Add the location of the package as a NuGet source: + + ```pwsh + nuget sources Add -Name "Offline Package" -Source "/full/path/to/package/directory" + ``` + + 2. Install the package + + ```pwsh + nuget install XenServer.NET + ``` C. To run the examples: - 1. Copy XenServer.dll and Newtonsoft.Json.CH.dll - from the bin folder into the samples folder at the same level as the - project file XenSdkSample.csproj. + 1. Follow steps B.1 and B.2 2. Open XenSdkSample.sln inside Visual Studio (2019 or greater). 3. You should now be ready to compile the solution and run the examples. The solution project is a console application expecting the parameters diff --git a/ocaml/sdk-gen/powershell/README.dist b/ocaml/sdk-gen/powershell/README.dist index a2c173addc1..d3e76543877 100644 --- a/ocaml/sdk-gen/powershell/README.dist +++ b/ocaml/sdk-gen/powershell/README.dist @@ -1,10 +1,10 @@ -Citrix Hypervisor PowerShell Module +XenServer PowerShell Module =================================== -The Citrix Hypervisor PowerShell Module is a complete SDK for Citrix Hypervisor, -exposing the Citrix Hypervisor API as Windows PowerShell cmdlets. +The XenServer PowerShell Module is a complete SDK for XenServer, +exposing the XenServer API as Windows PowerShell cmdlets. -The Citrix Hypervisor PowerShell Module includes a cmdlet for each API call, +The XenServer PowerShell Module includes a cmdlet for each API call, so API documentation and examples written for other languages will apply equally well to PowerShell. In particular, the SDK Guide and the Management API Guide are ideal for developers wishing to use this module. @@ -20,18 +20,18 @@ under the BSD 2-Clause license. Reference --------- -For Citrix Hypervisor documentation see https://docs.citrix.com/en-us/citrix-hypervisor/ +For XenServer documentation see https://docs.citrix.com/en-us/citrix-hypervisor/ -The Citrix Hypervisor Management API Reference is available at +The XenServer Management API Reference is available at https://developer-docs.citrix.com/projects/citrix-hypervisor-management-api/en/latest/ -The Citrix Hypervisor Software Development Kit Guide is available at +The XenServer Software Development Kit Guide is available at https://developer-docs.citrix.com/projects/citrix-hypervisor-sdk/en/latest/ For community content, blogs, and downloads, visit https://www.citrix.com/community/citrix-developer/ -To network with other developers using Citrix Hypervisor visit +To network with other developers using XenServer visit https://discussions.citrix.com/forum/101-hypervisor-formerly-xenserver/ @@ -44,12 +44,16 @@ This library requires .NET 6.0 and PowerShell 7.2. Dependencies ------------ -The Citrix Hypervisor PowerShell Module is dependent upon the following libraries: +The XenServer PowerShell Module is dependent upon the following libraries: - Newtonsoft JSON.NET by James Newton-King (see https://www.newtonsoft.com/). JSON.NET is licensed under the MIT license; see LICENSE.Newtonsoft.Json.txt for details. A patched version of the library (Newtonsoft.Json.CH.dll) is - shipped with the Citrix Hypervisor PowerShell Module. + shipped with the XenServer PowerShell Module. + +- XenServer.NET by Citrix Systems, Inc. + XenServer.NET is a complete SDK for XenServer, exposing the XenServer + API as .NET classes. It is written in C#. Folder Structure @@ -57,9 +61,9 @@ Folder Structure This archive contains the following folders that are relevant to PowerShell users: -- XenServerPowerShell\XenServerPSModule: this is the Citrix Hypervisor PowerShell +- XenServerPowerShell\XenServerPSModule: this is the XenServer PowerShell Module -- XenServerPowerShell\src: contains the C# source code for the Citrix Hypervisor +- XenServerPowerShell\src: contains the C# source code for the XenServer cmdlets shipped as a Visual Studio project. - XenServerPowerShell\samples: contains the sample scripts accompanying the module. @@ -69,14 +73,6 @@ Getting Started 1. Unzip the contents of this archive. - Note that, if you have downloaded this zip file using Internet Explorer, it - is likely that it will have been marked as "blocked" during the download. To - import the module successfully you will need to unblock this zip file before - unzipping it. - - To unblock the zip file, right-click on it and launch the Properties dialog. - Click the "Unblock" button, then the Apply or OK button. - 2. Navigate to the extracted XenServer\XenServerPowerShell directory and copy the whole folder XenServerPSModule into your PowerShell modules directory, which will normally be $env:UserProfile\Documents\WindowsPowerShell\Modules @@ -105,21 +101,21 @@ Getting Started inconvenient. You probably want to change it to RemoteSigned, as above. If the current policy is Unrestricted or RemoteSigned, it is compatible with - the Citrix Hypervisor PowerShell Module, so there is nothing to do. + the XenServer PowerShell Module, so there is nothing to do. 5. Exit the privileged instance of PowerShell. 6. Open a PowerShell prompt as a regular user (click Start > Windows PowerShell) - and import the Citrix Hypervisor PowerShell Module: + and import the XenServer PowerShell Module: PS> Import-Module XenServerPSModule -7. If you wish to load specific environment settings when the Citrix Hypervisor +7. If you wish to load specific environment settings when the XenServer PowerShell Module is loaded, create the file XenServerProfile.ps1 and put it in $env:UserProfile\Documents\WindowsPowerShell for per-user configuration or $env:windir\system32\WindowsPowerShell\v1.0 for system-wide configuration. -8. For an overview of the Citrix Hypervisor PowerShell Module type: +8. For an overview of the XenServer PowerShell Module type: PS> Get-Help about_XenServer @@ -141,15 +137,11 @@ Getting Started Building and Debugging the Source Code -------------------------------------- -1. Copy Newtonsoft.Json.CH.dll and XenServer.dll from the XenServerPSModule - folder into the source code folder at the same level as the project - file XenServerPowerShell.csproj. - -2. Open the project XenServerPowerShell.csproj in Visual Studio (2013 or greater). +1. Open the project XenServerPowerShell.csproj in Visual Studio (2019 or greater). -3. You should now be ready to build the source code. +2. You should now be ready to build the source code. -4. If in Debug mode, clicking Start will launch a PowerShell prompt as an +3. If in Debug mode, clicking Start will launch a PowerShell prompt as an external process, and import the compiled XenServerPowerShell.dll as a module (without, however, processing the scripts, types, and formats shipped within the XenServerPSModule). You should now be ready to debug the cmdlets.