From 2ebe8d992930134fc54c13636eb80480af6879e9 Mon Sep 17 00:00:00 2001 From: Fabrice Foray Date: Wed, 4 Feb 2026 22:31:23 +0100 Subject: [PATCH 01/17] Update Offline Packages management When adding XSharp Offline Packages in nuget.config, we must specify a * pattern to nuget.org unless we will break the nuget.org queries --- src/Runtime/Nuget/XSAddNugetSource.prgx | 31 ++++++++++++++++--------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/src/Runtime/Nuget/XSAddNugetSource.prgx b/src/Runtime/Nuget/XSAddNugetSource.prgx index e68873d13d..012c136bca 100644 --- a/src/Runtime/Nuget/XSAddNugetSource.prgx +++ b/src/Runtime/Nuget/XSAddNugetSource.prgx @@ -4,55 +4,64 @@ using System using System.IO using System.Xml.Linq -// +// Looking for AppData\Roaming Folder VAR appDataRoamingPath := Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) VAR nugetConfigPath := Path.Combine(appDataRoamingPath, "NuGet\\nuget.config") VAR xsharpOffLine := "XSharp Offline Packages" VAR sourceUrl := GetXSharpInstallationPath() sourceUrl := Path.Combine(sourceUrl, "NuGet") - +// Load/Create the nuget.config file local doc as XDocument IF !File.Exists(nugetConfigPath) doc := XDocument{XElement{"configuration"}} ELSE doc := XDocument.Load(nugetConfigPath) endif - +// Search in the XML File VAR configElement := doc:Element("configuration") VAR packageSources := configElement:Element("packageSources") - if packageSources == null packageSources := XElement{"packageSources"} configElement:Add(packageSources) endif +// Search "XSharp Offline Packages" +GetSetPackageSource( packageSources, xsharpOffLine, sourceUrl ) +// Get the SourceMapping to "XSharp Offline Packages" ? +GetSetSourceMapping( configElement, xsharpOffLine, "XSharp.*" ) +// We MUST check that we also have a pattern of Nuget.org +GetSetSourceMapping( configElement, "nuget.org", "*" ) +doc:Save(nugetConfigPath) + +FUNCTION GetSetPackageSource( packageSources AS XElement, source AS STRING, sourceUrl AS STRING ) AS VOID VAR found := false foreach elt as XElement in packageSources:Elements("add") - if elt:Attribute("key")?:Value == xsharpOffLine + if elt:Attribute("key")?:Value == source found := true exit endif next if !found - packageSources:Add(XElement{"add", XAttribute{"key", xsharpOffLine}, XAttribute{"value", sourceUrl}}) + packageSources:Add(XElement{"add", XAttribute{"key", source}, XAttribute{"value", sourceUrl}}) endif -// + + +FUNCTION GetSetSourceMapping( configElement AS XElement, source AS STRING, pattern AS STRING ) AS VOID VAR packageSourceMapping := configElement:Element("packageSourceMapping") if packageSourceMapping == null packageSourceMapping := XElement{"packageSourceMapping"} configElement:Add(packageSourceMapping) endif -found := false +VAR found := false foreach elt as XElement in packageSourceMapping:Elements() - if elt:Attribute("key")?:Value == xsharpOffLine + if elt:Attribute("key")?:Value == source found := true exit endif next if !found - VAR packageSource := XElement{"packageSource", XAttribute{"key", xsharpOffLine}, XElement{"package", XAttribute{"pattern", "XSharp.*"}}} + VAR packageSource := XElement{"packageSource", XAttribute{"key", source}, XElement{"package", XAttribute{"pattern", pattern}}} packageSourceMapping:Add(packageSource) endif -doc:Save(nugetConfigPath) FUNCTION GetXSharpInstallationPath() as string From dd41b22a1a10923fa7715836a26d5f48378d9551 Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Thu, 5 Feb 2026 16:30:54 +0100 Subject: [PATCH 02/17] [Vsintegration] Improve handling of SDK projects for VS2019 --- .../Editors/XSharpProjectFactory.cs | 20 +++++++++++++++- .../ProjectPackage/XSharpShellEvents.cs | 24 +++++++++++++++---- 2 files changed, 39 insertions(+), 5 deletions(-) diff --git a/src/VisualStudio/ProjectPackage/Editors/XSharpProjectFactory.cs b/src/VisualStudio/ProjectPackage/Editors/XSharpProjectFactory.cs index d9196cd621..329018dfeb 100644 --- a/src/VisualStudio/ProjectPackage/Editors/XSharpProjectFactory.cs +++ b/src/VisualStudio/ProjectPackage/Editors/XSharpProjectFactory.cs @@ -10,6 +10,8 @@ using IOleServiceProvider = Microsoft.VisualStudio.OLE.Interop.IServiceProvider; using Microsoft.VisualStudio.Shell; using System.Linq; +using System.Collections.Generic; +using Community.VisualStudio.Toolkit; namespace XSharp.Project { @@ -34,8 +36,24 @@ public XSharpProjectFactory(XSharpProjectPackage package) this.package = package; } #endregion - +#if !DEV17 + internal static List InvalidProjectFiles = new List(); +#endif #region Overriden implementation + protected override void CreateProject(string fileName, string location, string name, uint flags, ref Guid projectGuid, out IntPtr project, out int canceled) + { + project = IntPtr.Zero; +#if !DEV17 + if (InvalidProjectFiles.Contains(fileName.ToLower())) + { + InvalidProjectFiles.Remove(fileName.ToLower()); + VS.MessageBox.ShowError("The project file " + fileName + " is an SDK style project and cannot be loaded inside this version of Visual Studio"); + canceled = 1; + return; + } +#endif + base.CreateProject(fileName, location, name, flags, ref projectGuid, out project, out canceled); + } /// /// Creates a new project by cloning an existing template project. /// diff --git a/src/VisualStudio/ProjectPackage/XSharpShellEvents.cs b/src/VisualStudio/ProjectPackage/XSharpShellEvents.cs index 813e3f074f..9682a4cf94 100644 --- a/src/VisualStudio/ProjectPackage/XSharpShellEvents.cs +++ b/src/VisualStudio/ProjectPackage/XSharpShellEvents.cs @@ -36,10 +36,18 @@ internal XSharpShellEvents() VS.Events.SolutionEvents.OnBeforeOpenProject += SolutionEvents_OnBeforeOpenProject; VS.Events.SolutionEvents.OnBeforeCloseProject += SolutionEvents_OnBeforeCloseProject; VS.Events.SolutionEvents.OnAfterOpenSolution += SolutionEvents_OnAfterOpenSolution; + VS.Events.SolutionEvents.OnBeforeCloseSolution += SolutionEvents_OnBeforeCloseSolution; }); } + private void SolutionEvents_OnBeforeCloseSolution() + { +#if !DEV17 + XSharpProjectFactory.InvalidProjectFiles.Clear(); +#endif + } + private void SolutionEvents_OnAfterOpenSolution(Solution obj) { foreach (var project in XSharpProjectNode.AllProjects) @@ -53,7 +61,7 @@ private void SolutionEvents_OnAfterOpenSolution(Solution obj) } - #region Project Events +#region Project Events private void SolutionEvents_OnAfterLoadProject(Community.VisualStudio.Toolkit.Project project) { @@ -62,18 +70,25 @@ private void SolutionEvents_OnAfterLoadProject(Community.VisualStudio.Toolkit.Pr private void SolutionEvents_OnBeforeCloseProject(Community.VisualStudio.Toolkit.Project project) { Logger.Information("XSharpShellEvents: OnBeforeCloseProjec " + project.FullPath); +#if DEV17 var node = XSharpProjectNode.FindProject(project.FullPath); - if (node != null) + if (node != null && node.IsSdkProject) { var prop = node.GetProjectProperty(XSharpProjectFileConstants.XTargetFrameworks); - if (! String.IsNullOrEmpty(prop)) + if (! string.IsNullOrEmpty(prop)) { + var act = node.GetProjectProperty(XSharpProjectFileConstants.TargetFramework); node.RemoveProjectProperty(XSharpProjectFileConstants.XTargetFrameworks); node.RemoveProjectProperty(XSharpProjectFileConstants.TargetFramework); + if (!string.IsNullOrEmpty(act)) + { + node.SetProjectProperty(XSharpProjectFileConstants.ActiveTargetFramework, act); + } node.SetProjectProperty(XSharpProjectFileConstants.TargetFrameworks, prop); node.BuildProject.Save(); } } +#endif } private void SolutionEvents_OnBeforeOpenProject(string projectFileName) { @@ -103,7 +118,8 @@ private void checkProjectFile(string fileName) var SdkPos = xml.IndexOf(" Date: Thu, 5 Feb 2026 16:32:20 +0100 Subject: [PATCH 03/17] [Vsintegration] prevent item being added twice to the project file --- .../ProjectBase/ProjectElement.cs | 35 ++++++++++++++----- 1 file changed, 27 insertions(+), 8 deletions(-) diff --git a/src/VisualStudio/ProjectBase/ProjectElement.cs b/src/VisualStudio/ProjectBase/ProjectElement.cs index 64373e63fb..52a10e75d9 100644 --- a/src/VisualStudio/ProjectBase/ProjectElement.cs +++ b/src/VisualStudio/ProjectBase/ProjectElement.cs @@ -3,8 +3,8 @@ * Copyright (c) Microsoft Corporation. * * This source code is subject to terms and conditions of the Apache License, Version 2.0. A - * copy of the license can be found in the License.txt file at the root of this distribution. - * + * copy of the license can be found in the License.txt file at the root of this distribution. + * * You must not remove this notice, or any other, from this software. * * ***************************************************************************/ @@ -20,6 +20,8 @@ using Microsoft.Build.Evaluation; using MSBuildExecution = Microsoft.Build.Execution; using Microsoft.VisualStudio.Shell; +using Microsoft.VisualStudio.Shell.Interop; +using System.Linq; namespace Microsoft.VisualStudio.Project { @@ -342,15 +344,32 @@ public void RefreshProperties() if(this.IsVirtual) return; + bool isSdk = itemProject.BuildProject.Xml.Sdk != null; itemProject.BuildProject.ReevaluateIfNecessary(); - - IEnumerable items = itemProject.BuildProject.GetItems(item.ItemType); - foreach (ProjectItem projectItem in items) + IEnumerable items = itemProject.BuildProject.GetItems(this.item.ItemType); + if (isSdk) { - if(projectItem!= null && projectItem.UnevaluatedInclude.Equals(item.UnevaluatedInclude)) + if (items.Count() > 1) { - item = projectItem; - return; + var ouritems = items.Where(i => i.EvaluatedInclude == this.item.EvaluatedInclude && i.UnevaluatedInclude == this.item.UnevaluatedInclude); + var theiritems = items.Where(i => i.IsImported && i.EvaluatedInclude == this.item.EvaluatedInclude); + if (ouritems.Count() == 1 && theiritems.Count() == 1) + { + itemProject.BuildProject.RemoveItem(this.item); + this.item = theiritems.First(); + itemProject.BuildProject.ReevaluateIfNecessary(); + } + } + } + else + { + foreach (ProjectItem projectItem in items) + { + if (projectItem != null && projectItem.UnevaluatedInclude.Equals(item.UnevaluatedInclude)) + { + this.item = projectItem; + return; + } } } } From 6e2095348238653ec6575adfdfbb51a407cb879e Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Fri, 6 Feb 2026 18:34:12 +0100 Subject: [PATCH 04/17] [Vsintegration] Implement Exclude from and Include in project for SDK style projects. Also add SDK reference now as AssemblyReferences. And code in SDKProjectNode file is now DEV17 only. --- src/VisualStudio/ProjectBase/FileNode.cs | 10 ++-- src/VisualStudio/ProjectBase/ReferenceNode.cs | 2 +- .../ProjectPackage/Nodes/XSharpFileNode.cs | 56 ++++++++++++++++--- .../ProjectPackage/Nodes/XSharpProjectNode.cs | 5 +- .../Nodes/XSharpSdkProjectNode.cs | 53 +++++------------- .../ProjectPackage/XSharpConfigprovider.cs | 3 +- .../source.extension.2019.vsixmanifest | 2 +- 7 files changed, 72 insertions(+), 59 deletions(-) diff --git a/src/VisualStudio/ProjectBase/FileNode.cs b/src/VisualStudio/ProjectBase/FileNode.cs index 916fc7fe6f..869281753a 100644 --- a/src/VisualStudio/ProjectBase/FileNode.cs +++ b/src/VisualStudio/ProjectBase/FileNode.cs @@ -736,11 +736,11 @@ protected override int QueryStatusOnNode(Guid cmdGroup, uint cmd, IntPtr pCmdTex { if ((VsCommands2K)cmd == VsCommands2K.EXCLUDEFROMPROJECT) { - if (this.IsLink) - { - result |= QueryStatusResult.NOTSUPPORTED; - } - else + //if (this.IsLink) + //{ + // result |= QueryStatusResult.NOTSUPPORTED; + //} + //else { result |= QueryStatusResult.SUPPORTED | QueryStatusResult.ENABLED; } diff --git a/src/VisualStudio/ProjectBase/ReferenceNode.cs b/src/VisualStudio/ProjectBase/ReferenceNode.cs index 31f87f58fa..c7c4c38625 100644 --- a/src/VisualStudio/ProjectBase/ReferenceNode.cs +++ b/src/VisualStudio/ProjectBase/ReferenceNode.cs @@ -84,7 +84,7 @@ public override string Caption return String.Empty; } } - public bool EmbedInteropTypes + public virtual bool EmbedInteropTypes { get { diff --git a/src/VisualStudio/ProjectPackage/Nodes/XSharpFileNode.cs b/src/VisualStudio/ProjectPackage/Nodes/XSharpFileNode.cs index ea73346273..160acd22a9 100644 --- a/src/VisualStudio/ProjectPackage/Nodes/XSharpFileNode.cs +++ b/src/VisualStudio/ProjectPackage/Nodes/XSharpFileNode.cs @@ -4,6 +4,7 @@ // See License.txt in the project root for license information. // +using Microsoft.Build.Evaluation; using Microsoft.VisualStudio; using Microsoft.VisualStudio.Imaging; using Microsoft.VisualStudio.Imaging.Interop; @@ -18,6 +19,7 @@ using System.Diagnostics; using System.IO; using System.Linq; + using XSharpModel; using OleConstants = Microsoft.VisualStudio.OLE.Interop.Constants; @@ -150,10 +152,33 @@ protected override void DeleteFromStorage(string path) } } + static bool MyStringEquals(string file1, string file2) + { + return string.Equals(file1, file2, StringComparison.OrdinalIgnoreCase); + } protected override int IncludeInProject() { int result = base.IncludeInProject(); + + if (((XSharpProjectNode)this.ProjectMgr).IsSdkProject) + { + var buildProject = this.ProjectMgr.BuildProject; + var filename = ProjectMgr.GetRelativePath(this.Url); + foreach (var xmlItem in buildProject.Xml.Items) + { + if (xmlItem.ItemType == ItemNode.ItemName && MyStringEquals(xmlItem.Remove, filename)) + { + xmlItem.Parent.RemoveChild(xmlItem); + buildProject.RemoveItem(this.ItemNode.Item); + buildProject.ReevaluateIfNecessary(); + break; + } + } + } + // we could be including a file that was removed earlier + + DetermineSubType(); if (this.ProjectMgr is XSharpProjectNode prjNode) { @@ -168,7 +193,7 @@ private void ResetFileType() DetermineFileType(); } - internal void BuildActionChanged( ) + internal void BuildActionChanged() { this.ResetFileType(); var prjNode = this.ProjectMgr as XSharpProjectNode; @@ -181,6 +206,19 @@ protected override int ExcludeFromProject() return ThreadHelper.JoinableTaskFactory.Run(async delegate { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); + if (this.IsImported) + { + // to exclude an imported file we need to remove + var fileName = ProjectMgr.GetRelativePath(this.Url); + var item = ProjectMgr.CreateMsBuildFileItem(fileName, this.ItemType); + var xml = item.Item.Xml; + if (xml != null) + { + xml.Include = null; + xml.Remove = fileName; + ProjectMgr.BuildProject.ReevaluateIfNecessary(); + } + } //if (this.FileType == XFileType.SourceCode) { var prjNode = this.ProjectMgr as XSharpProjectNode; @@ -408,7 +446,7 @@ internal bool AddDependent(XSharpFileNode child) // If the file is not a XSharpFileNode then drop it and create a new XSharpFileNode XSharpFileNode dependent; - if ( child.IsImported) + if (child.IsImported) { // Todo: Link imported node with parent node // Do not update the project file for imported items, we will take care of this later @@ -436,7 +474,7 @@ internal bool AddDependent(XSharpFileNode child) { string parentPath = Path.GetDirectoryName(Path.GetFullPath(this.Url)); string childPath = Path.GetDirectoryName(Path.GetFullPath(dependent.Url)); - if (string.Equals(parentPath, childPath, StringComparison.OrdinalIgnoreCase)) + if (MyStringEquals(parentPath, childPath)) { dependent.ItemNode.SetMetadata(ProjectFileConstants.DependentUpon, parent); } @@ -524,7 +562,7 @@ protected override void SetSpecialProperties() private bool HasSubType(string value) { string result = SubType; - return !String.IsNullOrEmpty(result) && String.Equals(result, value, StringComparison.OrdinalIgnoreCase); + return !String.IsNullOrEmpty(result) && MyStringEquals(result, value); } public bool IsXAML @@ -572,7 +610,7 @@ private void DetermineFileType() _fileType = XFileTypeHelpers.GetFileType(this.Url); if (_fileType == XFileType.SourceCode) { - if (!string.Equals(ItemType, "Compile", StringComparison.OrdinalIgnoreCase)) + if (!MyStringEquals(ItemType, "Compile")) { _fileType = XFileType.Other; } @@ -598,15 +636,15 @@ private void CheckItemType() { case XFileType.XAML: // do not change the type when not needed - if (String.Equals(itemType, ProjectFileConstants.Page, StringComparison.OrdinalIgnoreCase)) + if (MyStringEquals(itemType, ProjectFileConstants.Page)) { break; } - else if (String.Equals(itemType, ProjectFileConstants.ApplicationDefinition, StringComparison.OrdinalIgnoreCase)) + else if (MyStringEquals(itemType, ProjectFileConstants.ApplicationDefinition)) { break; } - else if (String.Equals(itemType, ProjectFileConstants.Resource, StringComparison.OrdinalIgnoreCase)) + else if (MyStringEquals(itemType, ProjectFileConstants.Resource)) { break; } @@ -620,7 +658,7 @@ private void CheckItemType() break; case XFileType.ManagedResource: case XFileType.License: - if (!String.Equals(itemType, ProjectFileConstants.EmbeddedResource, StringComparison.OrdinalIgnoreCase)) + if (!MyStringEquals(itemType, ProjectFileConstants.EmbeddedResource)) { this.ItemNode.ItemName = ProjectFileConstants.EmbeddedResource; } diff --git a/src/VisualStudio/ProjectPackage/Nodes/XSharpProjectNode.cs b/src/VisualStudio/ProjectPackage/Nodes/XSharpProjectNode.cs index 7678f7b179..ddea0a797e 100644 --- a/src/VisualStudio/ProjectPackage/Nodes/XSharpProjectNode.cs +++ b/src/VisualStudio/ProjectPackage/Nodes/XSharpProjectNode.cs @@ -1796,7 +1796,7 @@ protected override BuildSubmission DoMSBuildSubmission(BuildKind buildKind, stri void ProcessOptions(ProjectInstance projectInstance, string target) { Logger.Information($"Build: Invocation Result for target '{target}'"); - if (projectInstance != null && this is XSharpSdkProjectNode) + if (projectInstance != null && this.IsSdkProject) { var commandLineArguments = new List(); var sdkReferences = new List(); @@ -1812,7 +1812,8 @@ void ProcessOptions(ProjectInstance projectInstance, string target) { switch (item.ItemType.ToLower()) { - case "reference": + case "reference" when ! this.IsSdkProject: + case "referencepath" when this.IsSdkProject: allReferenceAssemblies.Add(item.EvaluatedInclude); if (item.GetMetadataValue("NugetSourceType")?.ToLower() == "package") { diff --git a/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs b/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs index 1777288831..ec28a1a17a 100644 --- a/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs +++ b/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs @@ -1,4 +1,5 @@ -using Community.VisualStudio.Toolkit; +#if DEV17 +using Community.VisualStudio.Toolkit; using EnvDTE; @@ -118,7 +119,6 @@ internal bool SelectSubProject(SdkSubProjectInfo info) SetProjectProperty(XSharpProjectFileConstants.ActiveTargetFramework, info.TargetFramework); this.DoReload(false); - //this.OnPropertyChanged(this, (int)__VSHPROPID.VSHPROPID_Caption, 0); this.OnPropertyChanged(this, (int)__VSHPROPID6.VSHPROPID_Subcaption, 0); VS.Commands.ExecuteAsync("Project.SetAsStartupProject").FireAndForget(); return true; @@ -242,7 +242,7 @@ internal string CheckFrameworks() public override void SetBuildProject(Microsoft.Build.Evaluation.Project newBuildProject) { base.SetBuildProject(newBuildProject); - if (this.ProjectIDGuid == Guid.Empty) + if (this.ProjectIDGuid == Guid.Empty) this.SetProjectGuidFromProjectFile(); if (newBuildProject == null) { @@ -358,7 +358,7 @@ private void AddPendingReferences(List newReferences, SdkSubProjectInfo var toDelete = new List(); var toAdd = new List(); - + this.Build(MsBuildTarget.ResolveAssemblyReferences); foreach (var reference in sdkReferences) { @@ -393,7 +393,7 @@ private void AddPendingReferences(List newReferences, SdkSubProjectInfo frameworkNode.IsExpanded = isExpanded; } } - public class XSharpFrameworkNode : XSharpDependencyNode + internal class XSharpFrameworkNode : XSharpDependencyNode { public XSharpFrameworkNode(XSharpProjectNode root, string filePath) : base(root, filePath) @@ -402,51 +402,23 @@ public XSharpFrameworkNode(XSharpProjectNode root, string filePath) : } protected override ImageMoniker GetIconMoniker(bool open) { -#if DEV17 return KnownMonikers.Framework; -#else - return KnownMonikers.Reference; -#endif - } } - public class XSharpDependencyNode : HierarchyNode + internal class XSharpDependencyNode : XSharpAssemblyReferenceNode { - string path; - string caption; public XSharpDependencyNode(XSharpProjectNode root, string filePath) : - base(root) - { - caption = path = filePath; - if (path.Contains(System.IO.Path.DirectorySeparatorChar) || path.Contains(System.IO.Path.AltDirectorySeparatorChar)) - { - caption = System.IO.Path.GetFileNameWithoutExtension(path); - } - - } - public override string Caption - { - get - { - return caption; - } - } - override public string Url + base(root, filePath) { - get - { - return path; - } + // We do not want to store these dependencies in the project file, so we remove them from the BuildProject + root.BuildProject.RemoveItem(this.ItemNode.Item); } - protected override bool SupportsIconMonikers => true; + public override bool EmbedInteropTypes { get => false; set { }} + protected override ImageMoniker GetIconMoniker(bool open) { -#if DEV17 return KnownMonikers.Framework; -#else - return KnownMonikers.Reference; -#endif } override public Guid ItemTypeGuid { @@ -558,7 +530,7 @@ public override void AddChild(HierarchyNode node) frameworkNode.AddChild(node); } else - { + { base.AddChild(node); } } @@ -580,3 +552,4 @@ public void DeleteDependencies(string targetframework) // } } } +#endif diff --git a/src/VisualStudio/ProjectPackage/XSharpConfigprovider.cs b/src/VisualStudio/ProjectPackage/XSharpConfigprovider.cs index 44586da53f..0c9dfd8f60 100644 --- a/src/VisualStudio/ProjectPackage/XSharpConfigprovider.cs +++ b/src/VisualStudio/ProjectPackage/XSharpConfigprovider.cs @@ -217,6 +217,7 @@ public override int DebugLaunch(uint grfLaunch) { info.clsidCustom = VSConstants.DebugEnginesGuids.ManagedOnly_guid; // {449EC4CC-30D2-4032-9256-EE18EB41B62B} } +#if DEV17 if (this.ProjectMgr is XSharpSdkProjectNode sdk) { if (sdk.IsNetCoreApp) @@ -224,7 +225,7 @@ public override int DebugLaunch(uint grfLaunch) info.clsidCustom = VSConstants.DebugEnginesGuids.CoreSystemClr_guid; } } - +#endif info.grfLaunch = grfLaunch; VsShellUtilities.LaunchDebugger(this._project.Site, info); } diff --git a/src/VisualStudio/ProjectPackage/source.extension.2019.vsixmanifest b/src/VisualStudio/ProjectPackage/source.extension.2019.vsixmanifest index fb3786224e..3d01645e3a 100644 --- a/src/VisualStudio/ProjectPackage/source.extension.2019.vsixmanifest +++ b/src/VisualStudio/ProjectPackage/source.extension.2019.vsixmanifest @@ -1,7 +1,7 @@  - + XSharp Visual Studio Integration X# Visual Studio Integration. Includes a Project System, Language Service , Debugger Support, Custom Editors etc. From 225b99b1157c52b706b2d8053523ec6aeeec9f25 Mon Sep 17 00:00:00 2001 From: Fabrice Foray Date: Sat, 7 Feb 2026 17:08:04 +0100 Subject: [PATCH 05/17] Update Nuget.config changed When updating Nuget.config, we check the existing PackageSource. If you are using something else than Nuget.org, we will just add XSharp Offline Packages. --- src/Runtime/Nuget/XSAddNugetSource.prgx | 37 +++++++++++++++++++++---- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/src/Runtime/Nuget/XSAddNugetSource.prgx b/src/Runtime/Nuget/XSAddNugetSource.prgx index 012c136bca..c5a8996c64 100644 --- a/src/Runtime/Nuget/XSAddNugetSource.prgx +++ b/src/Runtime/Nuget/XSAddNugetSource.prgx @@ -24,22 +24,47 @@ if packageSources == null packageSources := XElement{"packageSources"} configElement:Add(packageSources) endif -// Search "XSharp Offline Packages" +// Search "XSharp Offline Packages" and Add if missing GetSetPackageSource( packageSources, xsharpOffLine, sourceUrl ) // Get the SourceMapping to "XSharp Offline Packages" ? GetSetSourceMapping( configElement, xsharpOffLine, "XSharp.*" ) -// We MUST check that we also have a pattern of Nuget.org -GetSetSourceMapping( configElement, "nuget.org", "*" ) +// Is Nuget.org already in the list of package sources, if so add the SourceMapping to Nuget.org +IF SearchPackageSource(packageSources, "nuget.org") + GetSetSourceMapping( configElement, "nuget.org", "*" ) +ELSE + VAR sourceList := GetPackageSourceList(packageSources) + // No Nuget,and more than XSharp Offline Packages + // You might filter/choose your sources. + IF sourceList:Count == 1 + // Only XSharp Offline Packages, add Nuget.org as well + GetSetPackageSource( packageSources, "nuget.org", "https://api.nuget.org/v3/index.json" ) + GetSetSourceMapping( configElement, "nuget.org", "*" ) + ENDIF +ENDIF + doc:Save(nugetConfigPath) -FUNCTION GetSetPackageSource( packageSources AS XElement, source AS STRING, sourceUrl AS STRING ) AS VOID -VAR found := false +FUNCTION GetPackageSourceList( packageSources AS XElement ) AS List +VAR list := List{} foreach elt as XElement in packageSources:Elements("add") - if elt:Attribute("key")?:Value == source + list:Add(elt:Attribute("key")?:Value) +next +RETURN list + +FUNCTION SearchPackageSource( packageSources AS XElement, source AS STRING ) AS LOGIC +VAR found := false +VAR sourceList := GetPackageSourceList(packageSources) +foreach elt as String in sourceList + if elt == source found := true exit endif next +RETURN found + + +FUNCTION GetSetPackageSource( packageSources AS XElement, source AS STRING, sourceUrl AS STRING ) AS VOID +VAR found := SearchPackageSource( packageSources, source ) if !found packageSources:Add(XElement{"add", XAttribute{"key", source}, XAttribute{"value", sourceUrl}}) endif From d275040fd7f38c9829f38d3dbe1f3d4bea5ebee3 Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 12:57:08 +0100 Subject: [PATCH 06/17] [Compiler] Fixed exception when generating XML files because of change in Roslyn --- .../CSharp/Portable/Symbols/MemberSignatureComparer.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/Roslyn/src/Compilers/CSharp/Portable/Symbols/MemberSignatureComparer.cs b/src/Roslyn/src/Compilers/CSharp/Portable/Symbols/MemberSignatureComparer.cs index 2b61a8f541..b44a9f211b 100644 --- a/src/Roslyn/src/Compilers/CSharp/Portable/Symbols/MemberSignatureComparer.cs +++ b/src/Roslyn/src/Compilers/CSharp/Portable/Symbols/MemberSignatureComparer.cs @@ -507,9 +507,12 @@ public bool Equals(Symbol? member1, Symbol? member2) #if XSHARP TypeCompareKind typeCompareKind = _typeComparison; - if ((member1.ContainingType.Name == "Codeblock" || member2.ContainingType.Name == "Codeblock") && member1.Name == "Eval") + if (member1 is not SignatureOnlyMethodSymbol && member2 is not SignatureOnlyMethodSymbol) { - typeCompareKind |= TypeCompareKind.IgnoreCustomModifiersAndArraySizesAndLowerBounds; + if ((member1.ContainingType.Name == "Codeblock" || member2.ContainingType.Name == "Codeblock") && member1.Name == "Eval") + { + typeCompareKind |= TypeCompareKind.IgnoreCustomModifiersAndArraySizesAndLowerBounds; + } } if (member1.GetParameterCount() > 0 && !HaveSameParameterTypes(member1.GetParameters().AsSpan(), typeMap1, member2.GetParameters().AsSpan(), typeMap2, _refKindCompareMode, considerDefaultValues: _considerDefaultValues, typeCompareKind)) From e05f51c8b359746a5e9a91c491c6ebfec1e4c07a Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 12:57:33 +0100 Subject: [PATCH 07/17] [Runtime] Make sure debug compiler is used when generating xml docs --- src/Runtime/VOSDK/Source/VOSDK/VOSDK.Common.Targets | 1 + src/Runtime/VOSdkTyped/Source/VOSdk/VOSDK.Common.Targets | 1 + 2 files changed, 2 insertions(+) diff --git a/src/Runtime/VOSDK/Source/VOSDK/VOSDK.Common.Targets b/src/Runtime/VOSDK/Source/VOSDK/VOSDK.Common.Targets index ca893f76ff..cf3642e47c 100644 --- a/src/Runtime/VOSDK/Source/VOSDK/VOSDK.Common.Targets +++ b/src/Runtime/VOSDK/Source/VOSDK/VOSDK.Common.Targets @@ -25,6 +25,7 @@ false $(CommonDir) $(BinariesDir)bin\xsc\$(Configuration)\net472\ + $(BinariesDir)bin\xsc\Debug\net472\ false false false diff --git a/src/Runtime/VOSdkTyped/Source/VOSdk/VOSDK.Common.Targets b/src/Runtime/VOSdkTyped/Source/VOSdk/VOSDK.Common.Targets index 6a7458440c..4079e5f03e 100644 --- a/src/Runtime/VOSdkTyped/Source/VOSdk/VOSDK.Common.Targets +++ b/src/Runtime/VOSdkTyped/Source/VOSdk/VOSDK.Common.Targets @@ -26,6 +26,7 @@ false $(CommonDir) $(BinariesDir)bin\xsc\Debug\net472\ + $(BinariesDir)bin\xsc\Debug\net472\ false true false From de3cd928ab4067a85e9e011d1f4fef9ccd560989 Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 14:25:16 +0100 Subject: [PATCH 08/17] [Runtime] Small adjustments for the doc generation --- src/Runtime/XSharpRuntime.shfbproj | 6 +- src/Runtime/XSharpRuntimeChinese.shfbproj | 6 +- src/RuntimeDocs.sln | 6 +- src/XSharpRuntime.shfbproj | 387 ---------------------- src/XSharpRuntimeChinese.shfbproj | 387 ---------------------- 5 files changed, 10 insertions(+), 782 deletions(-) delete mode 100644 src/XSharpRuntime.shfbproj delete mode 100644 src/XSharpRuntimeChinese.shfbproj diff --git a/src/Runtime/XSharpRuntime.shfbproj b/src/Runtime/XSharpRuntime.shfbproj index 8999e49037..31bb7fa7e2 100644 --- a/src/Runtime/XSharpRuntime.shfbproj +++ b/src/Runtime/XSharpRuntime.shfbproj @@ -16,7 +16,7 @@ Documentation Documentation ..\..\Artifacts\ - $(ArtifactsDir)Documentation + $(ArtifactsDir)Documentation\net46 .NET Framework 4.6 $(ArtifactsDir)Help @@ -69,7 +69,7 @@ X# Runtime and VO SDK Reference - 2.24.0.0 + 3.0.0.0 MemberName BelowNamespaces True @@ -213,7 +213,7 @@ False X# Runtime and SDK Reference https://www.xsharp.eu/licensing/xsharp-open-software-license - Copyright &#169; 2015-2025 XSharp BV, All rights reserved. The VO SDK classes are Copyright &#169; Computer Associates. + Copyright &#169; 2015-2026 XSharp BV, All rights reserved. The VO SDK classes are Copyright &#169; Computer Associates. $(Artifactsdir)\Obj\Help\BuildLog.log VS 100 diff --git a/src/Runtime/XSharpRuntimeChinese.shfbproj b/src/Runtime/XSharpRuntimeChinese.shfbproj index 3d440be3b2..aeef01367d 100644 --- a/src/Runtime/XSharpRuntimeChinese.shfbproj +++ b/src/Runtime/XSharpRuntimeChinese.shfbproj @@ -16,7 +16,7 @@ Documentation Documentation ..\..\Artifacts\ - $(ArtifactsDir)DocChinese + $(ArtifactsDir)DocChinese\net46 .NET Framework 4.6 $(ArtifactsDir)Help_ZH-CN @@ -70,7 +70,7 @@ X# Runtime and VO SDK Reference - 2.24.0.0 + 3.0.0 MemberName BelowNamespaces True @@ -206,7 +206,7 @@ False X# Runtime and SDK Reference https://www.xsharp.eu/licensing/xsharp-open-software-license - Copyright &#169; 2015-2025 XSharp BV, All rights reserved. The VO SDK classes are Copyright &#169; Computer Associates. + Copyright &#169; 2015-2026 XSharp BV, All rights reserved. The VO SDK classes are Copyright &#169; Computer Associates. $(Artifactsdir)\Obj\Help_ZH-CN\BuildLog.log VS 100 diff --git a/src/RuntimeDocs.sln b/src/RuntimeDocs.sln index 04403e0704..60b511ab84 100644 --- a/src/RuntimeDocs.sln +++ b/src/RuntimeDocs.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.7.34024.191 +# Visual Studio Version 18 +VisualStudioVersion = 18.2.11415.280 d18.0 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{1C0880F5-74CF-4618-9856-D89B3FCB6DA3}" ProjectSection(SolutionItems) = preProject @@ -70,6 +70,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VOSDK", "VOSDK", "{FABD1B90-611A-48D5-9D69-BC148E103030}" ProjectSection(SolutionItems) = preProject + Runtime\VOSDK\Source\VOSDK\VOSDK.Common.Targets = Runtime\VOSDK\Source\VOSDK\VOSDK.Common.Targets Runtime\VOSDK\Source\VOSDK\VOSDK.Targets = Runtime\VOSDK\Source\VOSDK\VOSDK.Targets Runtime\VOSDK\Source\VOSDK\VOSDKDocs.Targets = Runtime\VOSDK\Source\VOSDK\VOSDKDocs.Targets EndProjectSection @@ -108,6 +109,7 @@ Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "XSharp.Data", "Runtime\XSha EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VOSDK-Typed", "VOSDK-Typed", "{D10369A3-B01A-44C7-BBFB-AA6ACA7F05FC}" ProjectSection(SolutionItems) = preProject + Runtime\VOSdkTyped\Source\VOSdk\VOSDK.Common.Targets = Runtime\VOSdkTyped\Source\VOSdk\VOSDK.Common.Targets Runtime\VOSdkTyped\Source\VOSdk\VOSDK.Targets = Runtime\VOSdkTyped\Source\VOSdk\VOSDK.Targets Runtime\VOSdkTyped\Source\VOSdk\VOSDKDocs.Targets = Runtime\VOSdkTyped\Source\VOSdk\VOSDKDocs.Targets EndProjectSection diff --git a/src/XSharpRuntime.shfbproj b/src/XSharpRuntime.shfbproj deleted file mode 100644 index 65a6904358..0000000000 --- a/src/XSharpRuntime.shfbproj +++ /dev/null @@ -1,387 +0,0 @@ - - - - - - Debug - AnyCPU - 2.0 - {dc8b53d5-c90b-4671-a758-ac2a91b0501c} - 2017.9.26.0 - - c:\XSharp\SHFB\SHFB\Deploy\ - - Documentation - Documentation - Documentation - - .NET Framework 4.6 - ..\Artifacts\Help\ - XSharpRef - en-US - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - X# Runtime and VO SDK Reference - 2.22.0.1 - MemberName - BelowNamespaces - True - False - False - Blank - HtmlHelp1, MSHelpViewer, Website - C#, X# - VS2013XSharp - True - True - False - False - OnlyErrors - Attributes, ExplicitInterfaceImplementations, InheritedMembers, PublicCompilerGenerated, NonBrowsable - - This namespace contains the exposed RDDs for Advantage. - This namespace contains the classes and structures that are used to implement the XBase types, such as USUAL, SYMBOL DATE and FLOAT. - This namespace contains types (classes and attributes) used by the compiler. These are normally not used in End users (your) code. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.Harbour.DLL. - This namespace contains types used in the (low level) File IO. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.VO.DLL. - The XSharp Namespaces contain types and functions implemented in the XSharp runtime. - This namespace contains the some classes that are used to parse embedded SQL statements. - The XSharp.RDD group contains namespaces that are related to the XSharp RDD System. - This namespace contains types used by the RDD system. - This namespace contains enumerated types used by the RDD system. - This namespace contains several helper types used by the RDD system. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.Core DLL. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.RT.DLL. - This namespace contains the Functions class that has the functions to show the Runtime Debugger windows. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.XPP.DLL. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.VFP DLL. - This namespace contains the compatibility classes that are used in code generated by the VFPExporter tool. - This namespace contains several types used by the Advantage RDDs in the RDD system. - This namespace contains several types used in the XSharp runtime to access data through the Ado.Net Data providers. - This namespace containes several windows that can be used to inspect the Runtime State and open workareas/cursors at runtime. - - This namespace contains all the VO SDK Classes, such as DbServer, DataWindow, SQLSelect etc.<br/> - If you enable the compiler option to search inside "Implicit Namespaces" (/ins) then you will not have to include a USING VO statement in your code. <br/> - The compiler will then automatically find the classes. <br/> - The Runtime will also respect these implicit namespaces, so CreateInstance(#DbServer) will also be able to find the DbServer class inside the VO namespace. - - - This namespace contains strongly typed versions of the VO SDK Classes, such as DbServer, DataWindow, SQLSelect etc.<br/> - If you enable the compiler option to search inside "Implicit Namespaces" (/ins) then you will not have to include - a USING XSharp.VO statement in your code. <br/> - The compiler will then automatically find the classes in this namespace. <br/> - The Runtime will also respect these implicit namespaces, - so CreateInstance(#DbServer) will also be able to find the DbServer class inside the XSharp.VO namespace. - - - The XSharp namespace holds the new classes that are used in Hybrid applications, such as ChildWinForm, VOWinFormApp etc. - These classes were originally created by Paul Piko for Vulcan.Net and are included with his permission. - - - - This namespace contains the functions class with the functions and defines from the VOGUIClasses assembly - This namespace contains the functions class with the functions and defines from the VOInternetClasses assembly - This namespace contains the functions class with the functions and defines from the VOSystemClasses assembly - This namespace contains the functions class with the functions and defines from the VORDDClasses assembly - This namespace contains the functions class with the functions and defines from the VOReportClasses assembly - This namespace contains the functions class with the functions and defines from the VOSQLClasses assembly - - This namespace contains the functions class with the functions and defines from the XSharp.VOGUIClasses assembly - This namespace contains the functions class with the functions and defines from the XSharp.VORDDClasses assembly - This namespace contains the functions class with the functions and defines from the XSharp.VOSQLClasses assembly - This namespace contains the functions class with the functions and defines from the XSharp.VOSystemClasses assembly - This namespace contains extension methods (Sum(), Min(), Max()) for the XSharp Numeric datatypes Float and Currency - - - - - - - {@SyntaxFilters} - - - - - - - - - - - - - - - - - - - - - - - - {@TokenFiles} - - - - - - - - - AutoDocumentCtors, Namespace, AutoDocumentDispose - - - - - - - - - - - - - - Msdn - True - True - Msdn - False - info%40xsharp.eu - info%40xsharp.eu - - - E:\XSharp\Dev\src\ - False - - - - - - - - /reflection/apis/api[starts-with(apidata/@name,"$")] - /reflection/apis/api[starts-with(apidata/@name,"__") and not(starts-with(@id,"T:"))] - /reflection/apis/api[contains(@id,"N:") and string-length(@id)=2] - - - - - X# Runtime and SDK Reference - https://www.xsharp.eu/licensing/xsharp-open-software-license - Copyright &#169%3b 2015-2025 XSharp BV, All rights reserved. The VO SDK classes are Copyright &#169%3b Computer Associates. - ..\Artifacts\Obj\Help\BuildLog.log - VS - 100 - XSharp BV - X# - -1 - 100 - 100 - Msdn - VisualStudio15 - This is the generated documentation for the XSharp Runtime and VO SDK.&lt%3bbr/&gt%3b - Please note that DotNet does not know the concept of a function. Therefore the compiler converts functions to static methods of a compiler generated functions class. &lt%3bbr/&gt%3b - The same is true for DEFINES. These are added as constants fields in the functions class.&lt%3bbr/&gt%3b - The XSharp runtime has a couple of these classes:&lt%3bbr/&gt%3b - &lt%3blist type=&quot%3bbullet&quot%3b&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_Core_Functions.htm&quot%3b&gt%3bXSharp.Core.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_RT_Functions.htm&quot%3b&gt%3bXSharp.RT.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_VO_Functions.htm&quot%3b&gt%3bXSharp.VO.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_XPP_Functions.htm&quot%3b&gt%3bXSharp.XPP.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_VFP_Functions.htm&quot%3b&gt%3bXSharp.VFP.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_Data_Functions.htm&quot%3b&gt%3bXSharp.Data.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_Harbour_Functions.htm&quot%3b&gt%3bXSharp.Harbour.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3b/list&gt%3b &lt%3bbr /&gt%3b - - and more. - There is no need to do anything special when writing code. The compiler will automatically resolve function calls, such as: - &lt%3bc&gt%3bLeft%28cString,10%29 &lt%3b/c&gt%3b and will generate the following output &lt%3bc&gt%3bXSharp.Core.Functions.Left%28cString,10%29&lt%3b/c&gt%3b. - The compiler will also translate a define such as &lt%3bc&gt%3bFA_NORMAL &lt%3b/c&gt%3b to &lt%3bc&gt%3bXSharp.Core.Functions.FA_NORMAL&lt%3b/c&gt%3b.&lt%3bbr/&gt%3b - In fact the compiler will include the value of this DEFINE in the generated code. - You will not be able to see in the generated code that the value &lt%3bc&gt%3b0x00000080 &lt%3b/c&gt%3bwas read from the &lt%3bc&gt%3bFA_NORMAL&lt%3b/c&gt%3b define.&lt%3bbr/&gt%3b - The source code for the XSharp Runtime is available &lt%3ba href=&quot%3bhttps://github.com/X-Sharp/XSharpPublic/tree/feature/Runtime/&quot%3b _target=&quot%3b_blank&quot%3b &gt%3bon GitHub. &lt%3b/a&gt%3b &lt%3bbr/&gt%3b - If you find bugs with this code, please report them by sending an email to bugreports%40xsharp.eu.&lt%3bbr/&gt%3b - Or even better, locate the bug and send us a bugfix.&lt%3bbr/&gt%3b - The best way to do that is :&lt%3bbr/&gt%3b - &lt%3blist type=&quot%3bbullet&quot%3b&gt%3b - &lt%3bitem&gt%3bCreate a Fork of our Github repository&lt%3b/item&gt%3b - &lt%3bitem&gt%3bCreate a unit test in the appropriate unit tests project&lt%3b/item&gt%3b - &lt%3bitem&gt%3bFix the problem&lt%3b/item&gt%3b - &lt%3bitem&gt%3bSend us a pull request for the unit test and the bug fix&lt%3b/item&gt%3b - &lt%3b/list&gt%3b - Of course you can also discuss issues you have or send us your comments on the forum &lt%3ba href=&quot%3bhttps://www.xsharp.eu&quot%3b _target=&quot%3b_blank&quot%3b &gt%3bon our website &lt%3b/a&gt%3b&lt%3bbr/&gt%3b - Finally, if you like what you are seeing, you can help to support the X# development by subscribing to the &quot%3bFriends Of XSharp&quot%3b %28FOX%29 program. &lt%3bbr/&gt%3b - More information about that program can be found at our website as well.&lt%3bbr/&gt%3b - - ..\Artifacts\obj\Help\ - X# - 2 - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - OnBuildSuccess - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - logo100 - logo 100 - - - \ No newline at end of file diff --git a/src/XSharpRuntimeChinese.shfbproj b/src/XSharpRuntimeChinese.shfbproj deleted file mode 100644 index f701d8e91e..0000000000 --- a/src/XSharpRuntimeChinese.shfbproj +++ /dev/null @@ -1,387 +0,0 @@ - - - - - - Debug - AnyCPU - 2.0 - {dc8b53d5-c90b-4671-a758-ac2a91b0501c} - 2017.9.26.0 - - c:\XSharp\SHFB\SHFB\Deploy\ - - Documentation - Documentation - Documentation - - .NET Framework 4.6 - ..\Artifacts\Help_ZH-CN\ - XSharpRef_ZH-CN - zh-CN - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - X# Runtime and VO SDK Reference - 2.22.0.1 - MemberName - BelowNamespaces - True - False - False - Blank - HtmlHelp1, MSHelpViewer, Website - C#, X# - VS2013XSharp - True - True - False - False - OnlyErrors - Attributes, ExplicitInterfaceImplementations, InheritedMembers, PublicCompilerGenerated, NonBrowsable - - This namespace contains the exposed RDDs for Advantage. - This namespace contains the classes and structures that are used to implement the XBase types, such as USUAL, SYMBOL DATE and FLOAT. - This namespace contains types (classes and attributes) used by the compiler. These are normally not used in End users (your) code. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.Harbour.DLL. - This namespace contains types used in the (low level) File IO. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.VO.DLL. - The XSharp Namespaces contain types and functions implemented in the XSharp runtime. - This namespace contains the some classes that are used to parse embedded SQL statements. - The XSharp.RDD group contains namespaces that are related to the XSharp RDD System. - This namespace contains types used by the RDD system. - This namespace contains enumerated types used by the RDD system. - This namespace contains several helper types used by the RDD system. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.Core DLL. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.RT.DLL. - This namespace contains the Functions class that has the functions to show the Runtime Debugger windows. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.XPP.DLL. - This namespace contains the Functions class that implements the Runtime functions available in XSharp.VFP DLL. - This namespace contains the compatibility classes that are used in code generated by the VFPExporter tool. - This namespace contains several types used by the Advantage RDDs in the RDD system. - This namespace contains several types used in the XSharp runtime to access data through the Ado.Net Data providers. - This namespace containes several windows that can be used to inspect the Runtime State and open workareas/cursors at runtime. - - This namespace contains all the VO SDK Classes, such as DbServer, DataWindow, SQLSelect etc.<br/> - If you enable the compiler option to search inside "Implicit Namespaces" (/ins) then you will not have to include a USING VO statement in your code. <br/> - The compiler will then automatically find the classes. <br/> - The Runtime will also respect these implicit namespaces, so CreateInstance(#DbServer) will also be able to find the DbServer class inside the VO namespace. - - - This namespace contains strongly typed versions of the VO SDK Classes, such as DbServer, DataWindow, SQLSelect etc.<br/> - If you enable the compiler option to search inside "Implicit Namespaces" (/ins) then you will not have to include - a USING XSharp.VO statement in your code. <br/> - The compiler will then automatically find the classes in this namespace. <br/> - The Runtime will also respect these implicit namespaces, - so CreateInstance(#DbServer) will also be able to find the DbServer class inside the XSharp.VO namespace. - - - The XSharp namespace holds the new classes that are used in Hybrid applications, such as ChildWinForm, VOWinFormApp etc. - These classes were originally created by Paul Piko for Vulcan.Net and are included with his permission. - - - - This namespace contains the functions class with the functions and defines from the VOGUIClasses assembly - This namespace contains the functions class with the functions and defines from the VOInternetClasses assembly - This namespace contains the functions class with the functions and defines from the VOSystemClasses assembly - This namespace contains the functions class with the functions and defines from the VORDDClasses assembly - This namespace contains the functions class with the functions and defines from the VOReportClasses assembly - This namespace contains the functions class with the functions and defines from the VOSQLClasses assembly - - This namespace contains the functions class with the functions and defines from the XSharp.VOGUIClasses assembly - This namespace contains the functions class with the functions and defines from the XSharp.VORDDClasses assembly - This namespace contains the functions class with the functions and defines from the XSharp.VOSQLClasses assembly - This namespace contains the functions class with the functions and defines from the XSharp.VOSystemClasses assembly - This namespace contains extension methods (Sum(), Min(), Max()) for the XSharp Numeric datatypes Float and Currency - - - - - - - {@SyntaxFilters} - - - - - - - - - - - - - - - - - - - - - - - - {@TokenFiles} - - - - - - - - - AutoDocumentCtors, Namespace, AutoDocumentDispose - - - - - - - - - - - - - - Msdn - True - True - Msdn - False - info%40xsharp.eu - info%40xsharp.eu - - - E:\XSharp\Dev\src\ - True - - - - - - - - /reflection/apis/api[starts-with(apidata/@name,"$")] - /reflection/apis/api[starts-with(apidata/@name,"__") and not(starts-with(@id,"T:"))] - /reflection/apis/api[contains(@id,"N:") and string-length(@id)=2] - - - - - X# Runtime and SDK Reference - https://www.xsharp.eu/licensing/xsharp-open-software-license - Copyright &#169%3b 2015-2025 XSharp BV, All rights reserved. The VO SDK classes are Copyright &#169%3b Computer Associates. - ..\Artifacts\Obj\Help_ZH-CN\BuildLog.log - VS - 100 - XSharp BV - X# - -1 - 100 - 100 - Msdn - VisualStudio15 - 这是生成的 XSharp Runtime 和 VO SDK 文档。&lt%3bbr/&gt%3b - 请注意,DotNet 没有函数的概念。因此,编译器会将函数转换为编译器生成的函数类的静态方法。 &lt%3bbr/&gt%3b - DEFINES 也是如此。这些字段作为常量字段添加到函数类中。&lt%3bbr/&gt%3b - XSharp 运行时有几个这样的类:&lt%3bbr/&gt%3b - &lt%3blist type=&quot%3bbullet&quot%3b&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_Core_Functions.htm&quot%3b&gt%3bXSharp.Core.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_RT_Functions.htm&quot%3b&gt%3bXSharp.RT.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_VO_Functions.htm&quot%3b&gt%3bXSharp.VO.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_XPP_Functions.htm&quot%3b&gt%3bXSharp.XPP.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_VFP_Functions.htm&quot%3b&gt%3bXSharp.VFP.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_Data_Functions.htm&quot%3b&gt%3bXSharp.Data.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3bitem&gt%3b&lt%3ba href=&quot%3bT_XSharp_Harbour_Functions.htm&quot%3b&gt%3bXSharp.Harbour.Functions&lt%3b/a&gt%3b&lt%3b/item&gt%3b - &lt%3b/list&gt%3b &lt%3bbr /&gt%3b - - 以及更多。 - 编写代码时无需做任何特殊处理。编译器会自动解析函数调用,如: - &lt%3bc&gt%3bLeft%28cString,10%29 &lt%3b/c&gt%3b 将生成以下输出 &lt%3bc&gt%3bXSharp.Core.Functions.Left%28cString,10%29&lt%3b/c&gt%3b. - 编译器也会翻译诸如 &lt%3bc&gt%3bFA_NORMAL &lt%3b/c&gt%3b 到 &lt%3bc&gt%3bXSharp.Core.Functions.FA_NORMAL&lt%3b/c&gt%3b.&lt%3bbr/&gt%3b - 事实上,编译器会在生成的代码中包含该 DEFINE 的值。 - 在生成的代码中,您将无法看到&lt%3bc&gt%3b0x00000080&lt%3b/c&gt%3b的值是从&lt%3bc&gt%3bFA_NORMAL&lt%3b/c&gt%3b定义中读取的。&lt%3bbr/&gt%3b - XSharp 运行时的源代码可在&lt%3ba href=&quot%3bhttps://github.com/X-Sharp/XSharpPublic/tree/feature/Runtime/&quot%3b _target=&quot%3b_blank&quot%3b &gt%3b GitHub &lt%3b/a&gt%3b获取 。&lt%3bbr/&gt%3b - 如果您发现此代码存在错误,请发送电子邮件至 bugreports%40xsharp.eu 进行报告。&lt%3bbr/&gt%3b - 或者更好的办法是,找到错误并向我们发送错误修复程序。&lt%3bbr/&gt%3b - 最好的办法是 :&lt%3bbr/&gt%3b - &lt%3blist type=&quot%3bbullet&quot%3b&gt%3b - &lt%3bitem&gt%3b创建 Github 仓库的 Fork&lt%3b/item&gt%3b - &lt%3bitem&gt%3b在相应的单元测试项目中创建单元测试&lt%3b/item&gt%3b - &lt%3bitem&gt%3b修复问题&lt%3b/item&gt%3b - &lt%3bitem&gt%3b向我们发送单元测试和错误修复的 pull 请求&lt%3b/item&gt%3b - &lt%3b/list&gt%3b - 当然,您也可以在我们网站的&lt%3ba href=“https://www.xsharp.eu” _target=“_blank” &gt%3b论坛&lt%3b/a&gt%3b上讨论您遇到的问题或向我们提出您的意见 &lt%3b/a&gt%3b 。 - 最后,如果您喜欢所看到的内容,可以通过订阅 “Friends Of XSharp”(FOX)计划来支持 X# 的开发。&lt%3bbr/&gt%3b - 有关该计划的更多信息,请访问我们的网站。&lt%3bbr/&gt%3b - - ..\Artifacts\obj\Help_ZH-CN\ - X# - 2 - 0 - -1 - - - - - - - - - - - - - - - - - - - - - - - - - - - OnBuildSuccess - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - logo100 - logo 100 - - - \ No newline at end of file From 0b34997ba1252bbba079a6f2e1484da06974bc3e Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 14:49:36 +0100 Subject: [PATCH 09/17] [Doc] Updates --- docs/Help/Maps/table_of_contents.xml | 15 + .../Topics/Bring-Your-Own-Runtime-BYOR.xml | 43 +- .../Topics/Combining-X-Runtime-and-Vulcan.xml | 5 +- docs/Help/Topics/Installation.xml | 205 +- docs/Help/Topics/Known-Issues-in-XSharp-3.xml | 17 + docs/Help/Topics/Nuget-Packages.xml | 119 + docs/Help/Topics/RECORD-statement.xml | 2 +- docs/Help/Topics/The-X-Runtime.xml | 23 +- docs/Help/Topics/VersionHistory.xml | 5622 +--------------- docs/Help/Topics/VersionHistoryXSharp1.xml | 1178 ++++ docs/Help/Topics/VersionHistoryXSharp2.xml | 4440 +++++++++++++ docs/Help/Topics/Who-is-the-X-team.xml | 18 +- docs/Help/Topics/dialect_VO.xml | 4 +- docs/Help/Topics/dialect_Vulcan.xml | 14 +- docs/Help/Topics/opt-ins.xml | 6 +- docs/Help/XSHelp.hmxp | 8 +- docs/Help/helpproject.xsd | 1 + docs/Help_Spanish/XSHelp.hmxp | 2 +- docs/Help_ZH-CN/Maps/table_of_contents.xml | 12 + .../Topics/Bring-Your-Own-Runtime-BYOR.xml | 44 +- docs/Help_ZH-CN/Topics/Installation.xml | 60 +- .../Topics/Known-Issues-in-XSharp-3.xml | 17 + docs/Help_ZH-CN/Topics/Nuget-Packages.xml | 119 + docs/Help_ZH-CN/Topics/VersionHistory.xml | 5649 +---------------- .../Topics/VersionHistoryXSharp1.xml | 1175 ++++ .../Topics/VersionHistoryXSharp2.xml | 4472 +++++++++++++ docs/Help_ZH-CN/Topics/Who-is-the-X-team.xml | 26 +- docs/Help_ZH-CN/Topics/dialect_Vulcan.xml | 12 +- docs/Help_ZH-CN/XSHelp.hmxp | 26 +- 29 files changed, 11895 insertions(+), 11439 deletions(-) create mode 100644 docs/Help/Topics/Known-Issues-in-XSharp-3.xml create mode 100644 docs/Help/Topics/Nuget-Packages.xml create mode 100644 docs/Help/Topics/VersionHistoryXSharp1.xml create mode 100644 docs/Help/Topics/VersionHistoryXSharp2.xml create mode 100644 docs/Help_ZH-CN/Topics/Known-Issues-in-XSharp-3.xml create mode 100644 docs/Help_ZH-CN/Topics/Nuget-Packages.xml create mode 100644 docs/Help_ZH-CN/Topics/VersionHistoryXSharp1.xml create mode 100644 docs/Help_ZH-CN/Topics/VersionHistoryXSharp2.xml diff --git a/docs/Help/Maps/table_of_contents.xml b/docs/Help/Maps/table_of_contents.xml index 140e293e1d..7556d05698 100644 --- a/docs/Help/Maps/table_of_contents.xml +++ b/docs/Help/Maps/table_of_contents.xml @@ -283,6 +283,15 @@ Version History + + Known Issues in XSharp 3 + + + History XSharp 2 + + + History XSharp 1 and older + Migrating apps from VO to X# @@ -304,6 +313,9 @@ The X# Runtime + + Nuget Packages + XSharp.Core @@ -1469,6 +1481,9 @@ VAR Statement + + TUPLE type and expression + diff --git a/docs/Help/Topics/Bring-Your-Own-Runtime-BYOR.xml b/docs/Help/Topics/Bring-Your-Own-Runtime-BYOR.xml index 4566c1e665..60ab8b2cd1 100644 --- a/docs/Help/Topics/Bring-Your-Own-Runtime-BYOR.xml +++ b/docs/Help/Topics/Bring-Your-Own-Runtime-BYOR.xml @@ -1,49 +1,12 @@  - + Bring Your Own Runtime (BYOR)
Bring Your Own Runtime (BYOR)
- - - - -
- The X# Runtime is now available. There is no need anymore to compile against the Vulcan Runtime!
For now we still support the Vulcan runtime, but that support may be dropped in a future build of X#.
-
- - VO and Vulcan support is available in this build of XSharp through what we call the Bring Your Own Runtime principle. - - If you own a license of Vulcan, you can copy the DLLs that you find in the <Vulcan.NET BaseFolder>\Redist\4.0 folder to a folder that is inside your solution. - Then add references to the DLLs that you need in your project. - DLLs you MUST add if you compile for the VO/Vulcan dialect with the Vulcan runtime: - - -
  • VulcanRT.DLL
  • -
  • VulcanRTFuncs.DLL
  • -
    - - These 2 files are NEVER added to your Vulcan projects, Vulcan adds a reference to these DLLs automatically. XSharp does not do that, so you should add them yourself. - DLLs that you MAY want to add, depending on what you are using in your application: - - -
  • VulcanVOSystemClasses.dll
  • -
  • VulcanVORDDClasses.dll
  • -
  • VulcanVOGUIClasses.dll
  • -
  • VulcanVOInternetClasses.dll
  • -
  • VulcanVOSQLClasses.dll
  • -
  • VulcanVOConsoleClasses.dll
  • -
  • VulcanVOWin32APILibrary.dll
  • -
    - - DLLs that you normally do NOT add to your project (these are handled automatically by the Vulcan Runtime) - -
  • VulcanRDD.DLL
  • -
  • VulcanMacroCompiler.DLL
  • -
  • VulcanDBFCDX.dll
  • -
  • VulcanDBFFPT.dll
  • -
    + XSharp 3 no longer suppport "Bring Your Own Runtime". To compile in a dialect other than Core you need to include a reference to the X# Runtime. + You can still include references to the Vulcan Runtime DLLs in your project but the types and functions in these assemblies are treated like any other .Net assembly.
    diff --git a/docs/Help/Topics/Combining-X-Runtime-and-Vulcan.xml b/docs/Help/Topics/Combining-X-Runtime-and-Vulcan.xml index 3ec129d162..7196cc8a00 100644 --- a/docs/Help/Topics/Combining-X-Runtime-and-Vulcan.xml +++ b/docs/Help/Topics/Combining-X-Runtime-and-Vulcan.xml @@ -1,13 +1,12 @@  - + Combining X# Runtime and Vulcan Runtime
    Combining X# Runtime and Vulcan Runtime
    - Technically, it is possible to include both the X# and the Vulcan runtime libraries in your application. When you do so, the compiler will assume that you want to use the X# implementations for the XBase types such as USUAL and DATE. If the compiler does not find the XSharp.Core and XSharp.VO assemblies, it will assume that you want to map these types to the Vulcan runtime types. - Even though you can mix things, if you want to call code in the Vulcan runtime DLLs, you may have to use the fully qualified classnames or typenames. + Technically, it is possible to include both the X# and the Vulcan runtime libraries in your application. When you do so, the compiler will assume that you want to use the X# implementations for the XBase types such as USUAL and DATE. If the compiler does not find the XSharp.Core and XSharp.VO assemblies then it will only work in the Core dialect. And remember: there is no automatic translation between the X# types and Vulcan types. If you want to convert an X# variable to a Vulcan variable, you may have to cast it to an intermediate type first. diff --git a/docs/Help/Topics/Installation.xml b/docs/Help/Topics/Installation.xml index dcf8af257f..efbbd215f8 100644 --- a/docs/Help/Topics/Installation.xml +++ b/docs/Help/Topics/Installation.xml @@ -1,6 +1,6 @@  - + Installation component @@ -13,289 +13,300 @@ When you install XSharp, you will find the following folders on your machine: - +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + -
    + Folder + Setup component + Contents
    + C:\Program Files (x86)\XSharp + Main + Main installation folder
    + Assemblies + Main + The runtime assemblies that are selectable in the Add Reference dialog inside Visual Studio.
    Please note that this is a subset of the folders in the Redist Folder. For deploying your apps, please use the files in the Redist folder. In a future version, this folder may contain so called reference assemblies (assemblies with only meta data and no code).
    + Bin + main + The command line compiler, the Script interpreter and Vulcan XPorter.
    + Debug + main + Debug versions of the runtime DLLs and SDK DLLs (FOX only).
    + Extension + main + The components that must be installed inside Visual Studio for the X# project system and Language support. If you want to reinstall the project systems you should run the deployvs<num>.cmd  files in the Uninst folder. These files were created at install time and match your specific configuration of Visual Studio versions.
    + Help + main + The PDF, CHM help files and the Visual Studio help.
    + Images + main + Some images.
    + Include + main + XSharpDefs.xh and other header files needed by X#.
    + MsBuild + main + The MsBuild integration for XsProj files.
    - NetCore31 + + NetCore - main + + main\netcore - A version of the X# compiler and script engine for .Net Core 3.1 (FOX only). + + A version of the X# compiler and script engine for .Net
    - ProjectSystem + + Nuget - main + + main\nuget - VSIX files to install the project system and debugger inside Visual Studio.
    Only use these when the X# support team tells you to do so.
    +
    + The XSharp Nuget packages
    + Redist + main + Files that you may want to include with your application compiled with X#.
    + Templates - main + + main\dotnet - Contains the templates for the VO Compatible editors for Windows, Servers and Menus. + + Contains the templates for the command line creation of projects with dotnet new and File/New inside Visual Studio
    + Tools + main + Tools that are used during installation.
    + Uninst + main + The uninstaller and some cmd files generated during installation to register your X# Extension inside Visual Studio.
    It also contains cmd files created at install time to help generating native images for the X# compiler.
    The cmd files with the numbers 1-6 are used to install into different versions of Visual Studio.
    + + VFPXporter + + main + + The VFP Exporter +
    VOXPorter + main + The VOXPorter.
    + XIDE + xIde + The XIDE installer.
    + <Global Assembly Cache> + main\gac + X# runtime files will be installed in the GAC when this component is selected.
    + <Global Assembly Cache>\NativeImages + main\ngen + The X# compiler files will be precompiled when the option "Optimize performance by generating native images" is selected.
    + <Common Documents\XSharp\Examples + main\examples + The X# examples will be installed in the common documents folder when this option is selected.
    + Visual Studio folders + main\vs.. + X# will be integrated into Visual Studio when this is selected.
    - Visual Studio 2017 and/or 2019
    Assuming you have installed (one of) these in the default location:
    +
    + Visual Studio 2019
    Assuming you have installed (one of) these in the default location:
    c:\Program Files (x86)\Microsoft Visual Studio\<number>\<Version> then X# will be in the subfolder
  • Common7\IDE\Extensions\XSharp
  • + main\vs1 ..
    main\vs6
    + -
  • <number> is 2017 or 2019.
  • +
  • <number> is  2019.
  • <Version> can be one of Professional, Community, Enterprise or Buildtools.
    There can be more than one edition of VS2017/VS2019 on your machine. The installer will show all instances that are detected.
  • - Visual Studio 2022 + + Visual Studio 2022 & 2026 Assuming you have installed VS 2022 in the default location:
    c:\Program Files\Microsoft Visual Studio\2022\<Version>
    then X# will be in the subfolder
  • Common7\IDE\Extensions\XSharp
  • + main\vs1 ..
    main\vs6
    + -
  • <Version> can be one of Professional, Community, Enterprise or Buildtools.
    There can be more than one edition of VS2017/VS2019 on your machine. The installer will show all instances that are detected.
  • +
  • <Version> can be one of Professional, Community, Enterprise or Buildtools.
    There can be more than one edition of VS2022/VS2026 on your machine. The installer will show all instances that are detected.
  • + Registry The installer will also write some changes to the registry: @@ -314,22 +325,32 @@
  • HKCR\XSharp.sourcefile
  • + main
    main\script
    +
    + Environment variables The installer creates / modifies the following environment variables XSHARPPATH XSHARPMSBUILDDIR + + +
    + User Folders
    The XSharp installer will register your nuget packages in the folder
    c:\Users\yournamet\AppData\Roaming\NuGet
    +
    + + The installer will add a section to the NuGet.Config file with the package source "XSharp Offline Packages" and will map the packages with the name "xsharp.*" to this package source.
    diff --git a/docs/Help/Topics/Known-Issues-in-XSharp-3.xml b/docs/Help/Topics/Known-Issues-in-XSharp-3.xml new file mode 100644 index 0000000000..2e29241439 --- /dev/null +++ b/docs/Help/Topics/Known-Issues-in-XSharp-3.xml @@ -0,0 +1,17 @@ + + + + Known Issues in XSharp 3 + +
    + Known Issues in XSharp 3 +
    + Known issues + +
  • Renaming an item in a SDK project also sometimes fails.
  • +
  • There is no dialog yet in Visual Studio to declare GLOBAL USINGs at the project file level
  • +
  • Projects that are Multi-Targeting (that have a TargetFrameworks property are supported, but only one Framework is built when opened inside Visual Studio. The project system renames the node to XTargetFrameworks, and adds a TargetFramework property with the active framework. When saving this is reversed and the last selected active target framework is stored in the project file as ActiveTargetFramework, so it can be restored the next time that the project is opened.
  • +
  • We have occasionally seen that switching a single targeting project from one version to another may cause Visual Studio to hang.
  • +
    + +
    diff --git a/docs/Help/Topics/Nuget-Packages.xml b/docs/Help/Topics/Nuget-Packages.xml new file mode 100644 index 0000000000..de6e51bf72 --- /dev/null +++ b/docs/Help/Topics/Nuget-Packages.xml @@ -0,0 +1,119 @@ + + + + Nuget Packages + +
    + Nuget Packages +
    + XSharp 3 comes with nuget packages for the runtime.
    These packages contain assemblies and support files for both .Net Framework 4.6 and .Net 8.0
    + There are the following packages: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Package + + Contains + + Depends on +
    + XSharp.Core + + XSharp.Core.dll + + nothing +
    + XSharp.RT + + XSharp.RT.DLL
    XSharp.RT.Debugger.DLL
    + XSharp.MacroCompiler.dll
    XSharp.Data.DLL
    XSharp.RDD.DLL
    +
    + XSharp.Core +
    + XSharp.VO + + XSharp.VO.dll + + XSharp.RT +
    + XSharp.VFP + + XSharp.VFP.dll + + XSharp.RT +
    + XSharp.XPP + + XSharp.XPP.dll + + XSharp.RT +
    + XSharp.Harbour + + XSharp.Harbour.dll + + XSharp.RT +
    + XSharp.VOSDK
    For .Net framework 4.6
    +
    + VOConsoleClasses.dll
    VOSystemClasses.dll
    + VORDDClasses.dll + VOGUIClasses.dll
    VOSQLClasses.dll
    VOInternetClasses.dll
    VOWin32APILibrary.dll
    VOReportClasses.dll
    +
    + XSharp.VO +
    + XSharp.VOSDKTyped + + XSharp.VOConsoleClasses.dll
    XSharp.VOSystemClasses.dll
    + XSharp.VORDDClasses.dll + XSharp.VOSQLClasses.dll +
    + XSharp.VO +
    + +
    diff --git a/docs/Help/Topics/RECORD-statement.xml b/docs/Help/Topics/RECORD-statement.xml index bb82e7e3a0..9304246c2b 100644 --- a/docs/Help/Topics/RECORD-statement.xml +++ b/docs/Help/Topics/RECORD-statement.xml @@ -1,6 +1,6 @@  - + RECORD modifier
    diff --git a/docs/Help/Topics/The-X-Runtime.xml b/docs/Help/Topics/The-X-Runtime.xml index 8e227a7b80..08c1a284a4 100644 --- a/docs/Help/Topics/The-X-Runtime.xml +++ b/docs/Help/Topics/The-X-Runtime.xml @@ -1,6 +1,6 @@  - + The X# Runtime
    @@ -11,7 +11,6 @@ In this chapter, we would like to give you an overview of the design decisions that we made, what the run time looks like, where you can find which types and functions, etc. We will also list the features that are not supported yet here. Introduction - When we designed the X# compile and X# Runtime, we had a few focus points in mind:
  • The language and runtime should be VO compatible whenever possible. We know that the Vulcan devteam made some decisions not to support certain features from VO, but we decided that we would like to be as compatible as technically possible.
  • @@ -53,7 +52,7 @@ X# Core - 4.6 + 4.6 / 8.0 @@ -67,7 +66,7 @@ X# Core - 4.6 + 4.6 / 8.0 @@ -81,7 +80,7 @@ X# non - core - 4.6 + 4.6 / 8.0 @@ -95,7 +94,7 @@ X# core - 4.6 + 4.6 / 8.0 @@ -109,7 +108,7 @@ X# VO and X# Vulcan - 4.6 + 4.6 / 8.0 @@ -123,7 +122,7 @@ X# XPP - 4.6 + 4.6 / 8.0 @@ -137,7 +136,7 @@ X# FoxPro - 4.6 + 4.6 / 8.0 @@ -151,7 +150,7 @@ X# Core - 4.6 + 4.6 / 8.0 @@ -165,7 +164,7 @@ X# Core - 4.6 + 4.6 / 8.0 @@ -179,7 +178,7 @@ X# Core - 4.6 + 4.6 / 8.0 diff --git a/docs/Help/Topics/VersionHistory.xml b/docs/Help/Topics/VersionHistory.xml index 213bb1f461..69f3210c29 100644 --- a/docs/Help/Topics/VersionHistory.xml +++ b/docs/Help/Topics/VersionHistory.xml @@ -1,5600 +1,64 @@  - + Version History Changes Runtime chapter String Literals + Version History + XSharp 3
    Version History
    - Note: When an item has a matching GitHub ticket, the ticket number is behind the item in parentheses prefixed with #. You can find these tickets by going to:
    https://github.com/X-Sharp/XSharpPublic/issues/nnn , where nnn is the ticket number.
    If you find an issue in X#, we recommend that you report it on GitHub. You will be notified of the progress on the work on your issue.
    - Changes in 2.24.0.1 - Compiler
    Bug fixes
    + Note: When an item has a matching GitHub ticket, the ticket number is behind the item in parentheses prefixed with #. You can find these tickets by going to:
    https://github.com/X-Sharp/XSharpPublic/issues/nnn , where nnn is the ticket number.
    If you find an issue in X#, we recommend that you report it on GitHub. You will be notified of the progress on the work on your issue
    + Changes in 3.0.0.0 + XSharp 3 is a MAJOR update from XSharp 2. All elements of the product have been touched during the last couple of months. X# 3 has some breaking changes, so you should take the time to recompile and test all your existing projects and solutions. + Breaking changes + Compiler -
  • Documentation generation for VFP classes for members without visibility modifier was not working (#1664)
  • -
  • Fixed an issue with default parameter values, where the type of the default did not match the type of the parameter. For example using a LONG default value for a Decimal parameter (#1733)
  • +
  • The compiler no longer supports "Bring Your Own Runtime". If you want to compile in the VO or Vulcan dialect you will HAVE to include references to XSharp.Core and XShar\p.RT.
    That does not mean that you can't link your program against the Vulcan runtime DLLs, but we no longer map our Xbase types to the types in these DLLs. So USUAL will not be mapped to Vulcan.__Usual. You can still use the types, functions and classes on these DLLs, but they will no longer be treated specially. If you want to call a function from the Vulcan Runtime yuou will have to use the syntax for static methods
  • - Build System
    Bug fixes
    - -
  • The WriteCodeFragment task now properly supports the _Parameter1, _Parameter2 etc parameters, just like the C# build system does.
  • -
    - Runtime
    Bug fixes
    - -
  • Fixed an issue with late bound calls to overloaded methods (#1696)
  • -
  • Fixed problem with ambiguous call error on the GoMonth() function (VFP dialect) (#1724)
  • -
  • Fixed problem with the COPY TO command when using the VIA clause (#1726)
  • -
    - Visual Studio integration
    Bug fixes
    - -
  • When a file was deleted from a project, then the file would not be deleted from the intellisense database. This has been fixed.
  • -
  • Goto definition no longer includes source from prg files with buildaction None (#1630)
  • -
  • Intellisense was not showing field in VFP classes for fields without visibility modifier (#1725)
  • -
  • The ToggleLineComment and ToggleBlockComment functions were not properly maintaining leading whitespace (#1728)
  • -
  • Fixed an issue with Code Generation for AssemblyCustomAttributes
  • -
  • Fixed a problem with the Debugger Expression Evaluator in VS 2017 and VS 2019
  • -
    - New Features - -
  • Added context menu option to generate Windows Forms Form from an existing VO Form (#1366)
  • -
  • The code generator now automatically generates END CONSTRUCTOR, END METHOD etc.
  • -
    - VOXporter - New features - -
  • Add special tags "VXP-NOCHANGE", "{VOXP:NOCHANGE}" that instruct VOXporter to not modify at all the code from a module/prg file  (#1723)
  • -
    - XIDE - General - -
  • Added View->Hide Side Panes (SHIFT+F4) option to quickly show/hide the left/right panes in the IDE
  • -
  • Enabled the Debug->View DB Workareas debug window
  • -
  • Fixed problem with new applications defaulting to CLR2 when no gallery template is used
  • -
  • Added folder button for "App to run" option in th application properties window
  • -
  • Added several "Tip of the day" items
  • -
  • Added Preferences/Highlight active file caption option
  • -
  • Added Preferences/Paint file captions per application option
  • -
  • Added keyboard shortcut information to the File->Navigate menu items
  • -
  • Added "Dock To Pane" options to tab page context menu of toolwindows
  • -
  • Added Detach/Attach to main IDE window context menu options for editor files
  • -
  • Added regular context menu options also for files in floating windows
  • -
  • Toolwindows can now be closed also with middle mouse button click
  • -
    - Changes in 2.23.0.2 - Compiler - New features - -
  • Added a compiler warning when assigning a constant "NIL" to a non-usual var (#1688)
  • -
    - Bug fixes - -
  • Fixed a problem with XML documentation generation for class properties in the VFP dialect (#1664)
  • -
  • Fixed compiler crash with syntax errors in interpolated strings (#1672)
  • -
  • Fixed problems with static entities when an app has prg files with similar names (#1677)
  • -
  • Fixed conflict between same named access and field in a parent class (#1679)
  • -
  • Fixed problem with the star (*) comment line marker when used with a semi-colon (;) in the VFP dialect (#1685)
  • -
    - Build System - -
  • Moved suppressed warnings from the DisabledWarnings property to NoWarn (#1697)
  • -
    - Runtime - New features - -
  • Added additional sort functions ASortFunc() and ASortEx() for arrays allowing .Net style sorting (#1683)
  • -
  • Added untyped overloads for VFP functions GoMonth(), Quarter(), Week(), DMY() and MDY() (#1724)
  • -
  • Implemented the Seek() function in the VFP runtime library (#1718)
  • -
  • Allow to register special error handler that is called for errors during macro compilation (#1686)
    To use this, declare a function or method with the following prototype:

    DELEGATE CodeblockErrorHandler(cMacro as STRING, oException as Exception) AS ICodeBlock
  • -
    -
    And register it as the codeblock error handler like this:
    RuntimeState.CodeBlockErrorHandler := CodeBlockErrorHandler
    When the function / method returns NULL then an exception is thrown.
    When the function/ error handler returns a Codeblock then this codeblock is used to evaluate the macro. For example:

    FUNCTION CodeBlockErrorHandler(cMacro AS STRING, oEx AS Exception) AS ICodeblock
      ? Mmacro
      ? oEx:Message
      // Visual Objects returns NIL when an error like this happens
    RETURN {|| NIL }

    FUNCTION Start() AS VOID STRICT
      RuntimeState.MacroCompilerErrorHandler := CodeBlockErrorHandler
      ? &("'aaa'bbb'")    // uneven # of single quotes, an error.
                          // Returns NIL because the ErrorHandler returns a codeblock with NIL
    - Bug fixes - -
  • Fixed problem with COPY TO ARRAY / DbCopyToArray() with fields of type "G" (#1530)
  • -
  • Fixed problem with ASort() returning inconsistent results when using the .Net Framework 4.5 sorting routines (#1653)
  • -
  • Fixed problem with Integer() function depending on the SetFloatDelta() setting (#1676)
  • -
  • Fixed several problems with default method parameters in late bound calls (#1684)
  • -
  • Fixed problem with IVarGetInfo() with overrided ASSIGN methods with different casing (#1692)
  • -
  • Fixed problem with ENUM parameters in alte bound calls (#1696)
  • -
  • Fixed (handled) exception inside FindMethod() in late bound code with similar named method and assign (#1702)
  • -
  • Fixed problem with ProcName(x) returning incorrect results (#1704)
  • -
  • Fixed problem with calling class access method through object instance in the XBase++ dialect (#1705)
  • -
  • Fixed problem with File() function not finding files after changing the current directory with DirChange() (#1706)
  • -
  • Fixed several compatibility issues with the Directory() function (#1707 and #1708)
  • -
    - Macro compiler - -
  • Integer divisions in macros now return a float result instead of INT (#1641)
  • -
  • Allowed the macro compiler to access protected and private members in the FoxPro dialect (#1662)
  • -
  • Fixed macro compiler problem with IN parameters (#1675)
  • -
  • Fixed various problems with scripting and ExecScript() (#1646, #1682)
  • -
  • Fixed problem with failing to find overload with explicit cast to interface (#1720)
  • -
    - RDD System - -
  • Fixed problem with opening dbf files with no extension (#1671)
  • -
  • Fixed problem with DbServer:OrderScope() always returning NIL without a new value and setting the scope to NIL (#1694)
  • -
    - Typed VO SDK - -
  • Fixed problem with MouseMove( oMev) not being called for a FixedText (#1680)
  • -
  • Added a property EnableDispatch to the Window class. When set to TRUE then the Dispatch() method is called. (#1721)
  • -
    - Visual Studio integration - Bug fixes - -
  • Fixed editor problem with incorrectly displaying region markers for multiline statements with comments (#1667)
  • -
  • Fixed incorrect code highlight of the "is not null" code pattern (#1699)
  • -
    - New Features - -
  • Added support for the editor commands Edit.ToggleLineComment and Edit.ToggleBlockComment
  • -
    - XIDE - General - -
  • Added toolbar button to collapse all nodes in the Project window
  • -
  • Added support for selecting the editor color for escaped literals in the Preferences window and through the plugin system
  • -
  • Added context menu option to copy all contents/only code in the Find results window
  • -
  • The control order window now support moving items (tab order) with the keyboard, by using CTRL or SHIFT + Up/Down
  • -
  • Fixed a problem with incorrectly highlighting Func<T> as a keyword
  • -
  • Project/application export now includes also native resource files (.rc)
  • -
  • Some improvements to the TipOfTheDay window
  • -
  • Messages in the Errors tool window can now be sorted by file, application etc., by clicking on their respective column header
  • -
  • Improved functionality of the Remove/Remove All toolbar button in the Breakpoints, Bookmarks and Watch tool windows
  • -
  • Fixed modifying values of local variables in the debugger (still can't modify object members though)
  • -
  • A lot of improvements to the Edit->Sort Entities command
  • -
    - Plugin System - -
  • Added callback method Plugin:OnProjectItemSelected() that gets called when any item is selected in the Project tool window
  • -
  • Added method PluginService:GetPropertiesPad() AS PropertiesPad for retrieving the Properties tool window
  • -
  • Added support for handling (through PluginService:GetSelectedProjectItem()) many more item types in the Project tool window: ReferenceGroup, Reference, Resource files etc
  • -
  • Fixed a problem (crash) with manipulating hidden editor files
  • -
    - Documentation - Bug fixes - -
  • Fixed documentation problems for the topics CONSTRUCTOR, DESTRUCTOR, ENUM, EVENT, FUNCTION, METHOD OPERATOR, PROPERTY, STRUCTURE (#1655)
  • + Runtime + +
  • The signature for several functions and methods in the X# Runtime has been changed. We have used the new IN keyword for many that use parameters defined AS USUAL. The new IN USUAL tells the compiler to pass the variable by reference, which should make the code slightly faster. It also tells the compiler that the parameter will not be changed by the code in the function / method
  • +
  • We have also moved several functions and types between Runtime DLLs, because they were not in the best possible location.
  • +
  • X# 3 comes with runtime DLLs for both .net 46 and .net 8. Not all VOSDK Dlls have been ported to .Net 8 because they contain code that does not work in a AnyCPU environment.
  • - Changes in 2.22.0.1 - Compiler - Bug fixes - -
  • Fixed problem with incorrect error line for unknown var in RECOVER USING statement (#1567)
  • -
  • Fixed a compiler crash with default values in parameters (#1647)
  • -
  • Fixed problem with text in the VOWED ToolBox window appearing mangled when font scaling is used in the OS (#1650)
  • -
  • Fixed error when adding COM references to a project (#1654)
  • -
    - Build System - -
  • Some project files that were converted from Vulcan could cause problems locating errors from the error list. This has been fixed: the property GenerateFullPaths  is now always set to TRUE when building inside Visual Studio.
  • -
  • The files LastXSharpResponseFile.Rsp and LastXSharpNativeResourceResponseFile are now always created in the temp folder, and not in the MSBuildTemp subfolder in the temp folder.
  • -
    - Runtime - Bug fixes - -
  • ExecScript() now calls the scripting code in the new macro compiler (#1646)
  • -
    - New features - -
  • Marked SetCPU() and SetMath() as obsolete
  • -
  • Bin2Ptr() and Ptr2Bin() now also work in X64 mode. The strings returned or expected are 8 characters long.
  • -
    - RDD System - -
  • Fixed problem with DbOrderInfo() returning wrong key count when using a bottom scope higher that the highest index value (#1652)
  • -
    - VOSDK - -
  • Fixed problem with DataDialog:ToolBar returning always NULL, even if a toolbar object is assigned (#1660)
  • -
    - VOXporter - New features - -
  • Now binaries and support files for visual editors are being generated also when importing from .mef  (#1661)
  • -
    - Visual Studio integration - Bug fixes - -
  • Fixed IntelliSense problem with user extensions methods (#1421)
  • -
  • Fixed problem in Format Document with DEFINEs (#1642)
  • -
  • Fixed problem with reading Assembly info when assembly does not exist (#1645)
  • -
  • Fixed problem in the VFP Class project template with the DEFINE CLASS syntax (#1648)
  • -
  • Fix for issue with the font size on the toolbox for the Window Editor (#1650)
  • -
  • Fix for issue adding a COM reference to a project (#1654)
  • -
    - XIDE - General - -
  • Implemented "Tip of the Day" feature
  • -
  • Increased the time Project window searcher tip appears visible from 2 to 5 seconds
  • -
  • Added functionality in the Project window to repeat last search with F3
  • -
  • Added vertical scrollbar to the Locals details edit box
  • -
    - Editor - -
  • Fixed problem with recognizing some positional keywords like CONSTRUCTOR
  • -
  • Fixed intellisense problems with X# specific data types (USUAL, FLOAT, DATE etc)
  • -
  • Fixed intellisense problem reading functions from X# assemblies with special characters in their names
  • -
    - Designers - -
  • Fixed a problem with unlocking controls in the Forms designer
  • -
    - Plugin System + Compiler
    New Features
    -
  • Added method ProjectItemBase:SelectNodeInProjectPad() (applies to all project item types)
  • -
  • Added properties Editor:LineHeight, Editor:LineCount and Editor:FirstVisibleLine
  • -
  • Added methods PluginService:GetEditorColor(eColor AS EditorColor) and PluginService:SetEditorColor(eColor AS EditorColor, oColor AS Color)
  • +
  • GLOBAL USING
  • +
  • File wide NAMESPACE
  • +
  • RECORD modifier for classes and structures
  • - Documentation - Bug fixes + Bug fixes + Build System
    New Features
    -
  • The [View Source] link was pointing to a feature branch on Github. It now points to the main branch.
  • -
  • Updated the help topic about Interpolated strings.
  • -
    - Changes in 2.21.0.5 - Possibly breaking changes in 2.21.0.5 - All dialects - Until now, the compiler had several built-in defaults for command line options based on the dialect. - That meant that when a command line option was NOT present and a certain dialect was chosen, then that option would be automatically enabled. We are talking about the following options: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Dialect - - Option -
    - Core - - AllowNamedArgs -
    - Core - - AllowDot -
    - FoxPro - - AllowDot -
    - FoxPro - - AllowOldStyleAssignments -
    - FoxPro - - Vo9 -
    - FoxPro - - Vo15 -
    - FoxPro - - InitLocals -
    - Other - - Vo15 -
    - - This was confusing for some of you (and also for us). For example, you would have to explicitly add the command line option /initlocals- when compiling in the FoxPro dialect if you wanted to disable the option. - - On top of that, the MsBuild system also did not pass command line arguments to the compiler, if a certain property that matched that compiler option was not present in the project file. So, if the project file did not contain the <AllowDot> node, then the command line option /allowdot would be enabled if the project was compiled in the Core dialect, but disabled when the project was compiled in the VO or Xbase++ dialect. Very confusing! - - To fix this, we have done the following +
  • The Build system now supports the new SDK style projects
  • +
  • We have added a task to generate source code for GLOBAL USING values declared in the project files. Please note that the VS integration does not have a page to declare the GLOBAL USING values for a project. That will follow.
  • +
  • The XAML files in the Rules subfolder of the MsBuild folder are no longer used and have been deleted. Also the references to these files in the .props and .targets files have been removed
  • +
  • The builds system no longer automarically picks up the include folder from your Vulcan installation
  • +
  • There are many changes in the .props and .targets files to support SDK style projects and .Net 10. One of these changes automatically sets dependency relations between files, such as between VOBinary files and the module that they belong to.
  • +
    + Bug fixes + Runtime
    New Features
    -
  • The defaults are removed from the compiler.
  • -
  • The Build system will generate command line options with a '-' flag for options that are not defined in the project file. This will happen for X# specific commandline options only. Compiler options that we have "inherited" from Roslyn, such as /debug, /optimize etc. will remain working like before.
  • -
  • When opening a project file inside Visual Studio, we will check for the dialect and the options that are listed above. If an option is missing from the projectfile then we will add that option with the value "true". We will also remove options that are not relevant to the dialect. For example: for the core dialect, the foxpro and xpp specific settings will be removed.
  • -
    - - This should normally result in the same compilation as before. The only difference that you may see is that project files are automatically updated when you open them with this build. - FoxPro dialect - Until now the DEFINE CLASS syntax could be used to create classes that inherit from the FoxPro Compatible Custom class, but also from other .Net classes. That has proven to be a bit complicated. - There also was a /fox1 compiler option that makes the AS ParentClass clause from the DEFINE CLASS command optional. Classes without AS ParentClass will then automatically inherit from Custom. - - We have made the following changes: - -
  • The AS BaseType clause will be mandatory like in Visual FoxPro
  • -
  • The ParentType must be Custom, or a class derived from Custom.
  • -
  • The /fox1 compiler is now obsolete
  • -
    - - If you want to inherit from a class outside the VFP class hierarchy (a standard .Net class) then you will have to use the CLASS ... END CLASS syntax. - Compiler - Bug fixes - -
  • Fixed Internal Compiler Error with duplicate declaration of fields/memvars (#1475)
  • -
  • Fixed a bogus warning when calling a function with in VFP dialect with /fox2 enabled (#1476)
  • -
  • Fixed problem with Min/Max IEnumerable extension methods of FLOAT type (#1482)
  • -
  • Fixed a StackOverflowException on access/assign method in the XBase++ dialect (#1483)
  • -
  • Fixed problem reading clipper/harbour .prg files with end of file marker (#1485)
  • -
  • Fixed problem with the extended expression match marker in the preprocessor (#1487)
  • -
  • Fixed problem passing array reference or ivar by reference in the XBase++ dialect (#1492)
  • -
  • Fixed AmbiguousMatchException in Evaluate() function for methods included in an interface (#1494)
  • -
  • Fixed problem with /fox1 switch being ignored in some cases (#1496)
  • -
  • The Build System now automatically adds a TargetFramework Attribute to assemblies compiled with X# (#1507)
  • -
  • Fixed an ambiguity problem with identical names in namespace and property, and several issues encountered when the /allowdot option is disabled (#1515)
  • -
  • Fixed problem in TEXT TO/ENDTEXT with TEXTMERGE clause (#1517)
  • -
  • Fixed misleading line number reported in the compiler error about requiring the /memvar option (#1531)
  • -
  • Fixed some issues with defining indexed properties (#1543)
  • -
  • Fixed several issues with the /vo9 (handle missing RETURN statements and return values) compiler option (#1544)
  • -
  • Fixed parser problem with END DEFINE, END PROCEDURE and END FUNCTION in the VFP dialect (#1564)
  • -
  • Fixed problem with using attributes in CLASS Statement in the FoxPro dialect (#1566)
  • -
  • Fixed macro compiler problem with compiling strongly typed codeblocks (#1591)
  • -
  • Fixed problem with Attributes being ignored for properties defined with the DEFINE CLASS syntax in the VFP dialect (#1612)
  • -
  • The compiler could crash when building a solution that has a .editorconfig file
  • -
  • Fixed an issue with generating the property output for attributes on Members inside a FoxPro style class definition
  • -
  • Fixed typo in error message about defining a class without an AS clause in the VFP dialect (#1611)
  • -
  • Added support for generic types without type parameters, like in typeof(List< >) and typeof(Dictionary<,>) (#1623)
  • -
  • Changes to the FoxPro compatible DEFINE CLASS (see above)
  • -
  • Changes to the way how missing commandline arguments are handled (see above)
  • -
  • We have added the double colon (::) separator for interpolated strings to separate the expression from the format specifier. C# uses the single colon (:) but that character is also used as member access operator in X#.See the String Literals topic for more information.
  • -
    - Build System - -
  • We have fixed an issue in the build system that would sometimes lead to a recompilation, even when nothing was changed.
  • -
    - -
  • Fixed an issue where the language in the machine.config did not match the language defines in the built system
  • -
  • Fixed a problem that caused the .xml doc files to be written to the wrong folder
  • -
  • Changes on how missing project file properties are translated to command line arguments (see above)
  • -
    - Runtime - Bug fixes - -
  • Fixed some DBSetFilter() incompatibilities with VO (#1489)
  • -
  • Fixed problem with DBSetFilter() with no matching records causing subsequent calls to DBSetFilter() or DBClearFilter() to fail (#1493)
  • -
  • Fixed problem (missing implementation) with the WITH CDX clause in the FoxPro COPY command (#1497)
  • -
  • Fixed problem with SCATTER/GATHER MEMO MEMVAR (#1510, #1534)
  • -
  • Fixed a problem with the Collection class not increasing the Count property when adding an item (FoxPro dialect) (#1528)
  • -
  • Fixed problem with the APPEND FROM command with a FOR clause (#1529)
  • -
  • Fixed macro compiler problem with using Str() in the FoxPro dialect (which was causing problems in the INDEX ON command) (#1535)
  • -
  • Fixed a macro compiler problem with some language keywords (like REF, FIELD, DEFAULT) used as identifiers (#1557)
  • -
  • Fixed problems with the REPLACE, DELETE and UPDATE commands in the VFP dialect (#1574, #1575, #1576, #1577)
  • -
  • Fixed an issue in the USUAL type where CompareTo for Float values was not correctly implemented (#1616)
  • -
  • Fixed an issue in the USUAL type where the ! operator was not producing the correct results compared with the (LOGIC) cast.
  • -
  • We have fixed several issues in the XSharp.VFP.UI library
  • -
    - RDD System - -
  • Fixed a problem in DbZap() with DBFNTX (#1509)
  • -
  • Fixed problem with DBSetOrder(0) always returning FALSE in DBFNTX (#1520)
  • -
  • Suppressed runtime error when using FieldPut() when workarea is at EOF, for compatibility with VO (#1542)
  • -
  • Fixed problem in OrderDescend() with the AXDBFCDX driver (#1608)
  • -
  • Fixed problems with reading variable-length fields in DBF files stored using MultiByte encoding.
  • -
  • Fixed a problem where DBFs encoded with Simplified Chinese were interpreted as Cantonese.
  • -
  • Fixed an issue in the DBF RDD where the currentbuffer was not reloaded after a record or file lock was acquired.
  • -
  • We have fixed an issue with DBF files larger than 2 Gb (0x7FFFFFFF bytes)
  • -
  • Creating UNIQUE indexes in the DBFCDX driver would exclude the first record from the DBF file
  • -
    - VOSDK - -
  • Fixed typo in Window:__CommandFromEvent that was causing commands from SEUIXP to throw a runtime error.
  • -
    - Visual Studio integration - Bug fixes - -
  • Fixed problem with saving/reading the OldStyleAssignment compiler option project setting (#1495, #1582)
  • -
  • Fixed an issue in VS2022 where several features in the editor were no longer working due to a change in VS (#1545)
  • -
  • Fixed editor indentation problem with SCAN...END SCAN (#1549)
  • -
  • Fixed a problem with putting the .resx file for windows forms user controls in an incorrect location in the Solution Explorer (#1560)
  • -
  • Fixed problem with editor snippets no longer working in VS 2022 version 17.11 (#1564)
  • -
  • Fixed problem with the parameter list auto-showing tooltip when using <Enter> to accept a method from the member completion list (#1570)
  • -
  • Fixed a problem with indenting lines with end keywords, such as NEXT and ENDDO, when these keywords were following by 'garbage'.
  • -
  • Opening a form in the VS Form designer could fail when one of the include files declared entities, such as USING SomeNameSpace (#1595, #1596)
  • -
  • Fixed an issue in the debugger where identifiers that start with a '$' character, such as "$exception" in the exception dialog were not properly evaluated (#1602)
  • -
  • Fixed a problem with the indentation of VFP Style classes declared with DEFINE CLASS  ... ENDDEFINE (#1609)
  • -
    - New features - -
  • The TargetFramework attribute is now automatically added to the assembly when building any project type in VS. (#1507)
  • -
  • Added support for the GotoBrace command.This works for normal braces, but also for keyword pairs such as IF .. ENDIF. (#1522)
  • -
  • The editor now has a combobox on the top left that shows the project in which the file is defined.
  • -
  • When a file is present in multiple projects (as Linked file), the project's combobox will show the names of all projects that use the file.
  • -
  • When selecting a different project from this combobox, the buffer will be repainted, because conditional compilation symbols may differ for each of the projects.
  • -
  • When you use intellisense in the editor, the lookup engine will use the project selected. So, if a file is used in 2 projects, the references and source files of the selected project will be used to find reference data.
  • -
  • Added support for correct indentation with FoxPro variations of closing keywords, such as ENDFOR and ENDWITH.
  • -
  • We have moved several X# language related features from the Project System to the Language Service to prepare for the new Project System for SDK projects.
  • -
  • We have added support for Snippets in the CompletionLists at "file" level.
  • -
  • We no longer create an X# intellisense database for solutions that do not have any X# projects.
  • -
  • We have made several changes to the X# intellisense database structure. When you open a solution with an existing database, the database will be deleted and all source files will be rescanned (only once).
  • -
  • The X# source code editor now has an extra combobox on the top, listing the projects where a file is included. When a file is included in more than one project, all these projects can be seen. Switching to a new project will change the 'evaluation context'. Conditional compiles (#ifdef) will reflect the change in the editor.
  • -
  • We have added support for the commands Edit.NextMethod and Edit.PreviousMethod in the editor. There usually is no shortcut for these commands, but you can assign them with the "Customize" option on the Toolbar in Visual Studio. You could assign Ctrl-DownArrow and Ctl-UpArrow for example.
  • -
  • Improved the Clone Window selection dialog in the VOWED (#1508)
  • -
  • When selecting multiple controls in the VOWED, now that lastly selected control becomes the "active" one for the Properties window
  • -
  • When pasting a control in the VOWED, it now goes to the bottom of the control order list
  • -
    - -
  • Added option in the VOWED Control Order dialog to start adjusting the control order of controls after the currently selected one when using "Use Mouse"
  • -
  • The VO binary editors now preserve the SEALED modifier when generating code. Also PROTECT fields of sealed classes become PRIVATE (#1628)
  • -
    - -
  • Updated the Mono.Cecil library to 0.11.6
  • -
  • Project files are adjusted when properties that were "implicit" before are missing (see above)
  • -
    - XIDE - General - -
  • Replaced System.Reflection with Mono.Cecil in intellisense for improved performance and stability.
  • -
  • The Toolbox Editor also now uses Mono.Cecil for reading controls from dlls.
  • -
  • When closing a file directly after opening it (without first activating another file), focus now goes back to the previously active file just before opening the new one.
  • -
  • Improved support for standalone files, added options in their properties window for dialect, references etc.
  • -
  • Changed default names of various XIDE support files to "xi" instead of "vi" (.xiaef, xiapp etc).
  • -
  • Fixed problem with accidentally calling older versions of the XIDE resource compiler and toolbox editor.
  • -
  • Added "%OUTPUTEXT% (extension of output assembly) macro in build events.
  • -
  • Added support for the /allowdot compiler option in the application properties, enabled by default in all applications.
  • -
  • Fixed problem with not properly saving the compiler options /initlocals, /modernsyntax, /allowoldstyleassignments and /namedargs.
  • -
  • The Clipboard item in the main XIDE window statusbar now shows the current clipboard contents in a tooltip.
  • -
  • The Clipboard selection context menu now also displays the contents of every virtual clipboard.
  • -
  • Added Open Bin Folder context menu option for the project node in the Project tool window.
  • -
  • Added option to the windows resource editor to include strings and text files.
  • -
  • Added application templates for FoxPro, XBase++, and Harbour dialects.
  • -
  • Application templates shown in the New Application dialog are now sorted by the GalleryIndex setting of each gallery file template.
  • -
  • Implemented new menu options View|Load/Save/Reset Layout, for switching between different layouts for the IDE window and tool windows
  • -
  • Added some new templates (code snippets) in template.cfg
  • -
  • Added project support for the /vo15 compiler option
  • -
  • Added standalone files default setting for the allowdot compiler option (Preferences/Compiler)
  • -
  • Added option to set the console location when running console apps (Preferences/Advanced)
  • -
  • Included several "hidden" commands in the main menu (File/Navigate and Edit/Advanced)
  • -
  • Improved deletion of items in the Watch tool window
  • -
  • Improved the About XIDE dialog.
  • -
    - Editor - -
  • Improved Recognition of positional keywords in the code.
  • -
  • Fixed recognition of two-letter long functions in code.
  • -
  • Fixed problem with intellisense on functions defined in core dialect apps.
  • -
  • Added intellisense support for FOREACH VAR.
  • -
  • Fixed crash with VAR locals in the editor.
  • -
  • Fixed several issues with LOCAL IMPLIED.
  • -
  • Fixed problem with parsing modified classes in namespaces.
  • -
  • Improved editor support for the FoxPro, Harbour, and XBase++ dialects.
  • -
  • Added editor support for a lot of FoxPro keywords.
  • -
  • Added editor support for FoxPro functions.
  • -
  • The editor now recognizes && for line comments marker in FoxPro dialect.
  • -
  • Added intellisense support for Nullable types specified with the ? postfix (for example, INT?).
  • -
  • Added intellisense support for the ?: operator.
  • -
  • Added intellisense support for IF <identifier> IS <type> VAR <local>
  • -
  • Added option (Preferences/Editor/Edit) to automatically adjust numeric literals containing underscores
  • -
  • Added context menu Surround with options for REPEAT..UNTIL and BEGIN SCOPE...END
  • -
  • Added (experimental) option to sort entities in the editor (Edit->Sort Entities)
  • -
    - - Designers - -
  • Items in the properties window of the VOWED are now sorted by name.
  • -
  • Controls in the WED can now be resized through the keyboard, using SHIFT+ Arrow keys.
  • -
  • When loading a WindowsForms form in the designer, all TabControls now have their first TabPage selected initially.
  • -
  • Auto-generated eventhandler method names now include an underscore between the control- and event-part of the name
  • -
  • Added option (Preferences/Designers) to add an END (METHOD, CONSTRUCTOR, etc.) statement in generated code.
  • -
  • Added option (Preferences/Designers) to enter current OS scaling setting (fixes problem with showing lasso lines at the wrong place when creating/moving controls in non-default settings).
  • -
  • Added toolbar button to Lock/Unlock controls in the Windows.Forms and VO Window editors.
  • -
  • Locked state of controls is now preserved in the Windows.Forms designer (needs a Save Form to apply).
  • -
  • Fixed problem with setting the Text property of strip items to empty.
  • -
  • Added option in the VOWED Control Order dialog to start adjusting the control order of controls after the currently selected one when using "Use Mouse".
  • -
  • Added components SaveFileDialog, OpenFileDialog and FolderBrowserDialog in the Windows.Forms toolbox
  • -
    - - Debugger - -
  • Exception dialog while debugging now properly shows the exception message.
  • -
  • Fixed a problem with incorrectly breaking on excluded handled exceptions.
  • -
  • Fixed a common crash that could happen in the debugger.
  • -
    - - Plugin System - -
  • Some small corrections to the Plugin System (you may need to recompile your plugins)
  • -
  • Added Plugin:OnAfterCompileApplication(oApp AS Application, eResult AS CompileResult) callback method
  • -
  • Added Editor:SetSelection() method to select text in the editor
  • -
  • Entity objects returned from the plugin system no longer include END CLASS and END NAMESPACE statements
  • -
    - Documentation - Bug fixes - -
  • Made many corrections to the documentation (#1504, #1506, #1514).
  • -
    - New Features - -
  • Several updates on the Chinese documentation.
  • -
  • Added missing SCAN...ENDSCAN documentation (#1548).
  • -
  • Added missing available constants for DBOrderInfo() function topic (#1565).
  • -
  • Fixed incorrect text in documentation about the -memvar option (#1621)
  • -
    - - Changes in 2.20.0.3 - Compiler - Bug fixes - -
  • Fixed problem with the USE command with an AGAIN clause in the FoxPro dialect (#235).
  • -
  • Fixed problem with calling typed array constructors with named parameters when compiling with the /namedargs compiler option enabled (#1430).
  • -
  • Fixed inconsistency with the INSTANCE keyword and the use inside the class (#1432).
  • -
  • Fixed problem with the REPLACE UDC that could prevent the use of a variable named "replace" (#1443).
  • -
  • Fixed problem with the /vo9 (handle missing RETURN statements) compiler option with ACCESSes in PARTIAL classes (#1450).
  • -
  • Fixed problem with the Lexer recognizing line continuation characters inside a string in the FoxPro dialect (#1453).
  • -
  • Fixed problem with the memvar pragma option (#1454).
  • -
  • Fixed a problem with the /xpp compiler option. (#1243, #1458).
  • -
  • Fixed a problem with accessing Hidden class members in a method from the class where the member was defined, when the object involved was untyped (#1335, #1457).
  • -
  • Fixed an internal compiler error with a line of code containing a single comma (#1462).
  • -
  • Fixed a problem with the USE command when the filename was specified as a bracketed string (#1468).
  • -
    - New Features - -
  • You can now use the NULL() and DEFAULT() expression to initialize any variable with a default value. This is the equivalent of the default keyword in C#.
  • -
  • We have added a new compiler option /modernsyntax (#1394). This disables certain legacy features:
  • - -
  • && for line comments;
  • -
  • * at the start of a line for a comment line;
  • -
  • Bracketed strings;
  • -
  • Parenthesized expression lists (making it easier to recognize tuples).
  • -
    -
    - -
  • Added support for IS NULL and IS NOT NULL pattern (#1422).
  • -
  • Added support for file wide FIELD statements in the Harbour dialect (#1436).
  • -
    - Runtime - Bug fixes - -
  • Fixed runtime error in Transform() with PTR argument (#1428).
  • -
  • Fixed problem with several String runtime functions throwing a runtime error when passed a PSZ argument (#1429).
  • -
  • Fixed problem with OrdKeyVal() and ADS/ADT files in the ADS RDD (#1434).
  • -
  • Fixed incompatibilities with various xBase dialects with creating and using orders with long names (#1438).
  • -
  • Fixed VO incompatibility in OrderKeyNo() with the ADS RDD when the setting Ax_SetExactKeyPos() is TRUE (#1444).
  • -
  • Fixed a problem in the macro compiler with passing more than two arguments by reference (#1445).
  • -
  • Fixed problem with DBSetIndex() seting the record pointer at eof (#1448).
  • -
  • Fixed problem reading fields from OEM dbfs (#1449).
  • -
    - New Features - -
  • Implemented the DBFMEMO driver (#604).
  • -
  • Implemented the DBFBLOB driver (#605).
  • -
  • Added missing SetColor() function overload with no parameters (#1440).
  • -
    - -
  • This version includes the new XSharp.VFP.UI.DLL that is used by forms exported from Visual FoxPro with the VFP Exporter.
  • -
    - Visual Studio integration - Bug fixes - -
  • Fixed a problem with "Jump to File" command in VS 2019 (#1146).
  • -
  • Fixed problem with "Go to definition" not working for local function (#1415).
  • -
  • Fixed problem with the Class navigation box showing the wrong current entry in some cases (#1426).
  • -
  • Fixed problem with setting the "enable named arguments" project option (#1431).
  • -
  • Fixed problem with the code generator for types in external assemblies not generating parameters for Indexed properties (#1442).
  • -
  • Fixed problem with the VODBServer editor not saving access/assigns and other entities of the [DBSERVER] section in CAVOFED.TPL (#1452).
  • -
  • Fixed problem with loading supplemental files provided in the cavowed.inf file for the VO Window Editor with absolute or relative paths (#1470).
  • -
  • Fixed some indentation issues in the editor (#1541).
  • -
  • Fixed a problem in the VS2022 Debugger when different DLLs contained the same namespace but different casing.
  • -
  • Fixed an issue where the entity parser inside the editor did not correctly determine the end of an entity containing a local function or procedure.
  • -
  • Fixed a problem where the entity parser inside the editor failed to handle a param token at the start of a line when the /memvars compiler option was NOT enabled.
  • -
    - New features - -
  • We have added a menu entry to the Help menu for the Chinese version of the documentation.
  • -
    - VOXporter - Bug fixes - -
  • Fixed problem with incorrectly converting attributes to string literals (#1404).
  • -
    - New Features - -
  • It is now possible to define special TEXTBLOCK entities in the VO code in any module with name "VXP-TOP" or "{VOXP:TOP}", and VOXporter will automatically insert the contents of the text block in the beginning of the exported X# .prg file for the module. This is particularly helpful for specifying top level commands like #using statements (#1425).
  • -
    - VFPXporter - -
  • This version of X# includes the VFP Exporter. This tool takes a Visual FoxPro project file and converts that into a Visual Studio solution
  • -
    - XIDE - -
  • Added option when trying to debug a 32/64bit app in the wrong XIDE version, to automatically open the alternative version.
  • -
  • Fixed coloring of several positional keywords in the editor.
  • -
  • Improved editor support for TEXT...END TEXT.
  • -
  • Added editor support for the NOT NULL code pattern.
  • -
  • Added project support for the compiler options /namedargs, /initlocals, /modernsyntax and /allowoldstyleassignments.
  • -
  • When pressing the SHIFT key on startup, the layout of the IDE is now reset to default positions (rather than saved on exit).
  • -
  • Added menu command View->Save Current Layout.
  • -
  • Fixed a problem with toggling case (CTR+U) of text selected in a column selection.
  • -
  • Fixed several issues with incorrectly identifying a line with identifiers like PROC or FUNC as entity definitions.
  • -
    - Documentation - Bug fixes - -
  • Fixed typo in the /namedargs compiler option topic.
  • -
    - New Features - -
  • We have added several chapters about modifiers.
  • -
  • We have added a (partially) translated help file in (Simplified) Chinese.
  • -
    - Changes in 2.19.0.2 - Compiler - Bug fixes - -
  • Now the compiler properly reports an error when duplicate field names are defined in a type (#1385)
  • -
  • Fixed problem with defining multiple type constraints in a generic type (#1389)
  • -
  • Fixed problem with global MEMVARs hiding local variables or parameters with the same name (#1294)
  • -
  • Bogus compiler error messages with not found type (#1396)
  • -
  • Fixed compiler crash with missing reference to XSharp.VFP in the FoxPro dialect (#1405)
  • -
  • Fixed problem with /initlocals compiler option incorrectly also initializing class fields (#1408)
  • -
  • Fixed a problem in the preprocessor where an extended match symbol would not properly match an expression that started with a string literal
  • -
    - New features - -
  • We added support for dimensioning (FoxPro) class properties, such as in

    DIMENSION this.Field(10)
  • -
  • We have added support for FOREACH AWAIT, like in the following example. (Works in .Net Core, .Net 5 and later)
  • -
    -
    FOREACH AWAIT VAR data IN GenerateNumbersAsync(number)
         SELF:oListView1:Items:Add(data)
      NEXT
    - -
  • We have added support for "Coalescing Member Access, such as in the following example where FirstName and LastName are both properties of the oPerson object:
  • -
    - - ? oPerson:(FirstName+" "+LastName) -   - -
  • The WITH command now also recognizes the AS DataType clause
  • -
    - -
  • XBase++ Class declarations now also allow “END CLASS” as closing token.
  • -
    - -
  • Now the compiler reports an error when attempting to convert from Lambda Expression to usual (#1343)
  • -
    - -
  • We have added support for TUPLE datatypes. This includes declaring local variables, parameters, return value etc.
    We also support decomposition of a tuple return value into multiple locals. See the TUPLE help topic for more information.
  • -
    - Runtime - Bug fixes - -
  • Fixed problem calling DoEvents() from the macro compiler (#872 )
  • -
  • Fixed problem with __Mem2StringRaw() (undocumented) function (#1302)
  • -
  • Fixed problem opening DBFCDX index file with incorrect collation information in the header #1360
  • -
  • Fixed problem with OrdSetFocus() resetting the current order when called without arguments (#1362)
  • -
  • Fixed problems with some index files after a DBPack() (#1367)
  • -
  • Fixed problem with Deleted() returning TRUE on a table with all records deleted (#1370)
  • -
  • Fixed problem with opening and writing to a file with FWrite() etc functions when opened in exclusive and write only mode (#1382)
  • -
  • Fixed several problems (VO incompatibilities) with the SplitPath() function (#1384)
  • -
  • Now when there is no codepage found in a dbf header, then the DOS codepage from the RuntimeState is used and no longer the hardcoded codepage 437 (#1386)
  • -
  • Replaced the Dictionary<,> class used in some areas of the runtime with ConcurrentDictionary<,> to avoid issues in multi threaded apps (#1391)
  • -
  • Fixed problem with NoIVarget when using IDynamicProperties (FoxPro dialect) (#1401)
  • -
  • Fixed problem with Hex2C() giving different results with lower case letters than with upper case.
    Note that this bug existed also in VO, so now the behavior of Hex2C() with lower case hex letters in X# with is different to VO (#1402)
  • -
    - -
  • Accessing properties on a closed DbServer object that was opened with the Advantage RDD could cause problems in the debugger. The DbServer class now returns empty values when the server is closed.
  • -
    - New features - -
  • Implemented CREATE CURSOR command [FoxPro] (#247). Also implemented CREATE TABLE and ALTER TABLE (FoxPro dialect)
  • -
  • Implemented INSERT INTO commands (FoxPro dialect for inserting variables from values, arrays, objects and memory variables. INSERT INTO from a SQL query does not work yet.  (FoxPro dialect)
  • -
    - -
  • Implemented new FoxPro-compatible version of Str() function in XSharp.VFP (#386)
  • -
  • Now an error is thrown when opening an index file fails (#1358)
  • -
  • Added AscA() function and made Asc() dependent on the SetAnsi() setting in the runtime (#1376)
  • -
    - Header files - Bug fixes - -
  • Implemented several missing commands (#1407)
  • -
  • Fixed typo in the SET DECIMALS TO command (#1406)
  • -
  • Added missing clauses NAME and MEMVAR for the GATHER command (FoxPro) (#1409)
  • -
  • Updated several commands to make some tokens optional and more compatible to various dialects (#1410, #1412)
  • -
  • Fixed various incompatibilities with COMMIT command in various dialects (#1411)
  • -
    - Visual Studio Integration - Bug fixes - -
  • Fixed problem with looking up public static field in type referenced by static using (#1307)
  • -
  • Fixed intellisense problem with locals defined inside block statements (#1345)
  • -
  • Fixed problem with intellisense incorrectly resolving type specified in code with full name to another from the usings list (#1363)
  • -
  • Fixed problem with member completion incorrectly showing static methods after typing a colon (#1379)
  • -
  • Fixed editor freezing with specific code (#1380)
  • -
  • Fixed problem with Class Navigation bar not showing the method name in certain cases (#1381)
  • -
    - New features - -
  • Added support for IEnumerable and DataTable Debugger visualizers (#1373).
    Please note that when browsing X# arrays the results in the visualizer are really ugly because the visualizer ignores attributes to hide properties and fields for our USUAL class.
  • -
  • Adjusted the Globals, Workareas etc debugger windows to respect the global theme selected in VS (#1375). Also added status panel to the Workarea window, so you can see the workarea status or field names/values
  • -
  • Added intellisense support for locals declared with USING VAR or USING (LOCAL) IMPLIED (#1390)
  • -
  • Now the intellisense database uses an SQLite package that has ARM support, so the it will work also on a Mac and other platforms (#1397)
  • -
    - VOXporter - Fixes - -
  • Fixed problem with VOXporter incorrectly modifying previously commented code with {VOXP:UNC} tags (#1404)
  • -
    - Documentation - Bug Fixes - -
  • The documentation of functions in the runtime help was describing functions incorrectly.
    For example the topic title for the "Left" function was "Functions.Left Method" This has been changed to "Left Function"
  • -
  • The "SingleLineEdit" class in the documentation was called "Real4LineEdit". This has been fixed.
  • -
    - New Features - -
  • We have added additional documentation to the X# Programming guide about several subjects.
  • -
    - Changes in 2.18.0.4 - Compiler - Bug fixes - -
  • Fixed some preprocessor issues with XBase++ related commands (#1213, #1288, #1337)
  • -
  • Fixed problem with implicit access to static class members (XBase++ dialect) (#1215)
  • -
  • Fixed a parser error with the DIMENSION command (VFP dialect) (#1267)
  • -
  • Fixed preprocessor problem with UDCs in code spanning in multiple lines (#1298)
  • -
  • Now each "unused variable" warning is reported at the exact location of a variable definition, instread of always at the first one (#1310)
  • -
  • Fixed bogus "unreachable code" warning in the SET RELATION command (#1312)
  • -
  • Fixed a problem in generating XML documentation for the compiler generated <Module>.$AppInit and <Module>.$AppExit methods (#1316)
  • -
  • Fixed problem with accessing hidden fields of another object (XBase++ dialect) (#1335)
  • -
  • Fixed problem with calling parent methods with an explicit class indication (Xbase++ dialect) (#1338)
  • -
  • Fixed problem with incorrectly calling function twice, in code like "SLen(c := SomeFunction())" (#1339)
  • -
  • Fixed problem with parent Сlass methods not being visible in derived classes (Xbase++ dialect) (#1349)
  • -
  • Fixed problem with ::new() not working properly in class methods (Xbase++ dialect) (#1350)
  • -
  • Fixed an exception when an error occurred for a token that was defined in a header file
  • -
  • Fixed a compiler error when returning super:Init() from a XBase++ method (#1357)
  • -
  • Fixed a problem with STATIC DEFINEs in same named .prg files (#1361)
  • -
    - New features - -
  • Introduced warning for not specifying the OUT keyword for OUT parameters (#1295)
  • -
  • The parser rules for method and constructor calls without parameters have been updated. This may result in a bit faster compilation.
  • -
  • SLen() is no longer "inlined" by the compiler. If you reference XSharp.Core in your app, SLen() now gets resolved to the SLen() function inside X# Core.
    If you compile without X# runtime, or compile against the Vulcan Runtime you now need to add a SLen() function to your code.
    This is the code inside X# Core that you can use as a template
    FUNCTION SLen(cString AS STRING) AS DWORD
      LOCAL len := 0 AS DWORD
      IF cString != NULL
         len := (DWORD) cString:Length
      ENDIF
      RETURN len
  • -
  • Added support for preprocessor commands #ycommand and #ytranslate that are also supported by Harbour. They work the same as #xcommand and #xtranslate, but the tokens are compared in case sensitive mode (#1314)
  • -
  • Code generation for some of the Xbase++ specific features has changed.
  • -
  • We have added several more UDCs with the IN <cursor> clause
  • -
    - -
  • We have added UDC support for the FoxPro CAST expression
  • -
  • Several more SET commands now also support the & operator
  • -
  • The compiler now supports "Late bound names" in more locations, such as in the REPLACE command, With command etc. This now compiles without problems:
  • -
    - cVar := "FirstName"
    WITH oCustomer
      .&cVar := "John"
    END WITH
    and this too

    cVar := "FirstName"
    REPLACE &cVar with "John"
    - Runtime - Bug fixes - -
  • Fixed problem with incorrectly closing dbf file before relations are cleared (#1237)
  • -
  • Fixed incorrect index scope visibility immediately after file creation (#1238)
  • -
  • Fixed problem in FFirst()/FNext() not finding all files specified by filter (#1315)
  • -
  • Fixed problem with DBSetIndex()/VoDbOrdListAdd() always reseting the controlling order to 1 (#1341)
  • -
  • Fixed problem with updating index keys in the DBFCDX driver when the key expression was of type DATE.
  • -
  • Fixed a problem when Str() and StrZero() had a built-in maximum string length of 30.(#1352)
  • -
  • The RegisteredRDD Class now uses a ConcurrentDictionary.
  • -
  • Fixed a bug in the RDD TransRec() method when a field is missing in the target table (#1372)
  • -
  • Fixed a problem in the Advantage RDD to prevent ADS functions from being called when the table is closed
  • -
  • Fixed a problem in the Advantage RDD that could occur when an field with an incorrect name was read
  • -
  • Fixed a problem in the CurDir() function when the current directory is a UNCPath (\\Server\Share\SomeDir) (#1378)
  • -
    - New features - -
  • Added support for accessing indexers in the USUAL type (#1296 )
  • -
  • We have added a DbCurrency type that is returned from the RDD when a currency field is read.
  • -
  • Implemented the TEXT TO FILE command (#1304)
  • -
  • Now the RDD reports an error (dialog) when tagname > maximum length when creating an index order (#1305)
  • -
  • Added a function _CreateInstance() that accepts a System.Type parameter
  • -
  • The late binding code now detects from where Send(), IVarGet() and IVarPut() are called and allow access to private/hidden fields when the calling code is of the same type as the type where the class members were declared. This is used in some of the XBase++ related changes.
  • -
  • The classes in the XBase++ have been restructured a bit.
  • -
  • The mapping of several DBF / Workarea / Cursor related UDCs has been changed to be more FoxPro compatible.
  • -
  • We have added runtime support for the FoxPro CAST expression
  • -
  • We have done some small code optimizations w.r.t. dictionaries(#1371)
  • -
  • Several DbServer properties no longer call into the RDD when the server is closed, but return blank values instead.
  • -
    - Typed SDK classes - -
  • Added a DbServer:Append() overload without parametrs (#1320)
  • -
  • Added missing DataServer:LockcurrentRecord() method (#1321)
  • -
  • Fixed runtime error when creating a DataWindow with a ShellWindow as owner (#1324)
  • -
  • Changed DataWindow:Show() method to CLIPPER for compatibility with existing code (#1325)
  • -
  • Fixed exception when using a ComboBox on a VO Window (#1328)
  • -
  • Fixed error when opening a datawindow with an assigned server (#1332)
  • -
  • Fixed runtime error when instantiating a DBServer object with an untyped FileSpec object as first argument (#1348)
  • -
  • Fixed problem with displaying items in Comboboxes and Listboxes (#1347)
  • -
  • Several DbServer properties no longer call into the RDD when the server is closed, but return blank values instead.
  • -
    - Visual Studio Integration - Bug fixes - -
  • Fixed problem with the "allow dot" setting in the project file (#1192)
  • -
  • Several macros such as $CALLSTACK were not returning values in expected format. This has been fixed (#1236)
  • -
  • Fixed build problem when there is a block comment in the first line of form.prg (#1334)
  • -
  • Fixed probelm with block commenting a code snippet in a single line (#1336)
  • -
  • Fixed failing project build when the project file contains a property <GenerateAssemblyInfo>True</GenerateAssemblyInfo> (#1344)
  • -
  • Fixed a problem in the Parser that was causing errors parsing DebuggerDisplay attributes in the expression evaluator.
  • -
  • The new debugger windows were not following the current windows theme. This is now partially fixed. (#1375)
  • -
    - VO Compatible Editors - -
  • Fixed design time display issue with CheckBox and RadioButton captions with specific fonts in the VOWED (#796)
  • -
  • Fixed problem with the VOWED editor changing all existing classes in the prg to PARTIAL (#814)
  • -
  • Fixed problem with incorrectly adding constructor code to instantiate the DataBrowser in the VOWED, even when there are no (non-deleted) data columns (#1365)
  • -
  • Fixed several problems in the VOMED with menu item define names in source code and resource files (#1374)
  • -
    - VOXporter - New features - -
  • Introduced options (inline in existing code) to comment, uncomment and delete lines from the original VO code (#1303)
  • -
    - - {VOXP:COM} // comment out line - - {VOXP:UNC} // uncomment line - - {VOXP:DEL} and // {VOXP:REM} // remove line - Installer - New features - -
  • The installer now detects if the required Visual Studio components "Core Editor" and ".Net Desktop Development" are installed.
    When it finds one or more VS installations but none of these installations has both the required components then a warning is shown.
  • -
    - Changes in 2.17.0.3 - Compiler - Bug fixes - -
  • Fixed several incompatibilities with XBase++ regarding using class members (#1215) UNCONFIRMED
  • -
  • Fixed /vo3 option not working correctly in XBase++ dialect. Also added support for modifiers final, introduce and override (#1244)
  • -
  • Fixed problem with using the NEW modifier on class fields (#1246)
  • -
  • Fixed several preprocessor issues with XPP dialect UDCs (#1247, #1250)
  • -
  • Fixed VO incompatibility with special handling of INSTANCE fields in methods and properties (#1253)
  • -
  • Fixed problem with the debugger erratically stepping to incorrect lines (#1254, #1264)
  • -
  • Fixed problem with showing the wrong error line number in some cases with nested statements (#1268)
  • -
  • Fixed problem where a DO CASE statement without CASE lines was producing an internal error in the compiler (#1281)
  • -
  • Fixed a couple preprocessor issues (#1284, #1289)
  • -
  • Fixed missing compiler error on calling with SUPER a method that does not exist, when late binding is enabled (#1285)
  • -
  • Fixed a Failed to emit Module error with CONST class field missing value assignment (#1293)
  • -
  • Fixed a problem with repeated match markers (such as in the SET INDEX TO command) in the preprocessor.
  • -
  • Fixed a problem that an property definition with an explicit interface prefix could lead to a compiler crash when the interface was "unknown" at compile time and/or the property name was not "Item" (#1306)
  • -
    - New features - -
  • Added support for "classic" INIT PROCEDURE and EXIT PROCEDURE (#1290)
  • -
  • Added warnings when statement list inside case blocks, if blocks and other blocks are empty. To suppress the warning you can add a NOP statement in your code.
  • -
  • We have made some changes to the lexer and parser in the compiler. This may result in a bit smaller memory footprint and faster compilation speed for code with many nested blocks.
  • -
    - Runtime - Bug fixes - -
  • Fixed several problems (incompatibilities with VO) in CToD() (#1275)
  • -
  • Added support for 3rd parameter in AAdd() for specifying where to insert the new element (#1287)
  • -
  • The Default() function now no longer updates usuals that have a value of NULL_OBJECT to be compatible with Visual Objects.(#1119)
  • -
  • We have added support for parameters for the AdsSQLServer class (#1282)
  • -
    - Visual Studio integration - New Features - -
  • We have added debugger pane windows for the following items:
  • - -
  • Global variables
  • -
  • Dynamic memory variables (Privates and Publics)
  • -
  • Workareas
  • -
  • Settings
  • -
    -
    - -
  • You can open these windows from the Debug/XSharp menu during debugging. There is also a special "X# Debugger Toolbar" which is also only shown during debugging.
  • -
  • These windows will only show information when the app being debugged uses the X# runtime (so they will not work in combination with the Vulcan Runtime).
    If you are debugging an application written in another language that uses the X# runtime then these windows will also show information.
    We have planned to add more features to these windows in future builds, like the properties of the current selected area and the field/values in the current selected workarea
  • -
  • We have added support for "FileCodeModel" for X# files. This is used by the WPF designer and XAML editor.
    This now also fixes the Goto definition in the XAML editor (#1026)
  • -
  • Several properties of X# projects are now cached. This should result in slightly faster performance.
  • -
  • We have added support for "Goto Definition" for User Defined commands. For example choosing "Goto definition" on the USE keyword from the USE command will bring you to its definition in our standard header file.
  • -
    - Bug fixes - -
  • Fixed member completion issue with Type[,] arrays (#980)
  • -
  • Fixed missing member completion in class inside namespace when same named class exists without namespace (#1204)
  • -
  • Fixed an auto indent problem when an entity has an attribute in the precessing line (#1210)
  • -
  • Fixed intellisense problems with static members in some cases (#1212)
  • -
  • Fixed some intellisense issues with code or declarations spanning in multiple lines (#1221, #1260)
  • -
  • Fixed intellisense problem with nested classes inside a namespace (#1222)
  • -
  • Fixed incorrect resolving of VAR local type, when using a type cast (#1224)
  • -
  • Fixed several problems with collapsing/expanding code in the editor (#1233)
  • -
  • Fixed showing of bogus member completion list with unknown types (#1255)
  • -
  • Fixed some problems with auto typing text with Ctrl + Space (complete Word) (#1256)
  • -
  • Fixed coloring of Text .. EndText statements (#1257)
  • -
  • Fixed several issues with tooltip hints with generic types (#1258, #1259, #1273)
  • -
  • Fixed problem with delegate signature not showing in intellisense tooltips (#1265)
  • -
  • Fixed invalid coloring of code with multiline comments (#1269)
  • -
  • Fixed invalid entries in member completion after typing "self." (#1270)
  • -
  • Fixed problem with calling the disassembler when path specified (in option X# Custom Editors\Other Editors\Disassembler) with spaces (#1271)
  • -
  • Fixed editor coloring completely stopping when using some UDC calls (#1272)
  • -
  • Fixed problem with hint not showing on CONSTANT locals in FOR statements (#1274)
  • -
  • Fixed auto indent problem when code contains a LOOP or EXIT keyword (#1278)
  • -
  • Fixed an exception in the editor when typing a parenthesis under specific circumstances (#1279)
  • -
  • Fixed problem with incorrectly trying to open in design mode files with filenames starting with an opening bracket (#1292 )
  • -
  • The "XSharp Website" menu option inside VS was broken (#1297)
  • -
  • Fixed problem with the Match Identical Identifiers functionality that could slow down Visual Studio
  • -
  • Fixed a VS lock up that could happen when a file was opened during debugging.
  • -
  • Parameter tips for classes with a static constructor and a normal constructor were not processed correctly. This has been fixed.
  • -
    - -
  • When a project was opened where the dependency between a dependent item (like a .resx file or a .designer.prg file) and its parent was missing, then an exception could occur, which prevented the project from opening. This has been fixed.
  • -
  • When 2 compiler errors occurred on the same line with the same error code they were sometimes shown in the VS output window but not in the Error List. This has been fixed (#1308)
  • -
    - VOXporter - New Features - -
  • Added support for special tags {VOXP:COM}, {VOXP:UNC} and {VOXP:DEL} / {VOXP:REM} to comment out, uncomment and remove lines from the original VO code (#1303)
  • -
    - Changes in 2.16.0.5 - Compiler - New Features Xbase++ dialect - We have made several changes in the way how Xbase++ class definitions are generated. Please check your code extensively with this new build ! - -
  • We now generate a class function for all classes. This returns the same object as the ClassObject() method for Xbase++ classes.
    This class function is generated, regardless of the /xpp1 compiler option.
    The Class function depends on the function __GetXppClassObject and the XSharp.XPP.StaticClassObject class that both can be found in the XSharp.XPP assembly(#1235).
    From the Class function you can access class variables and class methods.
  • -
  • In Xbase++ you can have fields (VAR) and properties (ACCESS / ASSIGN METHOD) with the same name, even with same visibility. Previously this was not supported.
    The compiler now automatically makes the field protected (or private for FINAL classes) and marks it with the [IsInstance] attribute.
    Inside the code of the class the compiler will now resolve the name to the field. In code outside of the class the compiler will resolve the name to the property.
  • -
  • For derived classes the compiler now automatically generates a property with the name of the parentclass, that is declared as the parent class and returns the equivalent to SUPER.
  • -
  • We have fixed an issue with the FINAL, INTRODUCE and OVERRIDE keywords for Xbase++ methods (#1244)
  • -
  • We have fixed some issues with accessing static class members in the XBase++ dialect (#1215)
  • -
  • You can now use the "::" prefix to access class variables and class methods inside class methods.
  • -
  • When a class is declared as subclass from another class then the compiler generates a (typed) property in the subclass to access the parent class, like Xbase++ does. This property returns the value "super".
  • -
  • We are now supporting the READONLY clause for Vars and Class Vars. This means that the variable must be assigned in the Init() method (instance variables) or InitClass() method (Class vars)
  • -
    - - New Features other dialects - -
  • Inside Visual Objects you could declare fields with the INSTANCE keyword and add ACCESS/ASSIGN methods with the same name as the INSTANCE field.
    In previous builds of X# this was not supported.
    The compiler now handles this correctly and resolves the name to the field in code inside methods/properties of the class and resolves the name to the property in code outside of the class.
  • -
  • The PPO file now contains the original white space from user defined commands and translates.
  • -
    - Bug fixes - -
  • Fixed some method overload resolution issues in the VO dialect (#1211).
  • -
  • Fixed internal compiler error (insufficient stack) with huge DO CASE statements and huge IF ELSEIF statements (#1214).
  • -
  • Fixed a problem with the Interpolated/Extended string syntax (#1218).
  • -
  • Fixed some issues with incorrectly allowing accessing static class members with the colon operator or instance members with the dot operator (#1219,#1220).
  • -
  • Fixed Incorrect visibility of MEMVARs created with MemVarPut() (#1223).
  • -
  • Fixed problem with _DLL FUNCTION with name in Quotes not working correctly (#1225).
  • -
  • If the preprocessor generated date and/or datetime literals, then these were not recognized. This has been fixed (#1232).
  • -
  • Fixed a problem with the preprocessor matching of the last optional token (#1241)
  • -
  • Fixed a problem with recognizing the ENDSEQUENCE keyword in the Xbase++ dialect (#1242).
  • -
  • Using a default parameter value of NIL is now only supported for parameters of type USUAL. Using NIL for other parameter types will generate a (new) warning XS9117 .
    Also assigning NIL to a Symbol or using NIL as parameter to a function/method call that expects a SYMBOL will now also generate that warning (#1231).
  • -
  • Fixed a problem in the preprocessor where two adjacent tokens were not merged into one token in the result stream. (#1247).
  • -
  • Fixed a problem in the preprocessor where the preprocessor was not detecting an optional element when the element started with a Left parenthesis (#1250)
  • -
  • Fixed a problem with interpolated strings that contained literal double quotes like in i"SomeText""{iNum}"" "
  • -
  • Fixed a problem that was introduced in an earlier build of 2.16 with local functions / procedures.
  • -
  • A warning generated at parse time could lead to another warning about a preprocessor define even when that is not needed. This has been fixed.
  • -
  • Fixed issue with default parameter values for parameters declared as "a := NIL,b := NIL as USUAL" introduced in an earlier build of  2.16
  • -
  • Fixed issue with erratic debugger behavior introduced in an earlier build of  2.16.
  • -
  • When you are referring to a type in an external assembly that depends on another external assembly, but you did not have a reference to that other external assembly, then compilation could fail without proper explanation. Now we are producing the normal error that you need to add a reference to that other assembly.
  • -
  • Omitting the type for a parameter for a function or method  that does not have the CLIPPER calling convention is allowed. These parameters are assumed to be of type USUAL.
    This now produces a new warning XS9118.
  • -
    - Breaking changes - If you are using our parser to parse source code, please check your code. We have made some changes to the language definition for the handling of if ... else statements as well as for the case statements (a new condBlock rule that is shared by both rules). This removes some recursion in the language. Also some of the Xbase++ specific rules have been changed. Please check the language definition online - Runtime - New Features - -
  • Added the DOY() function.
  • -
  • Addeding missing ADS_LONG and ADS_LONGLONG defines.
  • -
    - -
  • Improved the speed of CDX skip operations on network drives (#1165).
  • -
    - Bug fixes - -
  • Fixed a problem with DbSetRelation() and RLock() (#1226).
  • -
  • Adjusted implicit conversion from NULL_PSZ to string to now return NULL instead of an empty string.
  • -
  • Some initialization code is now moved from _INIT procedures to the static constructor of the SQLConnection Class, in order to make it easier to use this class from non-X# apps.
  • -
  • Fixed an issue with the visibility of dynamic memory variables that were created with the MemVarPut function (#1223).
  • -
  • Fixed a problem with the DbServer class in exclusive mode (#1230).
  • -
  • Implicit conversions from NULL_PSZ to string were returning an empty string and not NULL (#1234).
  • -
  • Fixed a problem in the CTOD() function when the day, month or year were prefixed with spaces.
  • -
  • Fixed an issue with OrderListAdd() in the ADS RDD. When the index is already open, then the RDD no longer returns an error.
  • -
  • Fixed an issue with MemRealloc where the second call on the same pointer would return NULL_PTR (#1248).
  • -
    - VOSDK - -
  • Global arrays in the SDK classes are now initialized from the class constructor of the SQLConnection class to fix problems when the main app does not include a link to the SQL Classes assembly.
  • -
    - Visual Studio integration - Debugger - -
  • The debugger expression evaluator now also evaluates late bound properties and fields (if that compiler option is enabled inside your project).
    If this causes negative side effects then you can disable that in the "Tools/Options Debugging/X# Debugger options screen".
  • -
  • The debugger expression evaluator now is initialized with the compiler options from your main application (if that application is an X# project).
    The settings on the Debugger Options dialog are now only used when debugging DLLs that are loaded by a non X# startup project.
  • -
  • The debugger expression evaluator now always accepts a '.' character for instance fields, properties and methods, regardless of the setting in the project options.
    This is needed because several windows in the VS debugger automatically insert '.' characters when adding expressions to the watch window or when changing values for properties or fields.
  • -
    - New Features - -
  • Added support for importing Indexes in the DbServer editor.
  • -
  • The X# project system now remembers which Windows were opened in the Windows editor in design mode and reopens them correctly when a solution is reopened.
  • -
  • We have added templates for a Harbour console application and Harbour class library.
  • -
  • We have added item templates for FoxPro syntax classes and Xbase++ syntax classes.
  • -
  • The Class templates for the FoxPro and XBase++ dialect now include a class definition in that dialect.
  • -
  • We have improved the support for PPO files in the VS Editor.
  • -
  • We have updated some of the project templates.
  • -
    - Bug fixes - -
  • Fixed a problem with incorrectly showing member list in the editor for the ":=" operator (#1061).
  • -
  • Fixed VOMED generation of menu item DEFINE names that were different to the ones generated by VO (#1208).
  • -
  • Fixed VOWED incorrect order of generated lines of code in some cases (#1217).
  • -
  • Switched back to our own version of Mono.Cecil to avoid issues on computers that have the Xamarin (MAUI) workload in Visual Studio.
  • -
  • Fixed a problem opening a form in the Form Designer that contains fields that are initialized with a function call (#1251).
  • -
  • Windows that were in [Design] mode when a solution is closed, are now properly opened in [Design] mode when the solution is reopened.
  • -
    - Changes in 2.15.0.3 - Compiler - New Features - -
  • Implemented the STACKALLOC syntax for allocating a block of memory on the stack (instead of the heap) (#1084)
  • -
  • Added ASYNC support to XBase++ methods (#1183)
  • -
    - Bug fixes - -
  • Fixed missing compiler error in a few specific cases when using the dot for accessing instance members, when /allowdot is disabled (#1109)
  • -
  • Fixed some issues with passing parameters by reference (#1166)
  • -
  • Fixed some issues with interpolated strings (#1184)
  • -
  • Fixed a problem with the macro compiler not detecting an error with incorrectly accessing static/instance members (#1186)
  • -
  • Fixed incorrect line number reported for error messages on ELSEIF and UNTIL statements (#1187)
  • -
  • Fixed problem with using an iVar named "Value" inside a property setter, when option /cs is enabled (#1189)
  • -
  • Fixed incorrect file/line info reported in error message when the Start() function is missing (#1190)
  • -
  • Fixed bogus warning about ambiguous methods in some cases (#1191)
  • -
  • Fixed a preprocessor problem with nested square brackets (in SUM and REPLACE commands) (#1194)
  • -
  • Fixed incorrect method overload resolution in some cases in the VO dialect (#1195)
  • -
  • Fixed incorrect ambiguous call error with OBJECT/IntPtr parameters (#1197)
  • -
  • Fixed erratic debugging while stepping over code in some cases (#1200, #1202)
  • -
  • Fixed a problem where a missing "end keyword", such as ENDIF, NEXT, ENDDO was not reported when the code between the start and end contained a compiler warning (#1203)
  • -
  • Fixed a problem in the build system where sometimes an error message about an incorrect "RuntimeIdentifier" was shown
  • -
    - Runtime - Bug fixes - -
  • Fixed runtime error in DBSort() (#1196)
  • -
  • Fixed error in the ConvertFromCodePageToCodePage function
  • -
  • A change in the startup code for the XSharp.RuntimeState could lead to incorrect codepages
  • -
    - Visual Studio integration - New Features - -
  • Added VS option for the WED to manually adjust the x/y positions/sizes in the generated resource with multipliers (#1199)
  • -
  • Added new options page to control where the editor looks for identifiers on the Complete Word (Ctrl+Space) command.
  • -
  • A lot of improvements to the debugger expression evaluator (#1050). Please note that this debugger expression evaluator is only available in Visual Studio 2019 and later
  • -
  • Added a debugger options page that controls how expression are parsed by the new debugger expression evaluator.
    You can also change the setting here that disallows editing while debugging.
  • -
  • We have added context help to the Visual Studio source code editor. When you press F1 on a symbol then we inspect the symbol. If it comes from X# then the relevant page in the help file is opened. When it comes from Microsoft then we open the relevant page from the Microsoft Documentation online.
    In a next build we will probably add an option for 3rd parties to register their help collections too.
  • -
  • When a keyword is selected in the editor that is part of a block, such as CASE, OTHERWISE, ELSE, ELSEIF then the editor will now highlight all keywords from that block.
  • -
  • The Jump Keywords EXIT and LOOP are now also highlighted as part of the repeat block that they belong to.
  • -
  • When a RETURN keyword is selected in the editor, then the matching "Entity" keyword, such as FUNCTION, METHOD will be highlighted too.
  • -
  • Added a warning to the Application project options page, when switching the target framework.
  • -
    - Bug fixes - -
  • Fixed previously broken automatic case synchronization, when using the cursor keys to move to a different line in the editor (#722)
  • -
  • Fixed some issues with using Control+Space for code completion (#1044, #1140)
  • -
  • Fixed an intellisense problem with typing ":" in some cases (#1061)
  • -
  • Fixed parameter tooltips in a multiline expressions (method/function calls) (#1135)
  • -
  • Fixed problem with Format Document and the PUBLIC modifier (#1137)
  • -
  • Fixed a problem with Go to definition not working correctly with multiple partial classes defined in the same file (#1141)
  • -
  • Fixed some issues with auto-indenting (#1142, #1143)
  • -
  • Fixed a problem with not showing values for identifiers in the beginning of a new line when debugging (#1157)
  • -
  • Fixed Intellisense problem with LOGICs in some cases (#1185)
  • -
  • Fixed an issue where the completionlist could contain methods that were not visible from the spot where the completionlist was shown (#1188)
  • -
  • Fixed an issue with the display of nested types in the editor (#1198)
  • -
  • Cleaned up several X# project templates, fixing problems with incorrect placement of Debug/Output folders (#1201)
  • -
  • Undoing a case synchronization in the VS editor was not working, because the editor would immediately synchronize the case again (#1205)
  • -
  • Rebuilding the intellisense database no longer restarts Visual Studio (#1206)
  • -
  • Now the VO Menu Editor uses the same menu item DEFINE values, as those used in the original VO app (re-porting of the app is necessary for this to work) (#1207)
  • -
  • A Change to our project system and language service could lead to broken "Find in Files" functionality in some versions of Visual Studio.  This has been fixed.
  • -
  • Fixed an issue where goto definition was not working for protected or private members
  • -
  • Fixed an issue where for certain files the Dropdown combo boxes on top of the editor were not correctly synchronized.
  • -
    - Documentation - Changes - -
  • Some methods in the typed SDK were documented as Function. They are now properly documented as Method
  • -
  • Property Lists and Method lists for classes now include references to methods that are inherited from parent classes. Methods that are inherited from .Net classes, such as ToString() from System.Object are NOT included.
  • -
    - Changes in 2.14.0.2, 3 & 4 - Visual Studio Integration - Bug fixes - -
  • Fixed an exception in the X# Editor when opening a PRG file in VS 2017
  • -
  • Selecting a member from a completion list with the Enter key on a line immediately after an entry that has an XML comment could lead to extra triple slash (///) characters to be inserted in the editor
  • -
  • The triple slash command to insert XML comments was not working. This has been fixed.
  • -
  • Fixed a problem with entity separators not shown on the right line for entities with leading XML comments
  • -
  • Fixed a peek definition problem with types in source code that do not have a constructor
  • -
  • Fixed a problem with the Implement Interface action when the keyword case was not upper case
  • -
  • Fixed a problem that the keyword case was prematurely synchronized in the current line.
  • -
  • Fixed a problem with indenting after keywords such as IF, DO WHILE etc
  • -
  • Fixed a problem with selecting words at the end of a line when debugging
  • -
  • Fixed a problem where Format Document could lock up VS
  • -
  • Fixed a problem that accessors such as GET and SET were not indented inside the property block
  • -
  • Fixed a problem that Format Document was not working for some documents
  • -
  • Changed the priority of the background scanner that is responsible for keyword colorization and derived tasks inside VS.
  • -
    - Changes in 2.14.0.1 - Compiler - Bug fixes - -
  • Fixed a problem with date literals resulting in a message about an unknown alias "gloal" (#1178)
  • -
  • Fixed a problem that leading 0 characters in AssemblyFileVersion and AssemblyInformationalVersion were lost. If the attribute does not have the wildcard '*' then these leading zeros are preserved (#1179)
  • -
    - Runtime - Bug fixes - -
  • The runtime DLLs for 2.14.0.0 were marked with the TargetFramework Attribute. This caused problems. The attribute is no longer set on the runtime DLLs (#1177)
  • -
    - Changes in 2.14.0.0 - Compiler - Bug fixes - -
  • Fixed a problem resolving methods when a type  and a local have the same name (#922)
  • -
  • Improved XML doc messages for methods implicitly generated by the compiler (INITs, implicit constructors) (#1128)
  • -
  • Fixed an internal compiler error with DELEGATEs with default parameter values (#1129)
  • -
  • Fixed a problem with incorrect calculation of the memory address offset when obtaining a pointer to a structure element (#1132)
  • -
  • Fixed problematic behavior of #pragma warning directive unintentionally enabling/.disabling other warnings (#1133)
  • -
  • Fixed a problem with marking the complete current executing line of code while debugging (#1136)
  • -
  • Fixed incompatible to VO behavior with value initialization when declaring global MEMVAR (#1144)
  • -
  • Fixed problem with compiler rule for DO not recognizing the "&" operator (#1147 )
  • -
  • Fixed inconsistent behavior of the ^ operator regarding narrowing conversion warnings (#1160)
  • -
  • Fixed several issues with CLOSE and INDEX UDC commands (#1162, #1163)
  • -
  • Fixed incorrect error line reported for error XS0161: not all code paths return a value (#1164)
  • -
  • Fixed bogus filename reported in error message when the Start() function is missing (#1167)
  • -
  • The PDB information for a command defined in a UDC now highlights the entire row and not just the first keyword
  • -
  • Fixed a problem in the CLOSE ALL and CLOSE DATABASES UDC.
  • -
    - Runtime - New Features - -
  • Added 2 new values to the DbNotificationType enum: BeforeRecordDeleted and BeforeRecordRecalled. Also added AfterRecordDeleted and AfterRecordRecalled which are aliases for the already existent RecordDeleted and RecordRecalled (#1174)
  • -
    - Bug fixes - -
  • Added/updated several defines in the Win32API SDK library (#696)
  • -
  • Fixed a problem with "SkipUnique" not working correctly (#1117)
  • -
  • Fixed an RDD scope problem when the bottom scope is larger than the highest available key value (#1121)
  • -
  • Fixed signature of LookupAccountSid() function in the Win32API SDK library (#1125)
  • -
  • Improved exception error message when attempting to use functions like Trim() (which alter the key string length) in index expressions (#1148)
  • -
  • Fixed a Macro Compiler runtime exception when there is an assignment in an IIF statement (#1149)
  • -
  • Fixed a problem with resolving the correct overloaded method in late bound calls (#1158)
  • -
  • Fixed a problem with parametrized SQLExec() statements in the FoxPro Dialect
  • -
  • Fixed a problem in the Days() function where the incorrect number of seconds in a day was used.
  • -
  • Fixed a problem in the Advantage RDD when a FieldGet returned fields with trailing 0 characters. These are now replaced with a space.
  • -
  • Fixed a problem with DBI_LUPDATE in the ADS RDDs
  • -
  • Fixed the Debugger display of the USUAL type.
  • -
    - Visual Studio integration - New Features - -
  • Now using the "Reference Manager" instead of the "Add Reference Dialog Box" for adding References (#21, #1005)
  • -
  • Added an option to the Solution Explorer context menu to split a Windows Form in a form.prg and form.designer.prg (#33)
  • -
  • We have added an options page to the Tools / Options TextEditor/X# settings that allows you to enable/disable certain features in the X# source code editor, such as "Highlight Word", "Brace Matching" etc. The option to backup the source code for the Windows Forms Editor has been moved from the Texteditor options page to the Custom Editor options page. Search for 'Backup" in the Tools/Options dialog to find the setting.
  • -
  • Tooltips for all source code items now contain the Location (file name and the line/column).
  • -
  • We have added "search keywords" to all of our option page. you may be able to find a page by typing the keyword that you are looking for in the search control.
  • -
    - Bug fixes - -
  • Fixed  a problem renaming files when a solution is under SCC with Team Foundation Server (#49)
  • -
  • The WinForms designer now ignores differences in the namespaces specified in the form.prg and designer.prg files (the one from form.prg is used) (#464)
  • -
  • Fixed incorrect mouse tooltip for a class in some cases (#871)
  • -
  • Fixed a code completion issue on enum types with extension methods (#1027)
  • -
  • Fixed some intellisense problems with enums (#1064)
  • -
  • Fixed a problem with Nuget packages in VS 2022 causing first attempts to build projects to fail (#1114)
  • -
  • Fixed a formatting problem in XML documentation tooltips (#1127)
  • -
  • Fixed a problem with including bogus extra static members in the code completion list in the editor (#1130)
  • -
  • Fixed problem with Extension methods not included in Goto Definition, Peek definition, QuickInfo tips and Parameter Tips (#1131)
  • -
  • Fixed a problem in determining the correct parameter number for parameter tips when a compiler pseudo function such as IIF() was used inside the parameter list (#1134)
  • -
  • Fixed a problem with selecting words with mouse double-click in the editor with underscores while debugging (#1138)
  • -
  • Fixed a problem with evaluating values of identifiers with underscores in their names while debugging (#1139)
  • -
  • Fixed identifier highlighting causing the VS Editor to hang in certain situations (#1145)
  • -
  • Fixed indenting of generated event handler methods in the WinForms designer (#1152)
  • -
  • Fixed a problem with the WinForms designer duplicating fields when adding new controls (#1154)
  • -
  • Fixed a problem with the WinForms designer removing #region directives (#1155)
  • -
  • Fixed a problem with the WinForms designer removing PROPERTY declarations (#1156)
  • -
  • Fixed a problem that the type lookup for locals was failing in some cases (#1168)
  • -
  • Fixed a problem where the existence of extension methods in code was causing a problem filling the member list (#1170)
  • -
  • Fixed a problem when completing the member completion list without selecting an item (#1171)
  • -
  • Fixed a problem with showing member completion on types of static members of a class (#1172)
  • -
  • Fixed a problem with the indentation after single line entities, such as GLOBAL, DEFINE, EXPORT etc. (#1173)
  • -
  • Fixed a problem with parameter tips for extension methods (#1175)
  • -
  • Fixed a problem with tooltips for namespaces and nested classes (#1176)
  • -
  • Optional tokens in UDCs were not colored as Keyword in the source code editor
  • -
  • Fixed a problem in the CodeDom provider that failed to load on a Build Server because of  a dependency to Microsoft.VisualStudio.Shell.Design version 15.0 when generating code for WPF projects.
  • -
    - Changes in 2.13.2.2 - Compiler - Bug fixes - -
  • Class members declared with only the INSTANCE modifier were generated as public. This has been changed to protected, just like in Visual Objects (#1115)
  • -
    - Runtime - Bug fixes - -
  • IVarGetInfo() returned incorrect values for PROTECTED and INSTANCE members. This has been fixed.(#1116)
  • -
  • The Default() function was changing usual variables initialized with NULL_OBJECT to the new value. This was not compatible with Visual Objects (#1119)
  • -
    - Visual Studio integration - New Features - -
  • The Rebuild Intellisense Database menu option now asks for confirmation before restarting Visual Studio (#1120)
  • -
  • The "Include Files" node in the solution explorer can now be hidden (Tools/ Options X# Custom Editors/Other Editors)
  • -
    - Bug fixes - -
  • The type information for variables declared in a CATCH clause was not available. This has been fixed (#1118)
  • -
  • Fixed several issues with parameter tips (#1098, #1065)
  • -
  • Fixed a performance issue when the cursor was on a undeclared identifier in a "global" entity such as a function or procedure in VERY large projects
  • -
  • The "Include Files" node could contain duplicate references when the source code for an #include statement contained relative paths, such as
    #include "..\GlobalDefines.vh"
  • -
    - -
  • Suppressed the expansion of the "Include Files" node in the Solution Explorer when a solution is opened.
  • -
  • Single character words (like i, j, k) were not highlighted with the 'highlight word' feature
  • -
  • The type 'ptr' was not marked in the keyword color in quickinfo tooltips
  • -
  • The nameof, typeof and sizeof keywords were not synchronized in the keyword case
  • -
    - Changes in 2.13.2.1 - Compiler - New Features - -
  • The parser now recognizes AS <type> clause for PUBLIC and PRIVATE memory variable declarations but ignores these with a warning
  • -
  • We have added support for AS <type> for locals declared with LPARAMETERS. The function/procedure is still clipper calling convention, but the local variable is of the declared type.
  • -
    - Bug fixes - -
  • The PUBLIC and PRIVATE keywords are sometimes misinterpreted as memvar declarations when the /memvar compiler option is not even selected. We have added parser rules to prevent this from happening: when /memvar is not selected then PUBLIC and PRIVATE are only used as visibility modifiers
  • -
  • Fix to an issue with selecting function and method overloads (#1096, #1101)
  • -
  • Build 2.13.2.0 introduced a problem that could cause a big performance problem for VERY large source files. This has been fixed in 2.13.2.1.
  • -
    - - Runtime - Bug fixes - -
  • When the runtime cannot resolve a late bound call to an overloaded method it produces an error message that includes a list of all relevant overloads (#875, #1096).
  • -
  • The .NULL. related behavior that was added for the FoxPro dialect was breaking existing code that involves usuals. In the FoxPro dialect DBNull.Value is now seen as .NULL. but in the other dialects as a NULL_OBJECT / NIL
  • -
  • Several internal members of the PropertyContainer class in the VFP library are now public
  • -
    - Visual Studio integration - Bug fixes - -
  • The lookup code for Peek definition, Goto definition etc. was filtering out instance methods and only returning static methods. This has been fixed (#1111, #1100)
  • -
  • Several changes to fix issues with indentation while typing (#1094)
  • -
  • Fixed several problems with parameter tips (#1098, #1066, #1110)
  • -
  • A recent change to support the wizard that converts packages.config to package references has had a negative impact on nuget restore operations during builds inside Visual Studio. This was fixed. (#1113 and #1114)
  • -
  • Fixed recognition of variables in lines such as CATCH, ELSEIF, FOR, FOREACH etc (#1118)
  • -
  • Fixed recognition of types in the default namespace (#1122)
  • -
    - Changes in 2.13.1 - Compiler - New Features - -
  • The PUBLIC and PRIVATE statements in the FoxPro dialect now support inline assignments, such as in
    PUBLIC MyVar := 42
    Without initialization the value of the PUBLIC will be FALSE, with the exception of the variable with the name "FOXPRO" and "FOX". These will be initialized with TRUE in the FoxPro dialect
  • -
    - Bug fixes - -
  • Fixed a problem with initialization of File Wide publics in the foxpro dialect
  • -
  • Column numbers for error messages were not always correct for complex expressions. This has been fixed (#1088)
  • -
  • Corrected an issue in the lexer where line numbers were incorrect when the source contains statements that span multiple lines (by using a semicolon as line continuation character) (#1105)
  • -
  • Fixed a problem in the overload resolution when one or more overloads have a Nullable parameter(#1106), such as in
      class Dummy    
         method Test (param as usual) as int
         .
         method Test(param as Int? as int
         .
      end class
  • -
  • Fixed a problem with the code generation for late bound method calls and/or array access in the FoxPro dialect with the /fox2 compiler compiler option ("compatible array handling") for variables of unknown type (#1108).
    An expression such as  

      undefinedVariable.MemberName(1)

    was interpreted as an array access but it could also be a method call.
    The compiler now generates code that calls a runtime function that checks at runtime if "MemberName" is either a method or a property.
    If it is a property then the runtime will assume that it is an array and access the first element.
    Code with more than 2 parameters or with non-numeric parameters, such as

      undefinedVariable.DoSomething("somestring")

    was not affected, since "somestring"  cannot be an array index.
    TIP: We recommend however, to always declare variables and specify their type. This helps to find problems at compile time and will generate MUCH faster code.
  • -
    - - Runtime - New Features - -
  • Added functions to resolve method calls or array access at runtime  (#1108)
  • -
  • Added GoTo record number functionality to the WorkareasWindow in the XSharp.RT.Debugger library
  • -
    - Visual Studio Integration - New Features - -
  • Now the VS Project tree shows (in a special node) include files that are used by a project (#906).
    This includes include files inside the project itself but also include files in the XSharp folder or Vulcan folder (when applicable).
  • -
  • We are using the built-in images of Visual Studio in the project tree and on several other locations when possible.
  • -
  • Our background parser inside VS is now paused during the built process to interfere less with the build.
  • -
  • We have added a setting to the indentation options so you can control the indentation for class fields and properties separately from methods.
    So you can choose to indent the fields and properties and to not indent the methods. This has also been added to the .editorconfig file
  • -
    - Bug Fixes - -
  • Fixed problems with Peek Definition and Goto Definition
  • -
  • When looking up Functions we were (accidentally) sometimes also including static methods in other classes.
  • -
  • When parsing tokens for QuickInfo and Peek Definition then a method name would not be found if there was a space following the name and before the open parenthesis.
  • -
  • Fixed a problem where project wide resources and settings (added from the project properties page) did not get the code behind file when saving
  • -
  • Quick Info and Goto definition on a line that calls a constructor will now show / goto the first constructor of the type and no longer to the type declaration
  • -
  • When the build process of a project was failing due to missing resources or other resource related problems, then the error list was not properly updated. This has been fixed (#1102)
  • -
  • The XSharpDebugger.DLL was not installed properly into VS2017 and VS2019.
  • -
    - Changes in 2.13 - Compiler - New Features - -
  • We have implemented a new compiler option /allowoldstyleassignments, which allows using the "=" operator instead of ":=" for assignments.
    This option is enabled by default in the VFP dialect and disabled by default in all other dialects.
  • -
    - -
  • We have revised the behavior of the /vo4 and /vo11 command line options that are related to numeric conversions.
    Before /vo4 only was related to conversions between integral numbers. It has now been extended to also include conversions between fractional numbers (such as float, real8, decimal and currency) and integral numbers.
    In the original languages (VO, FoxPro) you can assign a fractional number to a variable with integral value without problems.
    In .Net you can't do that but you will have to add a cast to the assignment:
  • -
    - LOCAL integerValue as INT
    LOCAL floatValue := 1.5 as FLOAT
    integerValue := floatValue          // no conversion: this will not compile in .Net without conversion
    integerValue := (INT) floatValue    // explicit conversion: this does compile in .Net
    ? integerValue

    If you enable the compiler option /vo4 then the assignment without the cast will also work.
    The /vo4 compiler option adds an implicit conversion
    In both cases the compiler will produce a warning:
    warning XS9020: Narrowing conversion from 'float' to 'int' may lead to loss of data or overflow errors
    The value of the integer integerValue above is controlled by the /vo11 compiler option:
    By default in .Net conversions from a fractional value to an integer value will round towards zero, so the value will then be 1.
    If you enable the compiler option /vo11 then the fractional number will be rounded to the nearest even integral value, so the value of integerValue in the example will be 2.
    This is not new.
    We have made a change in build 2.13, to make sure that this difference is no longer determined at runtime for the X# numeric types but at compile time.
    In earlier builds this was handled inside conversion operators from the FLOAT and CURRENCY types in the runtime.
    These classes choose the rounding method based on the /vo11 setting from the main program which is stored in the RuntimeState object.
    However that could lead to unwanted side effects when an assembly was compiled with /vo11 but the main program was not.
    This could happen for example with ReportPro or bBrowser.
    If the author of such a library now chooses to compile with /vo11 then he can be certain that all these conversions in his code will follow rounding to zero or rounding to the nearest even integer, depending on his choice.
    - -
  • The DebuggerDisplay attribute for Compile Time Codeblocks has changed. You now see the source code for compile time codeblocks in the debugger.
  • -
    - Bug fixes - -
  • Fixed a code generation issue with ASYNC/AWAIT (#1049)
  • -
  • Fixed an Internal compiler error with Evaluate() in CODEBLOCK in VFP dialect (#1043)
  • -
  • Fixed an Internal compiler error with UDCs incorrectly inserted after an END FUNCTION statement
  • -
  • Fixed a problem in the preprocessor with #region and #endregion in nested include files (#1046)
  • -
  • Fixed some problems with evaluating DEFINEs based on the order they appear (#866, #1057)
  • -
  • Fixed a compiler error with nested BEGIN SEQUENCE .. END SEQUENCE statements (#1055)
  • -
  • Fixed some problems with codeblocks containing complex expressions (#1056)
  • -
  • Fixed problem assigning function to delegate, when /undeclared+ is enabled (#1051)
  • -
  • Fixed a bogus warning when defining a LOCAL FUNCTION in the Fox dialect (#1017)
  • -
  • Fixed a problem with the Linq Operation Sum on FLOAT values (#965)
  • -
  • Fixed a problem with using SELF in an anonymous method/lamda expression (#1058)
  • -
  • Fixed an InvalidCastException when casting a Usual to a Enum defined as DWord (#1069)
  • -
  • Fixed incorrect emitted code when calling AScan() with param nStart supplied and similar functions (#1062, #1063)
  • -
  • Fixed a problem with resolving the correct one form overloads of the same function that span across different assemblies (#1079)
  • -
  • Fixed unexpected behavior of the preprocessor with #translate for specific XBase++ code (#1073)
  • -
  • Fixed a problem with unexpected behavior of "ARRAY OF" (#885)
  • -
  • Fixed some issues with calling specific overloads of functions accepting an ARRAY as a first argument (#1074)
  • -
  • Fixed a bogus XS0460 error when using the PUBLIC keyword on a method (#1072)
  • -
  • Fixed incorrect behavior when enabling Named Arguments option (#1071)
  • -
  • Fixed Access violation when calling a function/method with DECIMAL argument with default value (#1075)
  • -
  • Fixed some issues with #xtranslate not recognizing the Regular match marker in the preprocessor. Also fixed an issue with recognizing the double colon (::) inside expression tokens in the preprocessor. (#1077)
  • -
  • Fixed some issues with declaring arrays in the VFP dialect (#848)
  • -
    - - Runtime - Bug fixes - -
  • Fixed some incompatibilities with VO in the Mod() function
  • -
  • Fixed an exception with Copy to array in the VFP dialect when dimensions do not match (#993)
  • -
  • Fixed a seeking problem with SetDeleted(TRUE) and DESCEND order (#986)
  • -
  • Fixed a problem with DataListView incorrectly showing (empty) deleted records with SetDeleted(TRUE) (#1009)
  • -
  • Fixed problem with SetOrder() failing with SYMBOL argument (#1070)
  • -
  • Reverted a previous incorrect change in the SDK in DBServer:FieldGetFormatted() (#1076)
  • -
  • Fixed several issues with StrEvaluate(), including not recognizing MEMVARs with underscores in their names (#1078)
  • -
  • Fix for a problem with InList() and string values (#1095)
  • -
  • The Empty() function now returns false for the values .NULL. and DBNull.Value to be compatible with FoxPro
  • -
  • Fixed a problem with GetDefault()/ SetDefault() to make them compatible with Visual Objects (#1099)
  • -
    - - New Features - -
  • Enhancements for Unicode AnyCpu SQL classes (#1006):
  • -
  • Added a property to open a Sqlselect in readonly mode. This should prevent Append(), Delete() and FieldPut()
  • -
  • Implemented delay creating InsertCmd, DeleteCmd, UpdateCmd until really needed
  • -
  • Added callback mechanism so customers can override the commandtext for these command (and for example route them to stored Procedures)
  • -
  • When a late bound method call cannot be resolved because the method is overloaded then a better error message is now generated that also includes the prototypes of the methods found (#1096)
  • -
    - - - FoxPro dialect - -
  • Added ADatabases() function
  • -
    - Visual Studio Integration - New features - -
  • You can now control how indenting is done through the Tools/Options Text Editor/X# option pages. We have added several options that control indenting of your source code. You can also set these from an .editorconfig file if you want to enforce indenting rules inside your company.
  • -
  • We have now added extensive code formatting options to the source code editor. See Tools/Options/Text Editor/X#/Indentation for available options (#430)
  • -
  • We have implemented the option "Identifier Case Synchronization". This works as follows: The editor picks up the first occurrence of an Identifier (class name, variable name etc) in a source file and make sure that all other occurrences of that identifier in the same source file use the same case. This does NOT enforce casing across source files (that would be way too slow)
  • -
  • We have added color settings to the VS Color dialog for Matched braces, Matched keyword and Matched identifiers. Open the Tools/Options dialog, Choose Environment/Fonts and Colors and look for the colors in the listbox that start with the word "X#". You can customize these to your liking.
  • -
  • X# projects that use the Vulcan Runtime now have a context menu item that allows you to convert them to the X# runtime. Standard Vulcan assemblies will be replaced with the equivalent X# runtime assemblies. If you are using 3rd party components such as bBrowser or ReportPro then you need to replace the references to these components yourself.(#32)
  • -
  • We have added an option to the language page of the project properties to set the new /allowoldstyleassignments commandline option for the compiler
  • -
    - - Bug fixes - -
  • Fixed a problem with Get Latest Version for solution that is under TFS (#1045)
  • -
  • Fixed WinForm designer changing formatting in main-prg file (#806)
  • -
  • Fixed some problems with code generation in the WinForms designer (#1042, #1052)
  • -
  • Fixed a problem with formatting of DO WHILE (#923)
  • -
  • Fixed problem with Light Bulb "Generate default constructor" feature (#1034)
  • -
  • Fixed problem with ToolTips in the Debugger. We now parse the complete expression from the first token until the cursor location. (#1015)
  • -
  • Fixed some remaining intellisense issues with .Net array locals defined with VAR (#569)
  • -
  • Fixed a problem with indenting not working correctly in some cases (#421)
  • -
  • Fixed a problem with auto outdenting (#919)
  • -
  • Several improvements to keyword pair matching (#904)
  • -
  • Fixed a problem with Code Completion showing also static members after typing a dot in "ClassName{}." #1081
  • -
  • Fixed a performance Issue when typing . for .and. (#1080)
  • -
  • Fixed a problem with the navigation bar while typing new classes/methods (#1041)
  • -
  • Fixed incorrect info tooltips on keywords (#979)
  • -
  • Fixed a possible VS freeze when using "Clean Solution" (#1053)
  • -
  • Fixed incorrect positioning of caret in eventhandlers in the form designer (#1092)
  • -
  • Fixed a problem with the form designer failing to open forms after creating a new one (#1093)
  • -
  • Right Click on a packages.config file and choosing the option "Migrate to packagereferences" did not work because inside Visual Studio there is a hardcoded list of supported project types. We are now "faking" the projecttype to make VS happy and enable the wizard.
  • -
    - Build System - -
  • The XSharp.Build.Dll, which is responsible for creating the command line when compiling X# projects in VS, was not properly passing the /noconfig and /shared compiler options to the compiler. As a result the shared compiler was not used, even when the project property to use the Shared Compiler was enabled. Also the compiler was automatically including references to all the assemblies that are listed inside the file xsc.rsp, which is located inside the XSharp\bin folder.
    You may experience now that assemblies will not compile because of missing types. This will happen if you are using a type that is inside an assembly that is listed inside xsc.rsp. You should add explicit references to these assemblies in your X# project now.
  • -
    - Changes in 2.12.2.0 - Compiler - Bug fixes - -
  • Fixed a bug in the code generation for handling FoxPro array access with parenthesized indices (#988, #991)
  • -
  • The compiler was generating incorrect warnings for locals declared with IS. This has been fixed.
  • -
  • The compiler was not reporting an error on invalid usage of the OVERRIDE modifier on ACCESS/ASSIGNs, this has been fixed (#981)
  • -
  • Fixed inconsistent behavior in reporting warnings and errors in several cases when converting from various numeric data types to another (#951, #987)
  • -
  • Fixed some "failed to emit module" issues with iif() statements in some cases (#989)
  • -
  • Fixed a problem with compiling X# code scripts (#1002)
  • -
  • Fixed a problem with using classes for some specific assemblies in the macro compiler (#1003)
  • -
  • Fix an incorrect error message when adding an INT to a pointer in AnyCPU mode (#1007)
  • -
  • Fixed a problem with casting STRING to PTR syntax (#1013)
  • -
  • Fixed a problem with PCount() when passing a single NULL argument to a CLIPPER function/method (#1016)
  • -
    - New Features - -
  • We have added support for the TEXT .. ENDTEXT command in all dialects. Please note that there are several variations of this command. One variation work in ALL dialects (TEXT TO varName). Other variations depend on the dialect chosen. We have moved the support for TEXT .. ENDTEXT now also from the compiler to the preprocessor. This means that there are also 2 new preprocessor directives, #text and #endtext (#977, #1029)
  • -
  • Implemented new compiler option /vo17, which implements a more compatible to VO behavior for the BEGIN SEQUENCE..RECOVER command (#111, #881, #916):
  • - -
  • For code that contains a RECOVER USING, a check is made for wrapped exceptions. When the exception is not a wrapped exception then a function in the runtime is called (FUNCTION _SequenceError(e AS Exception) AS USUAL) that can process the error. It can for example call the error handler, or throw the error
  • -
  • When there is no RECOVER USING clause , then the compiler generates one and from within this generated clause detects if the RECOVER was reached with a wrapped exception or a normal exception. For wrapped exceptions it gets the value and calls a special function in the runtime (FUNCTION _SequenceRecover(uBreakValue AS USUAL) AS VOID). When the generated recover is called with a 'normal' exception then _SequenceError function from the previous bullet is called.
  • -
    -
    - -
  • We have added support for CCALL() and CCALLNATIVE()
  • -
  • The #pragma directives are now handled by the preprocessor. As a result you can add #pragma lines anywhere in your code: between entities, inside the body of an entity etc.
  • -
    - Runtime - Bug fixes - -
  • Changed the prototype for AdsGetFTSIndexInfo (#966)
  • -
  • Fixed a problem with TransForm and decimal types (#1001)
  • -
  • Added several missing return types in the VFP assembly
  • -
  • Fixed a problem with browsing a DBFVFP table in the FoxPro dialect
  • -
  • Fixed an inconsistency with handling values provided by BREAK commands inside surrounding BEGIN...RECOVER statements, depending on if early or late bound call is used (#883)
  • -
  • Fixed a problem with floating point format when assigning a System.Decimal value to a USUAL var (#1001)
  • -
  • Fixed a runtime error with DbCopyToArray() when copying to an array that has more columns than the table, in the FoxPro dialect (#993)
  • -
  • Fixed a problem with the typecast expression and numeric literals with the +/- sign in the macro compiler (#1025)
  • -
  • Fixed problem in the Late binding code where a string was sometimes passed in and not properly converted to symbol
  • -
  • IVarPut()/IVarGet() now throw an appropriate exception when trying to use an inaccessible (due to limiting visibility modifiers) property getter/setter (ACCESS/ASSIGN) (#1023)
  • -
  • Fixed an issue with IVarGet() and IVarPut() for properties that are redefined in a subclass with the NEW modifier (#1030)
  • -
  • DbDataSource now tries to lock a record when deleting or recalling the record
  • -
  • Foreach was not working correctly on properties containing collections that were returned from a late bound property access such as IVarGet()(#1033)
  • -
    - New Features - -
  • You can now register a delegate in the runtime state that allows you to control how the macro compiler caches types from loaded assemblies(#998).
    This delegate has to have the format:

    DELEGATE MacroCompilerIncludeAssemblyInCache(ass as Assembly) AS LOGIC

    Example:

    XSharp.RuntimeState.MacroCompilerIncludeAssemblyInCache := { a  =>  DoNotCacheDevExpress(a)}
    FUNCTION DoNotCacheDevExpress(ass as Assembly) AS LOGIC)
      // do not cache DevExpress assemblies
      RETURN ass:Location:IndexOf("devexpress", StringComparison.OrdinalIgnoreCase) == -1
  • -
    - Compatible VO SDK - -
  • Fixed an issue where SetAnsi(FALSE) causes SingleLineEdit controls with pictures to show random characters when entering umlauts (#1038)
  • -
    - Typed VO SDK - There are 2 new properties for the SQLSelect class. - -
  • ReadOnly - which makes the SQLSelect Readonly
  • -
  • BatchUpdates - which controls how updates are handled
  • -
    - ReadOnly cursors and delayed creation of command objects - Previously the SQLSelect class created DbCommand objects to update, insert and delete changes made to a cursor immediately when the result set was opened.
    That could cause problems when a complex query was used to select data, because the DbCommandBuilder object could not figure out how to create these statements.
    - We are now delaying the creation of these commands until the first time they are needed.
    At the same time we have now added a ReadOnly property with a default value of FALSE.
    - If you set ReadOnly to true then: - -
  • Calling FieldPut(), Delete() and Append() will generate an error with Gencode EG_READONLY.
  • -
  • No Command objects will be created for the SQLSelect, because the cursor cannot be updated.
  • -
    - If ReadOnly remains FALSE then the command objects to update, insert and delete will be created the first time they are needed.
    These commands are created in the __CreateDataAdapter() method.
    You can override this method and create the commands in your own subclass when you want.
    The command creation and the updates work as follows:
    - -
  • First a DataAdapter (of type DbDataAdapter) is created using the CreateDataAdapter method from the SQLFactory class
  • -
  • Then a CommandBuilder object (of type DbCommandBuilder) is created from the CreateCommandBuilder method of the SQLFactory class
  • -
  • Then the Insert, Delete and Update Command objects (all of type DbCommand) are created from the GetInsertCommand() etc methods from the DbCommandBuilder object. The DBCommandBuilder object takes the Select statement and creates commands with parameters based on the SQLSelect command
  • -
  • These command objects are assigned to the DataAdapter and then the DataAdapter:Update() method is called with the DataTable that is behind the SQLSelect as argument.
  • -
    - Batch Updates - Normally updates in a SQLSelect will be sent to the server when you move the record pointer to a new row, or when you call Update() - If you set the BatchUpdates property to TRUE then the SQLSelect will delay sending updates to the server and will not do that for each record movement, but will wait until you call the Update() method with an argument TRUE. This will then write all the buffered changes to the server. This may then also trigger the creation of the DBCommand objects (see before).
    If your table has autoincrement fields then you may want to call Requery() afterwards to see the newly assigned key values.
    - Visual Studio Integration - Bug fixes - -
  • Fixed the handling for project property pages for flavored projects (#992)
  • -
  • When trying to start the debugger with a non existing working directory or program file name, now an appropriate error is displayed (#996)
  • -
  • Fixed a problem with the form designer generating sometimes invalid code with #regions (#1020, #935)
  • -
  • The WinForms designer now by default adds the OVERRIDE keyword modifier to the generated Dispose() method (was added in the template) (#1004)
  • -
  • Due to a changed threading model inside the latest VS2022 releases, error messages were sometimes not shown in the output window and the error list. This has been fixed
  • -
  • Fixed a problem in the windows forms designer code generation with nested classes inside the main form class (#1031).
  • -
  • Fixed problem with windows forms editor failing to open form with command based on UDC (#1037).
  • -
    - Sourcecode Editor - -
  • Type lookups on full names were sometimes failing because the fullname was defined as case sensitive (#978)
  • -
  • Nested type lookup was sometimes failing. This has been fixed.
  • -
  • The indenting options can now also be overridden in the .editorconfig file (#999)
  • -
  • When a source file was loaded in the editor then the combo boxes with types and members were not activated until the caret was moved in the buffer (#995)
  • -
  • The member combobox in the editor was getting confused for code that contains local functions or local procedures.
  • -
  • Fixed a lookup problem for expressions inside a conversion or cast with a keyword, such as DWORD( SomeExpression). There were no quick info tips for the expression inside the parentheses for the conversion (#997)
  • -
  • Fixed an intellisense problem with DATATYPE(<expression>) conversion expressions (#997)
  • -
  • Fixed a problem with properties declared with the => symbol in their implementation causing Navigation Bar contents to be incomplete (#1008)
  • -
  • Fixed several issues with code folding and formatting (#975)
  • -
  • Fixed problem with typing a comma inside an argument list did not invoke the Parameters Tooltip (#1019)
  • -
  • Fixed some issues with the detection of variable types for the VAR keyword (#903)
  • -
  • Fixed an Intellisense problem with typing ":" or "." inside a string literal (#1021)
  • -
  • Fixed a problem with unknown identifiers sometimes causing bogus member completion list to show (#1022)
  • -
  • Pressing CTRL+SPACE in the editor now always invokes a code completion list (#957)
  • -
    - New Features - -
  • Added options to insert page and reorder pages in a tabcontrol, in the VOWED (#1024)
  • -
  • We have updated the WPF Application template. The Main window is now called  "MainWindow".
  • -
  • Added the following new settings to the .editorconfig file to set indentation options (#999).
  • -
    - -
  • indent_entity_content (true or false)
  • -
  • indent_block_content (true or false)
  • -
  • indent_case_content (true or false)
  • -
  • indent_case_label (true or false)
  • -
  • indent_continued_lines (true or false)
  • -
    - - VOXporter - -
  • The VOXporter now correctly enabled or disables the Allow MEMVAR/Undeclared vars compiler options, if they were enabled in the VO app (#1000)
  • -
    - Changes in 2.11.0.1 - Compiler - Bug fixes - -
  • Fixed an internal compiler error with CLIPPER calling convention delegates (#932)
  • -
  • Fixed an AccessViolationException at runtime with the Null-conditional operator ?. on a usual property (#770)
  • -
  • [XBase++ dialect] Fixed a problem with parsing method declarations with parentheses (#927)
  • -
  • [XBase++ dialect] Fixed a problem with parsing the (obsolete in X#) ANNOUNCE and REQUEST statements (#929)
  • -
  • [XBase++ dialect] Fixed a problem with parsing INLINE ACCESS and ACCESS ASSIGN statements (#926)
  • -
  • [VFP dialect] Fixed a problem with parsing FOR EACH statements containing "M." variables usage where the variable was not typed in the FOR EACH line (#911) .
  • -
  • Fixed a problem where the PPO files contains some output twice, when a single UDC was producing several statements (#933)
  • -
  • Fixed some issues with the "FIELDS" clause in several UDCs (#931, #795)
  • -
  • Fixed a problem in the preprocessor with parentheses in #xtranslate directives (#963)
  • -
  • Fixed several more issues with #command and #translate directives (#915)
  • -
  • In some cases, the compiler would emit code that does not throw a runtime exception, when casting/converting from one type to an incompatible one. This has been fixed (#961, #984)
  • -
  • The compiler was not reporting narrowing conversion warnings in several cases, this has been fixed (#951)
  • -
  • The compiler was not reporting signed/unsigned conversion warnings. This has been fixed (#971)
  • -
  • Fixed a problem that could lead to the "Could not emit module" error message, caused by NULL values inside IIF() expressions(#989)
  • -
    - New features - -
  • Added compiler option /noinit to not generate $Init calls for libraries without INIT procedures for the sake of postponed loading (#854)
  • -
  • Added preprocessor support for #stdout and #if. (#912)
  • -
  • The full contents of #include files is now written to the ppo file (#920)
  • -
  • When a parser error occurs because an identifier was replaced by a define with the same name, then the compiler will now generate a second warning.
  • -
  • If a header file contains actual code and this code is called during debugging then the debugger will now step into the header file when debugging this code.
    Previously all statements were linked to the #include line from the place where the header was included. (#967)
  • -
  • When you are suppressing compiler errors with the /vo11 (Compatible numeric conversion) compiler option you will now see a XS9020 "narrowing" warning indicating that a runtime error may happen or that data may be lost.
  • -
  • When you are suppressing conversion errors between signed and unsigned integers with /vo4 then you will now see as XS9021 warning indicating that data may be lost or an overflow error may occur.
  • -
    - Visual Studio Integration - New features - -
  • The source code editor now also supports the new #if and #stdout preprocessor commands  (#912)
  • -
  • There is new "Lightbulb" option to generate constructors for classes.
  • -
    - Bug Fixes - -
  • Fixed a problem with specifying custom preprocessor defines in the project properties (#909)
  • -
  • The VO-style editors now retain existing "CLIPPER" clause to methods/constructors when generating code (#913)
  • -
  • Fixed incorrect parsing of classes as nested to each other (#939)
  • -
  • Fixed a problem with using embedded variables in the form of $(SomeName) in the project settings (#928)
  • -
  • Fixed a problem where deleting items from a project would fail.
  • -
  • Fixed a problem resolving the DLL produced by project files from other development languages, in particular SDK style C# projects (#950)
  • -
  • Fixed a problem with quick info tooltip after an unrecognized identifier (#894)
  • -
  • Fixed a problem with the editor incorrectly adding parentheses after auto typing a property (#974)
  • -
  • Fixed extremely slow editor response when creating a new line after an #endif directive (#970)
  • -
  • Fixed some intellisense issues with .Net array types (#569)
  • -
  • Fixed a problem with the DevExpress DocumentManager control at design time (#976)
  • -
  • Fixed an ArgumentNullException in the Output window when "Show output from" is set to "Extension" (#940)
  • -
    - Runtime - New features - -
  • Added a constructor with IEnumerable to the array class (#943)
  • -
  • Implemented missing functions AdsSetTableTransactionFree() and AdsGetFTSIndexInfo() (#966)
  • -
  • Moved functions GetRValue(), GetGValue() and GetBValue() from the Win32API library to XSharp.RT, so they can be used by AnyCPU code (#972)
  • -
  • [VFP dialect] Implemented function APrinters() (#952)
  • -
  • [VFP dialect] Implemented function GetColor() (#973)
  • -
  • [VFP dialect] Implemented functions Payment(), FV() and PV() (#964)
  • -
  • [VFP dialect] Implemented commands MKDIR, RMDIR and CHDIR (#614)
  • -
    - Bug fixes - -
  • Fixed a problem with the ListView TextColor and TextBackgroundColor ACCESSes in the SDK (#896)
  • -
  • Fixed a problem with soft Seek not respecting order scope when to strict key is found (#905)
  • -
  • Fixed DBUseArea() search logic for files in various folders. Also SetDefault() is no longer initialized with the current directory (for VO compatibility) (#908)
  • -
  • Fixed problem with creating dbfs with character fields with length > 255 (#917)
  • -
  • Fixed a problem with the buffered read system in some cases when a dbf was being read, closed, overwritten and then reopened (#968)
  • -
  • Fixed a VO compatibility problem with how DBSetIndex() changes the active order when opening index files (#958)
  • -
  • Fixed a problem with db append, copy etc, when both source and destination files have the same structure and include a memo file (#945)
  • -
  • Fixed an incorrect result of DBOrderInfo(DBOI_ORDERCOUNT) with a non existing or not open index file (#954)
  • -
  • [VFP dialect] Added optional parameter to Program( [,lShowSignature default=.f.] ) (#712)
  • -
  • [VFP dialect] Fixed several issues with the Type() function (#747, #942)
  • -
  • [VFP dialect] Fixed a problem with ExecScriptFast() (#823)
  • -
  • [VFP dialect] Fixed a problem with SQLExec() not putting the record pointer on the first record (#864)
  • -
  • [VFP dialect] Fixed a problem with SQLExec() with null values (#941)
  • -
  • [VFP dialect] Fixed a write error in the buffer returned from SqlExec() (#948)
  • -
  • [VFP dialect] Fixed a problem with the DBFVFP RDD and null columns (#953)
  • -
  • [VFP dialect] Fixed a problem with SCATTER TO and APPEND FROM ARRAY (#821)
  • -
    - Typed SDK - -
  • Fixed a problem with the FileName property of standard open dialogs
  • -
  • Fixed a problem with a FOREACH inside the Menu constructor causing handled exceptions
  • -
    - RDD - Bug fixes - -
  • Fixed a problem in the DBFVFP RDD with the calculation of the keysize of nullable keys (#985)
  • -
    - VOXporter - Bug fixes - -
  • Fixed incorrectly detecting pointers to functions inside literal strings and comments (#932)
  • -
    - - Changes in 2.10.0.3 - Compiler - Bug fixes - -
  • Fixed some problems with COPY TO ARRAY command in the FoxPro dialect (#673)
  • -
  • Fixed a problem with using a System.Decimal type on a SWITCH statement (#725)
  • -
  • Fixed an internal compiler error with Type() in the FoxPro dialect (#840)
  • -
  • Fixed a problem with generating XML documentation (#783, #855)
  • -
  • Prevented a warning from appearing for members of SEALED classes when /vo3 (all members VIRTUAL) is enabled (#785)
  • -
  • Fixed problems with assigning and comparing "ARRAY OF <type>" vars to NULL_ARRAY (#833)
  • -
  • Fixed some issues with passing arguments by reference with the @ operator and/or using it as the AddressOf operator (#810, #899, #902)
  • -
  • Fixed a problem resolving parameters passed by reference with the @ operator when the function/ method had a parameter of the pointer type (#899, #902)
  • -
    - New features - -
  • Added compiler option (-enforceoverride) to make the OVERRIDE modified mandatory when overriding a parent member (#786, #846)
  • -
  • The compiler now reports an error when using String2Psz() and Cast2Psz() in a non local context (since such PSZs are being released on exiting the current entity) (#775)
  • -
  • FUNCTIONs and PROCEDUREs now support the ASYNC modifier (#853)
  • -
  • You can now suppress the automatic generation of the $Init1() and $Exit() functions by passing the compiler commandline
    option -noinit (#854). This is NOT yet supported in the VS Properties dialog
  • -
  • Added support for the ASTYPE operator also for USUAL vars (#857)
  • -
  • Allowed specifying AS <type> clause in PUBLIC var declarations (ignored by the compiler, but used by the editor in the future for intellisense) (#853)
  • -
  • The AS <datatype> OF <classlib> clause is now also supported for several other FoxPro compatible commands, such as PARAMETERS and PUBLIC.
    Since these variables are untyped at runtime by nature, the clause is ignored by the compiler and a warning is shown.
  • -
    - Build System - Bug Fixes - -
  • Running MsBuild on a X# WPF project could fail (#879)
  • -
    - Visual Studio Integration - New features - -
  • We have added Visual Studio integration for VS 2022
  • -
  • We have added support for Package References
  • -
  • Now XML comments are automatically inserted in the editor when the user types "///". (#867, #887) Conditions:
  • - -
  • Cursor must be on a line before the start of an entity
  • -
  • Cursor must NOT be before a comment line
  • -
    -
    - -
  • Now the tooltip on a class includes also information about the parent class and implemented interfaces (if any) (#860)
  • -
  • We have added tooltips, parameter completion etc for the pseudo functions that are built into the compiler, such as PCount() and String2Psz().
  • -
  • We have added a first version of Lightbulb tips. For now to implement missing interface members and to convert a field to a Property. More implementations and configuration options will follow
  • -
  • We have added a new dialog to configure source code formatting with visual examples of the effects of the options.
  • -
  • We have added the ability to log operations of the X# VS integration to the Windows debug window and/or a logfile.
    If you are experiencing unexplainable problems we will contact you and tell you how to enable these options, so you can send us a log file that shows what happened before a problem occurred inside Visual Studio. We have used Serilog for this.
  • -
  • The Highlight Word feature now is case insensitive and no longer hightlights words that are part of a comment, string or inactive editor region
  • -
  • We have added 'Brace Completion' to the editor
  • -
    - Bug Fixes - -
  • Fixed some problems with the Format Document command (#552)
  • -
  • Fixed several issues with Parameter Tooltips (#728, #843)
  • -
  • Fixed problem with code completion list showing even for not defined vars/identifiers (#793)
  • -
  • Fixed member completion and parameter tooltips with chained expressions (#838)
  • -
  • Fixed recognition of type for VAR locals in some cases (#844)
  • -
  • Fixed member completion and tooltip info problems with VOSTRUCT vars (#851)
  • -
  • Fixed a problem with ignoring Line Breaks in XML Comments (#858)
  • -
  • Fixed some WinForms designer problems with CHAR properties (#859)
  • -
  • Fixed a problem with Goto Definition not working correctly with SUPER() constructor calls (#862)
  • -
  • Fixed an error with the Rebuild Intellisense Database command, when the solution contains a space in the path (#865)
  • -
  • Goto Definition for types from external assemblies was failing when there was more than one copy of VS running at the same time.
  • -
  • Fixed a problem with a VOSTRUCT some times confusing the parser (#868)
  • -
  • Fixed some more problems with quickinfo and member completion (#870)
  • -
  • Fixed a problem in the Windows Forms designer (#873)
  • -
  • Fixed an intellisense problem with ENUMs using no MEMBER keywords (#877)
  • -
  • Fixed a member completion problem with inherited exception types (#884)
  • -
  • If an XML topic had sub elements of type <see> or other these were not shown in the editor. This has been fixed (#900)
  • -
  • Unbalanced braces were sometimes matched in the editor with keywords. This has been fixed (#892)
  • -
  • Line separators were sometimes flickering. This has been fixed (#792)
  • -
  • When parsing for local variables we were not processing the include files. This could lead to a situation where a local that was declared in a conditional block (#ifdef SOMEVAR) was not found. This has been fixed. The editor parser now includes the header files and #defines and #undefines found in the code even when parsing a part of the source file (#893)
  • -
  • #include lines are now included in the fields/members combobox in the editor (when fields are shown). They are also saved to the intellisense database.
  • -
  • The editor was trying to show QuickInfo tooltips when the cursor was over an inactive preprocessor region (#ifdef). This no longer happens.
  • -
    - Runtime - Bug fixes - -
  • Fixed DBFCDX corruption that could happen with simultaneous updates (#585)
  • -
  • Fixed a problem opening FoxPro tables with indexes on nullable fields (#631)
  • -
  • The BlobGet() function was returning a LOGIC instead of the actual field value (#681)
  • -
  • Greatly improved speed of index creation with large number of fields in the index expression (#711)
  • -
  • Fixed some problems with  FieldPutBytes() and FieldGetBytes() (#797)
  • -
  • DBSeek() with 3rd param (lLast) TRUE had incorrect behavior in some cases (#807)
  • -
  • Fixed a potential NullreferenceException that could happen when creating indexes (#849)
  • -
  • Improved indentation in the text produced by the method Error.WrapRawException() (#856)
  • -
  • Fixed a runtime problem when converting .Net Array <-> USUAL (#876)
  • -
  • DbInfo() was returning TRUE even when an info enum was not supported.(#886)
  • -
  • Fixed also a possible DBFNTX corruption problem (#889)
  • -
  • DbEval() could fail in FoxPro when the codeblock was returning NIL or was VOID (#890)
  • -
  • Fixed a problem with Softseek and descending indexes.
  • -
  • Fixed a problem where incorrect scope expressions could lead to unexpected results. Now the server goes to (and stays at) EOF with an incorrect scope.
  • -
  • Fixed a problem with accessing FoxPro arrays with the parenthesis operators in a macro expression (#805).
    Please note that for this to work you have to compile the main program with /fox2
  • -
    - - Changes in 2.9.1.1 (Cahors) - Compiler - Bug fixes - -
  • Fixed a problem introduced in 2.9.0.2 with define symbols not respecting the /cs compiler option in combination with the /vo8 compiler option (#816)
  • -
  • Fixed an internal compiler error with assignment expressions inside object initializers when the /fox2 compiler option is enabled (#817)
  • -
  • Fixed some problems with DATEs in VOSTRUCTs (#773)
  • -
  • Fixed a problem in the preprocessor that would occur when using a list rule like FIELDS <f1> [,<fn> ] in the middle of a UDC.
  • -
  • Fixed a problem compiling UDCs such as SET CENTURY &cOn because cOn was not parsed as an identifier but as a keyword.
  • -
    - New features - -
  • There is a new result marker (the NotEmpty result marker) in the preprocessor that does the same as the regular result marker, but writes a NIL value to the output when the (optional) match marker is not found in the input.
    This can be used when you want to make the result a part of an IIF() expression in the output, since the sections inside an IIF expression may not be empty.
    The result marker looks like this: <!marker!>
  • -
  • Using a Restricted match marker as the first token in an UDC was not allowed before. This has been fixed. You can now write a rule like this, which will output the keyword (SCATTER, GATHER or COPY) followed by the stringified list of options.
  • -
    - #command <cmd:SCATTER,GATHER,COPY> <*clauses*> => ?  <"cmd">, <"clauses">
    FUNCTION Start AS VOID
       SCATTER TO TEST   // is preprocessed into ? "SCATTER" , "TO TEST"
       RETURN
    - Visual Studio Integration - Bug Fixes - -
  • Fixed a problem introduced in 2.9.0.2 with code generation for WPF projects (#820)
  • -
  • Fixed a VS freezing problem after building (#819)
  • -
  • Fixed some problems with code collapsing and the navigation bar for source files that contains a SELF property (#825)
  • -
  • Fixed a problem with the form designer emitting invalid code when the form prg contains nested classes (#828)
  • -
  • Fixed a problem with code completion showing the wrong members when opened just left to a closing paren (#826)
  • -
  • Fixed a VS crash when clicking on a generic class (#827)
  • -
  • Fixed a problem with the keyword colorization for expressions such as SET CENTURY &cOn, where &cOn was colored in the keyword color.
  • -
  • Parameter tips for nested function calls required an extra space before the name of the nested function (#728)
  • -
  • Fixed a problem with the form designer deleting delegates and other nested types in the form.prg (#828)
  • -
  • The background process to load the types in the ClassView / ObjectView windows was slowing down the VS performance. This has been disabled for now.
  • -
  • Fixed type lookup for Generic types.
  • -
  • Hovering the mouse over a constructor keyword was showing a tooltip for the class and not for the constructor. This has been fixed.
  • -
  • Fixed an issue in the code generator for Windows Forms for literal characters with special values (such as '\0') (#859)
  • -
  • Fixed an exception in the project system when the project system was initialized in the background (for example when no X# projects were opened) (#852)
  • -
  • Fixed missing code completion for the LONGINT and SHORTINT keywords (#850)
  • -
  • The context menu option "View in Disassembler" is now only shown for X# projects
  • -
  • Fixed code generator problem with ARRAY OF <type> (#842)
  • -
  • Fixed a performance problem when clicking on code in the editor (#829)
  • -
  • Fixed a problem with loading Windows Forms when the lookup of a nested type failed.
  • -
    - - New features - -
  • We have added a context item to the project context menu in the solution explorer to edit the project file. This will unload the project when needed and then open the file for editing.
  • -
  • The Rebuild Intellisense Database menu option in the Tools/XSharp menu now unloads the current solution, deletes the intellisense database and reopens the solution to make sure that the database is recreated correctly.
  • -
  • We have made some changes to the process that parses the source code for a solution in the background.
  • -
  • Generic Typenames are now stored in the Name`n format in the Intellisense database, for example IList`1 for IList<T>
  • -
    - Runtime - New features - -
  • Added missing ErrorExec() function (#830)
  • -
  • Added support for BlobDirectExport, BlobDirectImport, BlobDirectPut and BlobDirectGet (#832)
  • -
  • Fixed a problem with creating DBF files with custom file extension. Also added support for _SET_MEMOEXT (#834)
  • -
  • When you do a numeric operation on two USUALs of different types we now make sure that decimal values are no longer lost (#808). For example a LONG + DECIMAL will result in a DECIMAL. See the table in the USUAL type page in this help file for the possible return values when mixed types are used.
  • -
    - - - Bug Fixes - -
  • Fixed a problem with _PrivateCount() throwing an InvalidateOperationException (#801)
  • -
  • Fixed a problem with member completion in the editor sometimes showing methods of the wrong type (#740)
  • -
  • Fixed some problems with the ACopy() function (#815)
  • -
  • Fixed a few issues that were remaining related to DATEs in VOSTRUCTs (#773)
  • -
    - Macro compiler - New features - -
  • Added support for the & operator (#835)
  • -
  • Added support for parameters by reference (both @ and REF are supported) for late bound method calls (#818)
  • -
    - VOXporter - Bug Fixes - -
  • Fixed problem with incorrectly prefixing PUBLIC declarations with "@@"
  • -
    - - Changes in 2.9.0.2 (Cahors) - Compiler - New features - -
  • The parser now supports class variable declarations and global declarations with multiple types(#709)
  • -
    - EXPORT var1 AS STRING, var2, var3 as LONG - GLOBAL globalvar1 AS STRING, globalvar2, globalvar3 as LONG - -
  • If you are using our parser you should be aware that the ClassVarList rule has disappeared and that the ClassVars, VoGlobal and ClassVar rules have changed.
  • -
    - -
  • We have added a command to fill a foxpro array with a single value
  • -
    - STORE <value> TO ARRAY <arrayName> - - -
  • When you create a VOSTRUCT or UNION that contains a DATE field, then the compiler will now use the new __WinDate structure that is binary compatible with how DATE values are stored inside a VOSTRUCT or UNION in Visual Objects (#773)
  • -
  • It is now possible to use parentheses for (instead of brackets) accessing ARRAY elements in the FoxPro dialect. The compiler option /fox2 must be enabled for that to work (#746)
  • -
  • We have added support (for the FoxPro dialect only) for accessing WITH block expressions inside code of a calling function / method. So you can type .SomeProperty and access the property that belongs to a WITH BLOCK expression inside the calling code. To use this Late Binding must be enabled, since the compiler does not know the type of the expression from the calling code (#811).
  • -
    - - Bug fixes - -
  • When you use the NEW or OVERRIDE modifier for a method where no (virtual) method in a parent class exists an error will now be generated (#586, #777)
  • -
  • Fixed a problem with LOGICAL AND and OR for USUAL variables in an array (#597)
  • -
  • Error messages and Warnings for some compiler generated code (such as Late bound code) were not always pointing to the right line number, but to the first line in the body of the method or function. This has been fixed. (#603)
  • -
  • Fixed a problem incorrect return values for IIF expressions (#606)
  • -
  • Fixed a problem in the compiler when parsing multiple method names on a DECLARE METHOD line (#708)
  • -
  • Fixed a problem in the FoxPro dialect with assigning a single value to an array to fill the array (#720)
  • -
  • Fixed a problem with the calculation of VOSTRUCT sizes when the structure contained a member of type DATE (734)
  • -
  • The previous problem caused runtime errors (#735)
  • -
  • Fixed a problem in code like this (#736)
    var aLen := ALen(Aarray)
  • -
  • Fixed a compiler crash when overriding CLIPPER method with STRICT for methods with typed return value (#761)
  • -
  • When the interface implementation had different casing then the definition then an incorrect error message was shown (#765)
  • -
  • Fixed a compiler crash with incorrect function parameters inside a codeblock (#759)
  • -
  • Recursive definitions of DEFINEs could result in an infinate loop inside the compiler causing a StackOverflowException(#755)
  • -
  • Fixed a problem with late bound calls and OUT parameters (#771)
  • -
  • If you compile with warning level 4 or lower then certain warnings for comparing value types to null are not shown. We have changed the default warning level to 5 now. (#772)
  • -
  • Fixed a compiler crash with multiple PRIVATE &cVarName statements in the same entity (#780)
  • -
  • Fixed a problem with possibly corrupting the USUAL NIL value when passing USUAL params by reference (#784)
  • -
  • Fixed a problem with declared PUBLIC variables getting created as PRIVATE in the FoxPro dialect (#753)
  • -
  • Fixed a problem with using typed defines as default arguments (#718)
  • -
  • Fixed a problem with typed DEFINEs that could produce constants of the wrong type (#705)
  • -
  • Fixed a problem with removing whitespace from #warning and #error directive texts (#798)
  • -
    - Runtime - New Features - -
  • We have added several strongly typed overloads for the Empty() function that should result in a bit better performance (#669)
  • -
  • We have added an event handler to the RuntimeState class. This event handler is called "StateChanged" and expected a method with the following signature:
    Method MyStateChangedEventHandler(e AS StateChangedEventArgs) AS VOID
    The StateChangeEventArgs type has properties for the Setting Enum, the OldValue and the NewValue.
    You can use this if you have to synchronize the state between the X# runtime and an external app, for example a Vulcan App, VO App or for example (this is where we are using it) with an external database server, such as Advantage.
  • -
  • We have added a new (internal) type __WinDate that is used when you store a DATE value into a VoStruct or Union. This field is binary compatible with the Julian date that VO stores inside structures and unions.
  • -
  • We have added an entry to the RuntimeState in which the compiler stores the current /fox2 compiler setting for the main app.
  • -
  • Added runtime support to support filling FoxPro arrays by assigning a single value.
  • -
    - - Bug Fixes - -
  • Fixed a problem (incompatibility with VO) in the Descend() function (#779) - IMPORTANT NOTE: If you are using Descend() in dbf index expressions, then those indexes need to be reindexed!
  • -
  • Late bound code that was returning a PSZ value was not correctly storing that inside a USUAL (#603)
  • -
  • Fixed a problem in the Cached IO that could cause problems with low level file IO (#724)
  • -
  • The VODbAlias() function now returns String.Empty and not NULL when called on an area where no table is open. (#733)
  • -
  • Fixed a compatibility problem with the MExec() function (#737)
  • -
  • The M-> prefix was not recognized correctly inside codeblocks (#738)
  • -
  • The Explicit DATE -> DWORD cast was returning an incorrect value for NULL_DATE.
  • -
  • Fixed a problem with late bound calls and OUT parameters (#771)
  • -
  • Added a new __WinDate type that is used to store DATE values inside a VOSTRUCT or UNION. (#773)
  • -
  • Fixed several problems with FoxPro arrays
  • -
  • Removed TypeConstraints on T for functions that manipulate __ArrayBase<T>
  • -
  • Fixed a problem with Directory() including files that match by shortname but not by longname (#800)
  • -
    - RDDs - -
  • When creating a new DBF with the DBFCDX driver an existing CDX file is not automatically deleted anymore (#603)
  • -
  • Fixed a problem with updating memo contents in DBFCDX (#782)
  • -
  • Fixed a runtime exception when creating DBFCDX index files with long filenames (#774)
  • -
  • Fixed a problem with with DBSeek() with active OrderDescend() finding even deleted records
  • -
  • Fixed a problem with a missing call to AdsClearCallbackFunction() in the ADS RDD in OrderCreate() (#794)
  • -
  • Fixed a problem with VODBOrdCreate function failing it the cOrder parameter contains an empty string (#809)
  • -
    - Macro compiler - -
  • Fixed a problem in the Preprocessor
  • -
  • Added support for parameters passed by reference with the @ operator
  • -
  • Added support for M->, _MEMVAR-> and MEMVAR-> prefixes in the macro compiler
  • -
  • When the Macro compiler finds 2 or more functions with the same name it now uses the same precedence rules that the compiler uses:
  • - -
  • Functions in User Code are used first
  • -
  • Functions in the "Specific" runtimes (XSharp.VO, XSharp.XPP, XSharp.VFP, XSharp.Data) take precedence over the ones inside XSharp.RT and XSharp.Core
  • -
  • Functions in XSharp.RT take precedence over functions inside XSharp.Core
  • -
    -
    - Visual Studio Integration - In this build we have started to use the "Community toolkit for Visual Studio extensions" that you can find on GitHub. This toolkit contains "best practices" for code for VS Extension writers, like we are. As a result more code is now running asynchronously which should result in better performance. - We have also started to remove 32 bit specific code that would become a problem when migrating to VS 2022 which is a 64 bits version if Visual Studio that is expected to ship in November 2021. - New features - -
  • Added several new features to the editor
  • - -
  • The editor can now show divider lines between entities. You can enable/disable this in the options dialog (#280)
  • -
  • Keyword inside QuickInfo tooltips are now colored (#748)
  • -
  • Goto definition now also works on "external" types. The editor generates a temporary file that contains the type information for the external type. In the options dialog you can also control if the generated code should contains comments (as read from the XML file that comes with an external DLL). (#763)
  • -
  • You can control which keyword is used for PUBLIC visibility from the Tools/Optons menu entry (PUBLIC, EXPORT or No modifier at all)
  • -
  • You can control which keyword is used for PRIVATE visibility from the Tools/Optons menu entry (PRIVATE or HIDDEN).
  • -
    -
    - -
  • The various code generators inside VS now follow the capitalization rules from the source code editor.
  • -
  • The intellisense database now has views that return the unique namespaces in the source code and in the external assemblies
  • -
  • The X# specific menu points in the Tools menu have been moved to a separate submenut
  • -
  • Added option for the WinForms designer to generate backup (.bak) files of form.prg and form.designer.prg files when saving (#799)
  • -
    - Bug Fixes - -
  • Fixed several problems in the editor:
  • - -
  • We have made several improvements to increase the speed inside the editor (#689, #701)
  • -
  • Fixed a problem in the type lookup of variables for FOREACH loops (#697)
  • -
  • Parameter tips were not shown for methods selected from a completion list (#706)
  • -
  • Keyword case synchronization did not work when the keyword was not followed by a space (#722)
  • -
  • Goto definition always went to line 1 / column 1 in the file where a function was defined (#726)
  • -
  • Code completion for Constant members of classes (#727)
  • -
  • QuickInfo for DEFINES (#730, #739)
  • -
  • VOSTRUCT Member completion with the '.' operator (#731)
  • -
  • The ENUM and FUNC keywords are now recognized as identifier and not case synchronized in these cases.(#732)
  • -
  • Fixed a problem when opening files (#742)
  • -
  • Fixed parameter tip display for default values NULL, NULL_DATE and NULL_OBJECT (#743)
  • -
  • Fixes broken parameter tips for constructors (#744)
  • -
  • Nested classes were not always handled correctly by the intellisense (#745)
  • -
  • Fixed a problem in the type lookup of variables declared with ARRAY OF <something> (#749)
  • -
  • The Editor could sometimes "freeze" when the buffer contained invalid code (#751)
  • -
  • Non-existing namespaces would produce a bogus completion list (#760)
  • -
  • Fixed an editor exception in some cases when typing invalid code (#791)
  • -
    -
    - -
  • The code generator for Windows Forms was replacing tab characters with spaces. This has been fixed.(#438)
  • -
  • Fixed a problem with the Form Designer corrupting code that contains EXPORT ARRAY OF <type>
  • -
  • Fixed a problem with the Form Designer that when removing an event handler in the editor, some code was deleted (#812)
  • -
  • Fixed a problem with the Form Designer converting EXPORT, INSTANCE and HIDDEN keywords to PUBLIC and PRIVATE (#802)
  • -
    - VO-Compatible Editors - -
  • Now all VO-compatible editors support full Undo/Redo functionality. Also added cut/copy/paste functionality to the Menu editor
  • -
  • Fixed several visual problems with VOWED controls in Design and Test mode (#741)
  • -
  • Fixed a VS crash when Alt-Tabbing out of the editors, with the Properties window having focus (#764)
  • -
  • Adjusted ComboBoxEx controls to have the same fixed height, as in VO. Also allowed the previous behavior, when the user has manually increased the height by more than 50 pixels, then this height is being used instead (#750)
  • -
  • Added a bitmap thumbnail for the "Button Bmp" property of the Menu Editor in the Properties Window
  • -
  • Added support for specifying a Ribbon in the Menu Editor. The ribbon (bitmap) to be used needs to be specified as a filename in the properties of the Menu's main item (#714)
  • -
  • Fixed some issues with event code generation in the Window Editor (#441, #46)
  • -
    - - Changes in 2.8.3.15 (Cahors) - Compiler - New features - -
  • You can now use the .AND. logical operator and .OR. logical operator between variable names or numbers without leading or trailing whitespace (a.AND.b)
  • -
  • The PRIVATE declaration in the FoxPro dialect no longer allows an initializer.
  • -
  • Added support for the FoxPro NULL date ( { / / }, { - - } and { . . }) in the FoxPro dialect
  • -
    - Bug fixes - -
  • Fixed a problem with a DIM array that uses a DEFINE for its dimension (#638)
  • -
  • Fixed a problem with the FoxPro PUBLIC ARRAY command (The ARRAY keyword is no longer mandatory)  (#662).
  • -
  • Fixed a problem with DEFAULT(Usual) expressions as parameters for function / method calls (#664)
  • -
  • Fixed a problem with variables declared with the LOCAL declaration and dimensioned with the DIMENSION command (#683)
  • -
  • Fixed issue with overloads with the same name in different X# runtime assemblies that manifested itself with problems with FRead()(#686)
  • -
  • Fixed a problem with passing PRIVATE and PUBLIC memory variables by reference (#691)
  • -
  • Fixed a problem with PARAMETERS statement (#691)
  • -
  • Fixed a problem with real numbers (#704) that was caused by the change in handling of .AND. and .OR.
  • -
  • Fixed a problem parsing the DECLARE METHOD / ACCESS / ASSIGN lines inside class declarations.
  • -
  • Fixed a problem with truncating results for binary operators (+, -, *, /) for mixed integral types (e.g. int and word)
  • -
    - Runtime - Bug Fixes - -
  • The _shutdown flag in the Runtime State is now set when the system shuts down.
  • -
  • Fixed a problem with the FoxPro ALen() function (#650)
  • -
  • Added default values on several locations (#678)
  • -
  • Fixed a problem where FRead() on a file opened by an RDD would go into an endless loop (#688)
  • -
  • Fixed a problem with FieldGet() when the file is at EOF (#698)
  • -
  • Fixed a scope problem when the scope was empty and a record matching the scope was added in another workarea or by another workstation (#699)
  • -
  • Fixed a problem with the BOF setting after a Skip(0) (#700)
  • -
    - MacroCompiler - New features - -
  • You can now use the .AND. operator between variable names or numbers without leading or trailing whitespace
  • -
  • Added support for the FoxPro NULL date ( { / / }, { - - } and { . . }) in the FoxPro dialect
  • -
  • Strings containing .AND. and .OR. are no longer reformatted by the macro compiler (#694)
  • -
  • We have added an experimental new faster script compiler. This script compiler allows to compile statements, so no functions, classes etc.
    This new script compiler is much faster than the existing script compiler and uses a lot less memory.
    To call this script compiler use the new function ExecScriptFast() which has the same parameters as ExecScript().
    You can compile multiline scripts. The compiler should recognize all statements including PARAMETERS and LPARAMETERS to receive parameters.
    If you are using scripts in your code we would love to hear feedback.
    An example of code that should work:
  • -
    -
    FUNCTION Start() AS VOID
    LOCAL ctest AS STRING
    TRY
       cTest := "? 'Hello world'"
       ExecScriptFast(cTest)
       cTest :=String.Join(e"\n",<STRING>{;
           "PARAMETERS a,b,c",;
           "RETURN CallMe(a,b,c)"})
       ? ExecScriptFast(cTest,1,2,3)
       cTest :=String.Join(e"\n",<STRING>{;
           "LPARAMETERS a,b,c",;
           "RETURN CallMe(a,b,c)"})
       ? ExecScriptFast(cTest,1,2,3)

    CATCH e AS Exception
       ? e:ToString()
       END TRY

    wait
    RETURN


    FUNCTION CallMe(a,b,c) AS USUAL
       ? "Inside function, parameters received",a,b,c
       RETURN a+b+c
    -
    Please test this new functionality and let us know what you think of it.
    - Visual Studio Integration - New Features - -
  • "Highlight word" now highlights words in the whole file when the cursor is outside of an entity (for example on the USING statements in the start of the file).
  • -
    - Bug Fixes - -
  • Fixed a problem with displaying names of custom controls in the toolbox of the VO compatible Windows Editor
  • -
  • Fixed a problem with extra spaces when loading settings from cavowed.inf for the VO compatible Windows Editor
  • -
  • Fixed a problem with an incorrect completion list after an assignment statement (#658)
  • -
  • Fixed an exception in the editor after deleting code (#674)
  • -
  • Fixed a "freeze" problem in the VS IDE when attaching a file to the shell window (#676)
  • -
  • Fixed a problem when using dot instead of colon in VO Dialect with AllowDot (#679)
  • -
  • Fixed a problem with showing a completion list inside class (#685)
  • -
  • Fixed a performance problem in the editor (#689)
  • -
  • Fixed a problem with showing function overloads in the editor (#692)
  • -
  • Fixed a problem with intellisense after a !, .NOT. or other operator (#693)
  • -
  • Fixed a problem where the incorrect methods were shown in the completion list (#695)
  • -
    - Tools - -
  • Fixed an issue in VOXPorter with resources and the copying to the Resources subfolder
  • -
    - - Changes in 2.8.2.13 (Cahors) - Compiler - -
  • Fixed issues with extension methods that were not marked as STATIC (#660)
  • -
  • Fixed problem with IIF() expressions that returned an OBJECT and were assigned to a Decimal
  • -
  • The pragma commands were not checking for the current dialect
  • -
  • Fixed an exception in the preprocessor
  • -
  • The FoxPro LOCAL ARRAY was not generating a LOCAL variable but a PRIVATE variable.
  • -
  • Functions in XSharp.RT that are overridden in XSharp.VO, XSharp.VFP or XSharp.RT will no longer generate a warning. The version that is not in XSharp.RT will have preference
  • -
  • Enumerating a USUAL variable in a FOREACH loop will now call a runtime function that returns the ARRAY inside the USUAL or throws an error otherwise
  • -
  • Implicit conversions from OBJECT -> NUMERIC are now supported when /vo7 is enabled.
  • -
    - Runtime - -
  • Enumerating a USUAL variable in a FOREACH loop will now call a runtime function that returns the ARRAY inside the USUAL or throws an error otherwise (#246)
  • -
  • Fixed a problem creating index with an Eval block and 0 records (#619)
  • -
  • Fixed an incompatibility with the ALen() function and array handling compared to FoxPro (#642)
  • -
  • We have fixed some issues in FoxPro AIns() function (#650)
  • -
  • We have added a ShowFoxArray() function that will be automatically called when you call ShowArray() on a FoxPro array (650)
  • -
  • Added support for OClone()
  • -
  • The _Quit() function now closes all databases and then kills the current running process (#665)
  • -
  • Fixed a problem with DbOrderInfo (#666)
  • -
  • Fixed a problem with the unary minus operator for currency values (#670)
  • -
  • Fixed a problem in the Integer function when a Currency value was sent in (#671)
  • -
  • We have added an implementation of MemCheckPtr() (#677)
  • -
    - - Macro compiler - -
  • Fixed a problem calling functions after a new assembly was loaded with Assembly.Load()
  • -
  • Added support for passing variables by references (not yet for functions with Clipper calling convention) (#653)
  • -
    - VO SDK - -
  • Fixed a problem in GetObjectByHandle() in the GUI Classes(#677)
  • -
    - Visual Studio Integration - -
  • Fixed an exception on the Build Options page inside VS (#654)
  • -
  • The project system did not write back the right property for the XML documentation generation (#654)
  • -
  • Intellisense could crash in header files (#657)
  • -
  • We have added #defines and user defined commands (#command, #translate) to the members combobox in the editor as members of the global type. You can now also do a Goto definition on a value defined with #define.
  • -
  • We have fixed a problem with member completion for enums (656)
  • -
  • We have fixed a problem with the Windows Forms Editor that could happen if another VS extension had loaded an older version of Mono.Cecil (#661)
  • -
  • Code completion was not showing instance members when the project option "Allow dot" was enables (#679)
  • -
  • The "header" new item template had a .VH extension. This has been changed to .XH
  • -
  • Fix a crash in the VO Compatible windows editor that happened with an incorrect CAVOWED.INF
  • -
  • Code completion inside parentheses for a method or function call was not working correctly
  • -
  • Improved Build Speed in Visual Studio when no files are changed (#675)
  • -
    - Tools - -
  • VO Xporter was generating 2 lines in the .xsproj file for the output folder (#672)
  • -
    - - - Changes in 2.8.1.12 (Cahors) - Compiler - -
  • Fixed issues with interpolated strings (#598, #622):
  • - -
  • The script compiler now correctly sets the AllowDot compiler option from the current active dialect in the runtime (Core & FoxPro: AllowDot = true)
  • -
  • When compiling with DOT(.) as instance method separator then the ":" character is used inside interpolated strings to prefix the format string.
  • -
  • When compiling with COLON (:) as instance method separator then the colon can not be used to separate expressions from the format string inside interpolated strings. In that case we now support a double colon (::) between the expression and the format string. For example
  • -
    -
    - LOCAL num as LONG
    num := 42
    ? i"num = {num::F2}" // this diplays num with 2 decimals
    WAIT
    - -
  • You can now use DATE fields inside VOSTRUCT and UNION (#595)
  • -
  • Fixed an assertion error 'UnconvertedConditionalOperator' (#616)
  • -
  • Fixed an assertion error in the compiler when the namespace "xsharp" is used (#618)
  • -
  • Fixed an "failed to emit" problem for methods defined in COM assemblies with default arguments and arguments passed by reference (#626)
  • -
  • Fixed a problem with the handling of default parameters and method calls (#629)
  • -
  • Fixed a problem where the _SizeOf() operator was not calculating the right size for a VOSTRUCT (#635).
    Please note that _SizeOf() can only be calculated at compile time when your application is compiled for x86 or x64 mode. When compiling for AnyCpu we will be calculating _SizeOf() at runtime.
  • -
  • Fixed a problem where the "IS Pattern" was not always working correctly for variables of type USUAL (#636)
  • -
    - Runtime - -
  • Implemented the FoxPro Evl() function (#389)
  • -
  • DbCloseArea() was returning TRUE even when no area was open. This was incompatible with VO. We are returning FALSE now.(#611)
  • -
  • Macro compiler was not able to find functions in assemblies that were loaded dynamically (#607)
  • -
  • When a DBF file was opened "readonly" and then an index was created, then a runtime error would happen when the file was closed, because the RDD was trying to set the "production index" flag in the DBF header. This flag is no longer set for files that are opened "readonly" (#610)
  • -
  • Fixed an exception (that was caught) inside DbOrderInfo(DBOI_KEYCOUND) (#613)
  • -
  • Fixed a problem with the Workareas debug window (#625)
  • -
  • DbOrderInfo() was returning incorrect values when an index was not abailable (#627)
  • -
  • Fixed a problem with TransForm() and symbol arguments (#628)
  • -
  • Fixed a problem with the StrZero function (#637)
  • -
  • Fixed a problem with the AELement() function (#639)
  • -
    - RDD System - -
  • Fixed a problem with indexes on workareas/cursors created with the SqlExec() function when the index expression contained "nullable" fields (#630)
  • -
    - Macrocompiler - -
  • The macro compiler had problems finding functions that were inside an assembly that was loaded later (#607)
  • -
    - Visual Studio Integration - -
  • Fix problem with saving dialect from General Page
  • -
  • Quick info and Goto definition were not working for members inside the same class when they were not prefixed with SELF:
  • -
  • Fix code completion for nullable types with the '?' syntax (#567)
  • -
  • Methods combobox was not correctly synchronized (#602)
  • -
  • Todo comments were not always parsed correctly, They were also included when they were part of another word or when they were not the first word on the line. This has been fixed.(#617)
  • -
  • Fix problem that "warnings as errors" was not saved from the Build properties page (#621)
  • -
  • Fix problems that would start occurring after editor window was split (#641)
  • -
  • After selecting a member of type "Assign" from the completion list the editor was incorrectly inserting a '(' character (#643)
  • -
  • Typing '(' on the declaration line of an entity (function, method) would trigger parameter completion. This has been fixed.(#643)
  • -
  • Parameter tips were not shown for Constructor calls (#645)
  • -
  • Completion list was incorrectly including static members (#646)
  • -
  • QuickInfo for external types was not including "AS Type" for the parameters (#647)
  • -
  • Fixed a problem when resolving parser options for a project that was not yet completely loaded (#649)
  • -
  • Local variables were not always recognized with their correct type in the editor (#651)
  • -
    - Installer - -
  • The installer was adding an incorrect version of XSharp.CodeAnalysis.dll to the Global Assembly Cache. This has been fixed.
  • -
    - - Changes in 2.8.0.0 (Cahors) - Compiler - General - -
  • We have migrated to the latest version of the Roslyn source code.
  • -
  • Passing a typed variable by reference to a function/method with clipper calling convention (untyped parameters) was not updating the local variable. This has been fixed.
  • -
  • Using the @ operator in a program in the VO Dialect when the /vo7 compiler option is NOT enabled could generate code that produces an error "Cannot be boxed". (#551)
  • -
  • The generated code for NULL_PSZ and NULL_SYMBOL has been optimized (#398)
  • -
  • The generated VoStructAttribute on structures and unions had the wrong size when an element with the PSZ type was used. This has been fixed.
  • -
  • Fixed an internal compiler error when converting NULL to LOGIC
  • -
  • The _SIZEOF() operator will generate a constant now for VOSTRUCTS and UNIONS. (#545)
  • -
  • Using a keyword as field name could cause problems. For example FIELD->NEXT was not handled properly. The compiler now allows that. Of course you can also use the @@ prefix to tell the compiler that in a particular case you do not mean the keyword but an identifier.
  • -
    - -
  • Parenthesized expression that contained an expression list were not compiled correctly. This has been fixed.
    This could happen when you wanted to have more than one expression as part of an IIF() expression.
     
      LOCAL l AS LOGIC
      LOCAL v AS STRING
      l := TRUE                
      v := "abcd"
      ? iif (l, (v := Upper(v), Left(v,3)), (v := Lower(v), Left(v,4)))              
    Since Roslyn (the C# compiler) does not allow an expression list inside a conditional expression, we are converting the parenthesized expression now to a function call to a local function. The expressions inside the Parenthesized expression become the body of the new local function and the compiler calls the generated local function.
  • -
  • The compiler now warns if you call a Function in a class that has a member with the same name. For example
  • -
    - - CLASS Test
    METHOD Left(sValue as STRING, nLen as DWORD) AS STRING
      RETURN "Test"
    METHOD ToString() AS STRING
      RETURN Left("abc",2)   // This will generate a warning that the function Left() is called and not the method Left().
                             // if you want to call the method you will have to prefix the call with SELF:
    END CLASS
    - New language features - -
  • We have added support for LOCAL FUNCTION and LOCAL PROCEDURE statements.
    These functions and procedures become part of the statement list of another function, procedure, method etc. They have the following restrictions:
  • - -
  • A LOCAL FUNCTION must be terminated with END FUNCTION, a LOCAL PROCEDURE must be terminated with END PROCEDURE
  • -
  • The full "signature" of normal functions is supported, so Parameters, Return type, Type Parameters and Type Parameter constraints.
  • -
  • They cannot have Attributes (they are not compiler into methods but in a special kind of Lambda expression)
  • -
  • The only valid Modifiers for a local function are UNSAFE and ASYNC
  • -
  • Because they cannot have Attributes, we also do not support untyped parameters, so all parameters must be typed
  • -
  • If you need a local function with a variable number of parameters then you can define default parameter values or use a PARAMS array
  • -
  • Local functions can access local variables from its surrounding code. Roslyn creates a special structure where it stores the variables that are shared between the local function and its surrounding code.
  • -
    -
    - - -
  • Added support for Expression bodied members. Expression body definitions let you provide a member's implementation in a very concise, readable form. You can use an expression body definition whenever the logic for any supported member, such as a method or property, consists of a single expression. An expression body definition has the following general syntax:
    MEMBER => expression
    An expression-bodied method consists of a single expression that returns a value whose type matches the method's return type, or, for methods that return void, that performs some operation. For example, types that override the ToString method typically include a single expression that returns the string representation of the current object.
    An example of this could be
  • -
    - CLASS MyClass
    METHOD ToString() AS STRING => "My Class"
    END CLASS

    The result of this code is exactly the same as

    CLASS MyClass
    METHOD ToString() AS STRING
      RETURN "My Class"
    END CLASS
    - So you could say that the => operator replaces the RETURN keyword. - - -
  • We have added support for the Null Coalescing Operator (??) like C# has as well as the Null Coalescing assignment operator (??=).
    This operator does a check for != null. The operator will only work on Reference types so not on value types like USUAL, DATE and the built-in types like INT.
  • -
    - FUNCTION Start() AS VOID
    LOCAL s := NULL AS STRING
    s := s ?? "abc"            // The ?? is the Null Coalescing Operator
    s ??= "abc"               // This is the same as the line before but compacter
    ? s
    RETURN
    // So this will not compile
    LOCAL i := 0 AS LONG
    i := i ?? 42      // Operator '??' cannot be applied to operands of type 'int' and 'int'
    // But this will compile
    LOCAL i := NULL AS LONG?   // Nullable LONG
    i := i ?? 42      
    - -
  • We have added support for the Properties with INIT accessors. These accessors allow you to assign a value to a property but only in the constructor. The property will be read only outside of he constructor of the class / structure.
  • -
  • We have added a new compiler option /enforceself. When this option is used then all calls to instance methods inside a class must be prefixed with SELF (or SUPER). In the FoxPro dialect THIS is supported too. Please note that some generated code, such as inside the Windows Forms editor does not use SELF: and applying this compiler option may force you to change the generated code, or may force you to add an #pragma options("enforceself", disable) to the code to disable the option for that file.
  • -
  • We have added a new compiler option /allowdot. With this option you can control if the DOT (".") operator is allowed to be used to access instance members. The default for the Core and FoxPro dialect is /allowdot+. The default for the other dialects is /allowdot-. You can also use this with a #pragma: #pragma options("allowdot", enable)
  • -
  • XML comments in the source code no longer require fully qualified cref names (#467)
  • -
    - Preprocessor - -
  • The preprocessor now automatically declares a match marker with the name <udc>. This match marker will contain all the tokens that were matched with the UDC by the preprocessor. This can be used for example to add the original source as string to the result:
    #command INSERT INTO <*dbfAndFields*> FROM MEMVAR => __FoxSqlInsertMemVar(<"udc">)
  • -
  • Wildcard markers (such as the dbfAndFields marker in the previous bullet) now can also appear in the middle of a UDC. They will continue to match until the first token after the Wildcard marker (in the above example the FROM keyword) is found.
  • -
  • The standard header files (from the XSharp\Include folder) are now also included in the compiler as resource. When the file is missing then these files will be loaded from the resource.
  • -
  • The preprocessor was not generating macros for __FOX2__ . This has been fixed (but it is now obsolete, see the FoxPro dialect)
  • -
  • When wildcard tokens are included with a stringify result marker then the white space between these tokens is correctly included in the output of the UDC.
  • -
    - FoxPro dialect - -
  • The feature to allow parentheses as array delimiters for the FoxPro dialect that was added in the previous build had too many side effects. We have removed this feature for now. You have to use bracketed array arguments again.
  • -
    - -
  • The /fox2 compiler option is no longer needed (and ignored by the compiler).
    The compiler now checks to see if a runtime function is marked NeedsAccessToLocalsAttribute, which is defined in the XSharp.Internal namespace.
    If the compiler finds a function that is marked with this attribute, such as the Type() function or the SQLExec() function then it will add some code before and after the function call to allow these functions to access the locals on the stack. This will only happen if the /memvar compiler option is enabled and only in the FoxPro dialect.
    The NeedsAccessToLocalsAttribute has a mandatory parameter which indicates if a function is expected to write to the locals or only read the locals.
    When the function is expected to write to locals then the compiler will generate extra code after the call to make sure that the locals are updated when needed.
  • -
    - -
  • We have added a standard header file for the FoxPro embedded SQL statements. This header file should parse embedded SQL but will output warnings that the embedded SQL is not yet supported.
  • -
  • We have added the FoxPro array support, with a special subtype of the Array type in the runtime and support for DIMENSION and (Re)DIMENSION and filling arrays by assigning a single value. (#523)
  • -
    - Runtime - General - -
  • Fixed a problem with the return value of FSeek() and FSeek3()
  • -
  • AsHexString() and AsString() were not displaying the same result for PTR values as Visual Objects.
  • -
  • Fixed a problem with SetScope() for the DBFCDX RDD when the previous scope was empty. (#578)
  • -
  • Adjusted the Secs() function to make it more Visual Objects compatible.
  • -
  • The enumerator for Array and Array Of now returns an enumerator for a clone of the internal data, to prevent runtime errors when you are modifying the array from within your code.
  • -
  • The various Xbase types (DATE, FLOAT, CURRENCY, BINARY, ARRAY, USUAL etc.) are now marked with a [Serializable] attribute and implement ISerializable. They all work fine with the BinaryFormatter() classes, since that class not only stores the values but also the values in the stream. Most of the types also work with the JsonSerializer, however not all of values can be correctly deserialized with the Json serializers. (#529)
  • -
  • The CompareTo() operator on the Date type was not sorting the values correctly because it was making an incorrect assumption about the memory layout of the elements in the structure. This has been fixed.
  • -
  • We have made some changes in the error handling for functions such as DbUseArea() and DbSkip(). They were not always behaving the same as Visual Objects when an error occurs (for example when a file could not be opened). We have now also added an error handler similar to the default error handler in Visual Objects with a dialog that has the Abort, Retry and Ignore buttons. The Retry button is only enabled when the error object has the property "CanRetry" set to TRUE. (#587, #594)
  • -
  • Fixed Val() incompatibility with string that has more than one decimal place (#572)
  • -
  • Fixed a problem with comparing dates "in reverse" (#543)
  • -
  • We have added a couple of functions that bring up dialogs to display the current open workareas, settings, globals and private and public memory variables. See DbgShowGlobals(),  DbgShowWorkareas(), DbgShowMemvars() and DbgShowSettings()
  • -
    - RDD system - -
  • DbCommit and DbCommitAll were failing when a workarea is opened Read only. This has been fixed. (#554)
  • -
  • When FoxPro CDX file has more than one tag and one of the tags has an invalid index expression (for example a missing closing parenthesis, which was accepted by Visual Objects) then the RDD system did not open the CDX at all. We now open the CDX with the exception of the tag with the corrupted index expression. (#542)
  • -
  • Added support for Advantage GUID and Int64 columns. GUIDs are returned as string and INT64 as INT64. We have also added some missing DEFINE values from the ACE header file.
  • -
  • Fixed a problem with incorrect negative Lock Offsets in the DBFNTX driver.
  • -
  • We have fixed several "exotic" problems with index "information" (KeyCount, KeyNo) etc. with indexes with Scopes, Descending indices etc. (#423, #578, #579, #580, #582, #583, #593, #599)
  • -
  • Fixed problems when opening MEMO files (Fpt and DBT) from different threads and different workstations (#577)
  • -
  • We have fixed a locking and corruption problem that could occur when 2 stations were frequently writing to the same CDX file. (#575, #592)
  • -
  • Improved Locking Speed when a lock fails. (#576)
  • -
  • SetOrder(0) was not working for ADS tables (#570)
  • -
  • Changed several method prototypes for ADS to have the correct IN / OUT modifiers (#568)
  • -
    - Macro Compiler - -
  • Fixed a problem in the FoxPro dialect assigning a value to an expression in the form of VariableName.PropertyName
  • -
  • The X# macro compiler was allowing to reference GLOBAL and DEFINE values in macros. This made the compiler incompatible with VO and this would cause problems when indexing on a field with the same name as a GLOBAL or DEFINE. The support to reference GLOBALs or DEFINEs has been removed from the macro compiler. (#554)
  • -
  • The Macro compiler had a problem with a variable name was surrounded with parentheses. It was seeing that as a typecast. This has been fixed. (#584)
  • -
    - Visual Objects SDK - -
  • Added some missing defines to the Win32APILibrary assembly, such as DUPLICATE_SAME_ACCESS.
  • -
  • DbServer:Filter was sometimes returning NIL instead of an empty string (#558)
  • -
    - - VO Dialect - -
  • We have added support for SysObject (#596)
  • -
    - Xbase++ dialect - -
  • Fixed a problem with XPP Collation tables that was introduced in 2.7
  • -
    - FoxPro dialect - -
  • Added the NeedsAccessToLocalsAttribute for the /fox2 compiler option
  • -
  • Adjusted the code that exposes the values of LOCAL variables to functions such as Type() and SqlExec().
  • -
  • Several functions have been marked with the new attributes so they will be able to "see" local variables.
  • -
  • Added an overload of TransForm() with a single argument.
  • -
  • Fixed a problem with the SQLExec() function and sql statements that contain a ":" (colon) character.
  • -
  • We have added the Bit..() functions (thanks Antonio)
  • -
  • We have added CapsLock(), NumLock() and InsMde (hanks Karl-Heinz)
  • -
  • We have improved the FoxPro array code (#523)
  • -
    - - Runtime Scripting - This build introduces Runtime Scripting through the ExecScript() function. At this moment you will have to include the Full macro compiler (XSharp.MacroCompiler.Full.dll) and its support DLLs (XSharp.Scripting.dll , XSharp.CodeAnalysis.dll ) if you use Runtime scripting, - We are working on a light weight version of the Runtime Scripting which will be included in one of the next builds. - See the topic Runtime Scripting for more information. - Visual Studio Integration - The Visual Studio integration in this build no longer supports Visual Studio 2015. Only Visual Studio 2017 and 2019 are supported. - General - -
  • New code templates in a subfolder were generated with a namespace name that starts with "global::". This has been fixed.
  • -
  • Added support for LOCAL FUNCTION and LOCAL PROCEDURE.
  • -
  • Adding an item from the Class template in a folder prefixed the namespace with "global::". This has been fixed.
  • -
  • When the intellisense database file on disk was corrupted then an error occurred. Now the file is deleted and all code information is collected again.
  • -
  • The Editor options in the Tools/Options dialog are now marked with "X#" and no longer with "XSharp".
  • -
  • We have added a window under Tools/Options where you can set several values for our VO compatible editors, such as the grid size, paste offset etc. Look for X# in the tools options dialog.(#279, #440)
  • -
  • We have added 2 new options to the formatting options for the editor: "Trim Trailing Whitespace" and "Insert Final Newline"
  • -
  • Loading a MsTest project did not always work. The project file for MsTest projects will be adjusted when opening the project. (#563)
  • -
  • We have added support for t4 templates (text files with a .tt extension containing scripts to generate code)
  • -
  • Adding an existing  .resx file did not make it a child of a parent form.prg (#197)
  • -
  • The project property dialogs have been completely redesigned.
  • -
    - - Source code editor - -
  • Longer QuickInfo tooltips are now shown over multiple lines to make them easier to read.
  • -
  • Refactored the "type lookup" code to improve the speed of the source code editor
  • -
  • Member completion in the source code editor was not always working for variables declared with the VAR keyword where there were nested curly braces and/or parentheses. (#541, #560)
  • -
  • Fixed a problem with member completion for project references (#540)
  • -
  • Fixed an exception when uncommenting a block of lines when one of the lines in the block was an empty line.
  • -
  • We have added support for .editorconfig files. See the chapter about .editorconfig files in the documentation file.
  • -
  • Collapsing the last entity om the editor did not work correctly (#564)
  • -
  • Fixed a problem with syntax highlighting after line continuation comments(#556)
  • -
  • Added parameter completion for delegates (#581)
  • -
  • Fixed a problem with certain cyrillic characters in QuickInfo tooltips (#504)
  • -
    - - Code generator - -
  • Character literals are now always prefixed with the 'c' prefix and values > 127 are written in Hex notation to make sure they work in all codepages.
  • -
    - Windows Forms Editor - -
  • We have fixed several issues with DevExpress controls.
  • -
  • Fixed a problem with a control that has the same name as a X# keyword (#566)
  • -
  • Fixed a problem with a control that has a property of type DWORD (#588)
  • -
  • Fixed a problem with the code generation for character literals (#550)
  • -
  • The .designer.prg no longer has to have the "INHERIT FROM " clause. (#533)
  • -
    - Object Browser - -
  • Goto definition was not working when you had performed a search first (#565)
  • -
    - VO Compatible Forms editor - -
  • Added support in the WED for correctly visually displaying custom controls that do not have the expected control class inheritance defined
  • -
  • Fixed a problem with custom controls in cavowed.inf not recognized that are not data aware
  • -
  • Added support for Cloning Windows (#508)
  • -
  • Fixed a problem with the display of Checkboxes (#573)
  • -
  • Fixed a problem with the code generation (#553)
  • -
  • There is a menu option in Tools/Options to set several settings (#279, #440)
  • -
    - Debugger - -
  • The debugger now fully supports 64 bits debugging
  • -
  • Added support for the new type names for CURRENCY and BINARY
  • -
    - Templates - -
  • We have made adjustments to several VS item templates and project templates (#589)
  • -
  • We have added a new X# t4 template (.tt file)
  • -
    - - Changes in 2.7.0.0 (Cahors) - Compiler - General - -
  • Fixed a problem with Nullable types that were missing an explicit cast for an assignment
  • -
    - -
  • Fixed a problem with calling a parent constructor in a class hierarchy where a parent level was being skipped and the constructor for the grandparent was called instead.
  • -
    - -
  • The /usenativeversion commandline option was not checking +/- switches. This has been fixed.
  • -
  • Fixed a problem with PCall() and PCallNative() in source files with an embedded DOT in the filename (my.file.prg)
  • -
  • We have added a new header files to the files in the XSharp\Include files that helps to add custom User Defined Commands or defines that you want to include in every project. This file (CustomDefs.xh) will be automatically include by our XSharpDefs.xh.
    The default contents of this file is just some comments.
    The installer will NOT overwrite the file in this folder and will not delete it when the product is uninstalled.
    You can choose to customize this file in the Include folder under Project Files. However you can also add a file with the same name to your project folder or to a common include folder for your project/solution. That last location allows you to keep the header file under source code control with the rest of your source code.
  • -
    - FoxPro dialect - -
  • The compiler now allows a M Dot (M.) prefix in LOCAL, PRIVATE and PUBLIC declarations. (LOCAL m.Name)
  • -
  • The compiler now also accepts parentheses as array delimiters in the Foxpro Dialect (aMyArray(1,2))
  • -
  • The compiler now allows (and ignores) AS Type OF Classlib clauses for PRIVATE, PUBLIC, PARAMETERS and LPARAMETERS declarations.
  • -
    - -
  • Support for TO keyword in CATCH clause of TRY CATCH
  • -
  • Added support for the ASSERT command and SET ASSERT
  • -
    - -
  • Added support for SET CONSOLE and SET ALTERNATE
  • -
  • Assignments to macros with a single equals operator were not working ( &myVar = 42). This has been fixed.
  • -
  • Added support for zero length binary literals (0h)
  • -
    - Build System - -
  • Added a project property to control if RC4005 errors (duplicate defines) should be suppressed for the Native Resource compiler
  • -
    - Runtime - General - -
  • IsMethod() now returns TRUE for overloaded methods.
  • -
  • AbsFloat() was "losing" the settings for # of decimal places. This has been fixed.
  • -
  • Binary:ToString() was using single digit numbers for binary values < 15. This has been fixed.
  • -
  • Added an implicit operator to assign a usual to a binary.
  • -
  • Added an implicit conversion for USUAL values that contain an integer to an Intptr.
  • -
  • Some low level functions now set the OS error number  FERROR_EOF when operations fail, just like in VO.
  • -
  • Exceptions in late bound code were not always showing the correct location where the error occurred. This has been fixed.
  • -
  • We have added support for DataSessions. The list of open workareas/cursors in the runtime is now called "DataSession" (the old name Workareas is still available).
    You can have multiple datasessions. You can also swap the "active" DataSession in the RuntimeState with a new method SetDataSession on the RuntimeState class.
    FoxPro databases are opened in their own datasession.
    You can inspect the open DataSessions in the debugger by adding the watch expression: XSharp.RDD.DataSession.Sessions
    Each DataSession is associated with a Thread. When the Thread is stopped or aborted then the DataSession will be closed, which also closes all of its tables.
    At program shutdown all DataSessions are closed including their tables. This is done through an AppDomain:ProcessExit event handler.
  • -
  • Low level File IO functions (including the RDD system) that open a file in Exclusive mode now use "buffered IO". This should result in faster performance.
  • -
  • The (undocumented) functions to convert a Stream from/to a MemoryStream have been removed. This is replaced with the buffer I/O from the previous bullet.
  • -
  • We have added System.Enum types for the FoxPro CursorProperties, DatabaseProperties and SQLProperties.
  • -
  • We have added a DatabasePropertyCollection type. This type is used to add "additional" properties to Fields, such as the DBF fields for FoxPro tables.
  • -
    - Terminal API - -
  • We have added support for Alternate files. SET ALTERNATE TO SomeFile.txt. Also SET ALTERNATE ON and SET ALTERNATE OFF
  • -
  • The ? statement now respects the sessions for Set Console and Set Alternate .
  • -
  • We have added support for the SET COLOR command. Only the fist color in the settings is used and the blink attribute is ignored and interpreted as "highlight". For example SET COLOR TO w+/b
  • -
  • We have added a CLEAR SCREEN command
  • -
    - FoxPro dialect - -
  • Added an Assert dialog
  • -
  • Added support for DBC files. This includes the SET DATABASE to commands, DbGetProp() and reading properties for files that are part of a database without explicitly opening the database first. DbSetProp() does not do anything yet. Also functions like DbAlias() and similar have been implemented.
  • -
  • The Runtime now works with DataSession object. The DBC files are opened in their own datasession as well of the files per thread. Each datasession has a list of open tables and a unique list of aliases and cursor/workarea numbers.
  • -
  • AutoIncrement columns in cursors returned by SqlExec() now have a numbering scheme that starts with -1 and subtracts 1 for every new row added.
  • -
    - -
  • Several settings needed for the FoxPro dialect have been added to the Set Enum.
  • -
    - Macro Compiler - -
  • Until now the macro compiler was producing runtime codeblocks that take an array of objects and return an object return value. There was a class in the runtime that wrapped this and took care of usual -> object conversion for the parameters and for object-> usual conversion of the return value. This caused a problem when macros were returning a NIL value because that was converted to NULL_OBJECT.
    The reason for the OBJECT API is that the macro compiler needs to be used in the Core dialect (in the RDD system) and this dialect does not support the USUAL type.
    We have now added a new IMacroCompilerUsual interface in the XSharp.RT assembly that allows you to compile a string into a codeblock that supports USUAL arguments and a USUAL return value. The macro compiler now supports both this interface as well as the 'old' interface. As a result you may see a (very small) performance improvement when compiling macros.
  • -
  • Calling Altd() and _GetInst() inside a macro was not supported. This has been fixed.
  • -
  • The macro compiler was reporting an error when you had overridden a built-in function in your own code. We have now implemented a default MacroCompilerResolveAmbiguousMatch delegate in the runtime that now gives preference to functions that are defined in your code over functions in our code.
  • -
  • When choosing between 2 overloads of a method or function the Macro compiler now chooses the method with a USUAL parameter over a method without a USUAL parameter
  • -
  • Fixed a problem with calling functions/methods with a parameter by reference or an out parameter
  • -
  • Added support for the CURRENCY and BINARY types to the macro compiler.
  • -
    - RDD System - -
  • Exclusive DBF access now works in "buffered" mode which should make it a lot faster
  • -
  • Internally the RDDs now work with the Stream objects, which makes it a bit faster.
  • -
  • Fixed a problem when updating a key in an index where many duplicate key values existed.
  • -
  • Removed duplicate Foxpro "machine" collations for several codepages, since they were all the same.
  • -
  • For VFP compatible DBF files with field names > 10 characters you can now use the short (10 char) or the full fieldname to retrieve the values.
  • -
  • The DBFVFP driver now uses the built in DBC support in the runtime to read "extended" properties for DBF files. These properties are the longer fieldname, but also the Caption etc. When a DBFVFP table is used as datasource for a DbDataSource or DbDataTable and when this data source is assigned to a Grid then the columns headers in the Grid should show the Captions from the DBC.
  • -
  • DBF files with an empty codepage byte are now opened as DOS - US just like in VO and Vulcan.
  • -
  • GoTop(), GoBottom() and other operations were failing for when a DBFCDX/DBFVFP area was a child in a SetRelation and when the previous parent value was resulting in an "empty" resultset.
  • -
  • We have added structures and functions for the ADS Management API to the RDD assembly.
  • -
    - Visual Studio integration - -
  • When creating a new VO compatible UI form in the VS IDE you can now clone an existing form.
  • -
  • Fixed some problems with custom controls in the VO compatible form editor.
  • -
  • Fixed several problems in the Windows Forms editor for the code parsing and code generation for DevExpress controls
  • -
  • Solutions with "flavored" projects (such as MsTest projects) were not always opened correctly. An exception could occur.
  • -
  • We have added an (internal) property FieldValues() to the workarea class that allows you to inspect the fieldnames and their values for the current record in the debugger. To see the current workarea in the debugger you have to add a watch expression: XSharp.RuntimeState.DataSession.CurrentWorkarea
  • -
  • Added Project property to set the new flag to suppress RC4005 (duplicate defines) errors for the resource compiler.
  • -
    - - Changes in 2.6.1.0 (Cahors) - This is a bug fix release with fixes for some issues found in 2.6.0.0 - Compiler - -
  • Fixed problems with passing typed variables by reference to late bound code and to untyped constructors
  • -
  • Fixed an internal compiler error in code where a define containing a logic was cast to a byte
      BYTE(_CAST, LOGICDEFINE).
    Of course this is code that should be avoided at all times, but unfortunately even the VO SDK is full of code like this..
    The example above should be written as IIF(LOGICDEFINE, 1,0) for example. The compiler will see that the define is constant and will replace that code with either 1 or 0.
  • -
  • The compiler was not recognizing $.50 as a valid Currency literal (because the 0 is missing). This is now accepted.
  • -
    - Runtime - -
  • Updated the code in the runtime that handles late bound calls to improve the handling of parameters by reference
  • -
  • Fixed a problem in late bound code when accessing properties such as fInit, dwFuncs and dwVars in the OleAutoObject class
  • -
  • Added operator TRUE and operator FALSE to the Usual type
  • -
  • Calling Val() with a NULL_STRING could cause an exception. This has been fixed.
  • -
  • String properties returned by DbDataTable() and DbDataSource() are now trimmed with the TrimEnd() method of the string class.
  • -
  • Added a DbTableSave() function to save changes in a DbDataTable to the current workarea.
  • -
    - Visual Studio integration - -
  • Opening and upgrading project files that are under Scc could sometimes cause problems. This has been fixed
  • -
  • Fixed a regression introduced in 2.6.0.0. causing the task list to no longer be updated.
  • -
  • Opening a solution that referenced X# projects that do not exist on disk could cause an exception. This has been fixed.
  • -
  • Opening a X# Project file that is not part of a solution could also cause an exception. This has been fixed. We'll assume the project is part of a solution file in the same folder as the project and with the same name (but different extension) as the project.
  • -
  • The project system no longer makes backup files of projects that are updated. We assume you're all making backups yourself or using some kind of SCC system.
  • -
  • Fixed a regression that caused the VS Tasklist not to work for X# projects.
  • -
    - - Changes in 2.6.0.0 (Cahors) - Please note that there are some breaking changes in this build.
    Therefore the Assembly version number of the Runtime Components has been changed and you will need to recompile all your code and you need new versions of 3rd party components!
    - Compiler - -
  • The compiler was ignoring a (USUAL) cast. This has been fixed.
  • -
  • When the compiler detects a TRY .. ENDTRY without CATCH and FINALLY then it automatically adds a CATCH class that catches all exceptions silently. This was already the case, but we now generate a warning XS9101 when this happens.
  • -
  • Passing parameters by reference with an @ sign was not working correctly for late bound method calls. This has been fixed.
  • -
  • Compiler option vo15 and compiler option vo16 can now also be set with a #pragma
  • -
  • When /vo16 (Automatically generate Clipper calling convention constructors) was enabled then the compiler was also adding constructors to classes that are marked with the [COMImport] attribute. This has been fixed.
  • -
  • Currency literals ($12.34) were not compiled into the Currency type but were stored as System.Double. This has been fixed.
  • -
  • Fixed a problem with automatic version number generation for version numbers that are specified as [assembly: AssemblyVersion ("1.0.*")] or [assembly: AssemblyVersion ("1.0.0.*")].
    If you are building with the /deterministic compiler option then an error message XS8357 is shown.
  • -
  • Fixed a problem when passing a single USUAL argument to a constructor with a parameter array.
  • -
  • Fixed a problem when calling an overloaded method in a class tree where one level has a parameter of one type and another level the same method name but a parameter of another type and when there is an implicit typecast from the one type to the other (like between Date and Datetime, or between String and Symbol). The compiler now first looks to see if there is an overload with exactly the same type and where there is not then it looks for overloads for which the argument can be passed with an implicit conversion.
  • -
  • The __CastClass() pseudo function can now be used to box a usual into an object or to unbox a usual from an object.
    __CastClass(USUAL, <objectValue>) unboxes the usual that is inside the object.
    __CastClass(OBJECT, <usualValue>) boxes the usual into an object.
  • -
  • The <usualValue> IS SomeType VAR <newVariableOfTypeSomeType> clause was boxing the Usual into the Object before assigning it to the new variable instead of extracting the object from the usual. This has been fixed.
  • -
  • Late bound assignments (such as obj.&prop = "Jack") were failing when the assignment operator was a single equals character. This has been fixed.
  • -
  • Aliased Expressions such as SomeArea->(SomeExpression()) were returning an error on the incorrect source code line when SomeArea was not open. This has been fixed.
  • -
  • We have added support for the BINARY type and BINARY Literals. See the topics about binaries and binary literals in the documentation.
  • -
  • Expressions such as
    LOCAL dwDim := 512 IS DWORD
    were parsed as and compiled into
    LOCAL dwDim := (512 IS DWORD) AS USUAL
    As a result dwDim contained a USUAL with a LOGICAL value.
    This has been fixed and this code will now throw an error that DWORD variables cannot be declared with the IS keyword.
    This also happens for GLOBAL variables and Class Variables.
  • -
  • We have added a MatchLike preprocessor token to match expressions that contain wildcard characters, such as in the UDC
    SAVE ALL LIKE a*,*name TO SomeFileName.
    The token to use for MatchLike is <%name%>
  • -
  • Added support for pattern matching (WHEN clauses) in TRY .. CATCH statements, such as in the example below. The WHEN keyword is positional, so it can also be used as a variable name like in the example.
  • -
    - FUNCTION Test AS VOID
      local when := 42 as long
      TRY
         THROW Exception{"FooBar"}
      CATCH e as Exception WHEN e:Message == "Foo"
         ? "Foo", when, e:Message
      CATCH e as Exception WHEN e:Message == "Bar"
         ? "Bar", when, e:Message
      CATCH WHEN when == 42
         ? "No Foo and No Bar", when
         
      END TRY                
      RETURN
    - -
  • Added support for pattern matching and filters for SWITCH statements. We support both the "Identifier AS Type" clause as well as the "WHEN expression" filter clause, like in the examples below
  • -
    -   VAR foo := 42
      VAR iValues := <LONG>{1,2,3,4,5}
      FOREACH VAR i IN iValues
         SWITCH i
         CASE 1                        // This is now called the 'constant pattern'
            ? "One"
         CASE 2 WHEN foo == 42         // Filter with a constant pattern
            ? "Two and Foo == 42"
         CASE 2
            ? "Two"
         CASE 3
            ? "Three"
         CASE 4
            ? "Four"
         OTHERWISE
            ? "Other", i
         END SWITCH
    -   VAR oValues := <OBJECT>{1,2.1,"abc", "def", TRUE, FALSE, 1.1m}
      FOREACH VAR o in oValues
         SWITCH o
         CASE i AS LONG         // Pattern matching
            ? "Long", i
         CASE r8 AS REAL8   // Pattern matching
            ? "Real8", r8
         CASE s AS STRING  WHEN s == "abc" // Pattern matching with filter
            ? "String abc", s
         CASE s AS STRING     // Pattern matching
            ? "String other", s
         CASE l AS LOGIC   WHEN l == TRUE   // Pattern matching with filter
            ? "Logic", l
         OTHERWISE
            ? o:GetType():FullName, o
         END SWITCH
      NEXT
    - -
  • Please note that the performance of these patterns and filters is just like normal IF statements or DO CASE statements.
    The difference is that the compiler checks for duplicate CASE expressions so you are less likely to make mistakes.
  • -
  • We have added support for the IN parameter modifier. This declares a parameter that is a REF READONLY parameter. You could consider to use this when passing large structures to methods or functions. Instead of passing the whole structure then the compiler will only pass the address of the structure which is 4 bytes or 8 bytes depending on if you are running in 32 bits or 64 bits.
    We are planning to use this in the X# runtime for functions that accept USUAL parameters which should give you a small performance benefit (Usual variables are 16 bytes in 32 bits mode and 20 bytes when running in 64 bit mode).
  • -
    - Runtime - -
  • Error messages in Late Bound code were not always showing the error causing the exception. We now retrieve the "inner most" exception so the message shows the first exception that was thrown.
  • -
  • We have added runtime state settings for Set.Safety and Set.Compatible and the functions for SetCompatible and SetSafety
  • -
    - -
  • A UDC used to save and restore workareas for various Db..() functions was incorrect, causing the wrong area to be selected after the function call. This has been fixed.
  • -
    - -
  • The VFP MkDir() function has been added.
  • -
  • Fixed a problem in late bound IVarGet() / IVarPut() when a subclass of a type implements only the Getter or the Setter and the parent class implements both.
  • -
    - -
  • We have added a IDynamicProperties interface and added an implementation of this on the XPP DataObject, VFP Empty and VO OleAutoObject classes. This interface is used to optimize late bound access to properties in these classes.
  • -
  • An Exception in OleAutoObject.NoMethod was not forwarded "as is" but as an argument exception.
  • -
    - -
  • The Select() function now behaves differently in the FoxPro dialect to be compatible with FoxPro (no exception is thrown when the alias that is passed does not exist)
  • -
  • When an Error object is created from an exception then the innermost exception is used for the error information.
  • -
  • The casing of the Default() function has changed.
  • -
  • We have added a new XSharp.__Binary type. See the compiler topic above for more information.
  • -
  • We have added the CLOSE ALL UDC to dbcmd.xh as synonym for CLOSE DATABASES.
  • -
    - RDD System - -
  • Fixed a problem in the Advantage RDD for the ADSADT driver when field names were > 10 characters.
  • -
  • In the Advantage RDD the EOF, BOF and FOUND flags for tables that are a child in a relation were not properly set. This has been fixed.
  • -
  • In the FoxPro dialect the 'AutoOrder' behavior has changed. In this dialect no longer the first order in the first index is selected. The index file is opened but the file stays in natural order and when opening the file the cursor is positioned on the record number 1.
  • -
  • When exporting to CSV and SDF there was an exception for empty dates. This has been fixed.
  • -
  • When an CDX is opened for which one of the order expressions could not be compiled (because a function is missing) then previously the complete CDX was ignored. Now the other tags are opened succesfully. The RuntimeState.LastRddError property will contain an Exception object that contains the error message for the tag that failed to open.
  • -
  • The calculation of Index keys for fields of type "I" (in the DBFVFP driver) was incorrect. This has been fixed.
  • -
  • Fixed a problem with the OrdDescend() function/
  • -
    - Visual Studio integration - -
  • Fixed a problem in the VS parser for default expressions in parameter lists
  • -
  • Parameters for external methods/functions were not always showing the right "As"/"Is" modifiers
  • -
  • The location on the QuickInfo tooltip is now shown on its own line inside the tooltip.
  • -
  • Fixed a problem where the XML tooltips or parameter tips for the first member in a XML file were not shown.
  • -
  • We have made a change to the project file format (see comment below). All project files will be updated when opened with this build of X#.
  • -
  • Improved the speed of closing a solution inside Visual Studio.
  • -
  • The project system will no longer try to update SDK style project files.
  • -
  • When looking for a method such as Foo.SomeMethod() the codemodel sometimes returned a method Bar.SomeMethod().
    This was leading to problems when opening forms in the Windows Forms editor. This has been fixed.
  • -
    - VO Compatible editors - -
  • Code generated from the VO Compatible editors now preserves the INTERNAL or other modifiers as well as IMPLEMENTS clauses for classes.
  • -
  • We have fixed the display of "LoadResString" captions in PushButton controls
  • -
    - Foxpro commands - -
  • We have added support for several new Foxpro compatible commands:
  • -
  • CLOSE ALL
  • -
  • SCATTER
  • -
  • GATHER
  • -
  • COPY TO ARRAY
  • -
  • APPEND FROM ARRAY
  • -
  • COPY TO  SDF|CSV|DELIMITED|FOXPLUS|FOX2X
  • -
  • APPEND FROM SDF|CSV|DELIMITED|FOXPLUS|FOX2X
  • -
  • All variations support a fields list, FIELDS LIKE or FIELDS EXCEPT clause and the relevant commands also support the MEMO and BLANK clauses.
  • -
    - -
  • Not all variations from COPY TO and APPEND FROM are supports, such as copying to excel and sylk
  • -
  • The Database and name clause in the COPY TO command are ignored for now as well as the CodePage clause
  • -
    - Build System - -
  • We have prepared the X# Build System to work with SDK type projects that are used by .Net 5 and .Net Core. See the topic below for what this means for the project files.
  • -
  • Please note that the source code for the Build System has been moved to the Compiler repository on GitHub, since the build system is also needed for automated builds that run outside of Visual Studio.
  • -
    - Changes to project files - -
  • We are now no longer deploying our MSBuild support to a folder inside each VS version separately but we are only deploying it once in a folder inside the XSharp installation folder.
    The installer sets an environment variable XSharpMsBuildDir which points to that folder. As a result all project files will be updated when opened with this version of X#.
  • -
    - -
  • The change that we make is that the macro "$(MSBuildExtensionsPath)\XSharp" is replaced with "$(XSharpMsBuildDir)" which is an environment variable that points to the location of the X# MsBuild support files on your machine. If you are running X# on a build server you can set this environment variable in your build scripts when needed.
  • -
  • The installer automatically adds this environment variable and points it to the <XSharpDir>\MsBuild folder.
  • -
    - - Changes in 2.5.2.0 (Cahors) - Compiler - -
  • When a define contains an expression that contains the _Chr() function with a value > 127 then a warning is generated about possible code page differences between the development machine and the end users machine
  • -
  • Fixed an issue where a define was defined as PTR(_CAST,0)  and this define was also used as a default value for a function/method.
  • -
    - Runtime - -
  • Calling IsAccess, IsAssign and similar methods on a NULL_OBJECT was causing an exception. This has been fixed.
  • -
  • EmptyUsual now also works for the type OBJECT
  • -
  • When a float division was returning an Infinite value then no divide by zero exception was generated. This has been fixed.
  • -
  • When a parameter is skipped in a late bound call, and when that parameter has a default value, then we will now use the default value instead of NIL
  • -
  • The default value of the 5th parameter (uCount) of StrTran() was "only" 65000 replacements. The default value now takes care of replacing all occurences.
  • -
  • The variable name passed to NoIVarGet() and NoVarPut() is now converted to Uppercase.
  • -
    - RDD System - -
  • Fixed a problem with skipping forward when a Scoped Descending Cdx was at Eof()
  • -
    - VOSDK - -
  • Several DbServer methods were calling a method to write changes before the correct workarea was selected. This was an old bug originating in VO and has been fixed.
  • -
    - Visual Studio integration - -
  • Looking up XML documentation was sometimes not working in VS 2019. This has been fixed.
  • -
  • ClassView and Objectview are working "somewhat" now. This needs to be improved.
  • -
  • Improved the loading of so called "Primary Interop Assemblies"
  • -
  • Fixed a problem in the Type and Member dropdown bars in the editor window
  • -
  • Improved the renaming of controls when applying copy/paste in the VO Compatible window editor.
  • -
  • The X# toolbar for the VO Window editor is now automatically visible when the VO Window editor is opened
  • -
  • The position and size of the property window and toolbox of the VO Window editor (and the other VO Editors) is now saved between sessions of Visual Studio.
  • -
    - Build System - -
  • The generated XML files were generated in the project folder and not in the intermediate folder. This has been fixed.
  • -
    - Documentation - -
  • The [Source] links were missing for most topics. This has been fixed.
  • -
  • Corrected some docs
  • -
    - - Changes in 2.5.1.0 (Cahors) - Compiler - -
  • no changes to the compiler in this build (it is still called 2.5.0.0)
  • -
    - Runtime - -
  • (VO Compatibility) Fixed a VO compatibility issue for arrays . Accessing an single dimensional array with an index with 2 dimensions now returns NIL and does not generate an exception. This is stupid but compatible.
  • -
  • (VO Compatibility) Comparing a usual with a numeric value with a symbol no longer generates an exception. The numeric value is now casted to a symbol and that symbol is used for the comparison.
  • -
  • (XPP compatibility) Accessing a USUAL variable with the index operator (u[1]) is not allowed for usuals containing a LONG. This will return TRUE or FALSE and is a simple way to check if a bit is set.
  • -
  • The Literals for "DB" and "CR" are now stored in the resources and may be changed for other languages.
  • -
  • Added some optimizations to the support code for late binding
  • -
    - Visual Studio integration - -
  • Reading type information for external assemblies would fail when the external assembly contained 2 types for which the names were only different in case.
  • -
  • The entity parser did not recognize GET and SET accessors that were prefixed with a visibility modifier (PROTECTED SET)
  • -
  • The entity parser did not recognize ENUM members that did not start with the MEMBER keyword
  • -
  • Added support for the Visual Studio Task Window. Source code comments containing the words TODO or HACK (this is configurable in the Tools/Options window) are now added to the Task List. These tasls are persisted in the intellisense database, so all tasks are immediately visible after opening a solution without (re)scanning the source files.
  • -
  • Fixed a problem in the Type and Member lookup for the WIndows Forms editor
  • -
  • Fixed a problem in the VS debugger where we were subtracting one from index operators for arrays and collections. This was not correct (obviously).
  • -
    - Build System - -
  • The file name of the generated XML file was derived from the project file name instead of the output assembly name. This has been fixed.
  • -
    - - - Changes in 2.5.0.0 (Cahors) - Compiler - -
  • #pragma lines that were followed by incorrect syntax would "eat" the incorrect syntax causing entire methods to be excluded from compilation. This has been fixed.
  • -
  • Multiline compile time codeblocks in a method /function with a VOID return type were not being compiled correctly. This has been fixed.
  • -
  • The compiler now allows to type the parameters in a codeblock. Since the codeblock definition requires parameters of type USUAL this gets transformed by the compiler. The parameters will still be of type USUAL, but inside the codeblock a local variable of the proper type will be allocated. So this compiles now
  • -
    -   { | s as string, i as int| s:SubString(i,1) } - -
  • The code to fill in missing parameters was causing problems when passing parameters to COM calls (Word Example from Peter Monadjemi)
  • -
  • Fixed a problem passing an IntPtr, Typed pointer of the address of a VOSTRUCT to a function that accepts an object.
  • -
  • We have added code to add an integer value to a PSZ, which results in a new PSZ that starts at a relative location in the original PSZ. No new buffer is allocated.
  • -
  • We have fixed a problem with complex collection initializers.
  • -
  • Chr() and _Chr() with an DEFINE as argument, such as _Chr(ASC_TAB) were not properly resolved by the compiler.
  • -
  • The compiler was not properly parsing the syntax PUBLIC MyVar[123]. This has been fixed.
  • -
  • Some special characters (such as the Micro Character, U+00B5) were not recognized by the compiler as valid identifiers. We have now adopted the same identifier rules that C# uses.
  • -
  • Passing a pointer or PSZ in a value of type OBJECT is now handled by "boxing" the variable. So a NULL_PTR is no longer passed as NULL_OBJECT but as an object containing an IntPtr.Zero value.
  • -
  • The compiler now allows to store IntPtr.Zero to a constant variable
  • -
  • The compiler now allows to embed quotes inside a string by writing double quotes. So this works:
  • -
    - ? "Some String that has an embedded "" character" - -
  • When you declare a MEMVAR with the same name as a function, the compiler will now have no problem anymore resolving the function call. Please note that you HAVE to declare the memvar for this resolution to work.
    For example
  • -
    -
    FUNCTION Start() AS VOID
    MEMVAR Test
    Test := 123      // assign to the memory variable
    Test(Test)      // call the function 'Test' with the value of 'Test'
    RETURN
    FUNCTION Test(a)
    ? a
    RETURN a
    - - - Common Runtime - -
  • The Workareas class no longer has an array of 4096 elements, but uses a dictionary to hold the open RDDs. This reduces the memory used by the runtime state.
  • -
  • Fixed a problem in the WrapperRDD class
  • -
  • OrdSetFocus() now returns the previous active tag as STRING
  • -
  • Fixed a problem in FRead() , it was not ignoring the SetAnsi() setting as it should
  • -
  • Added operators on the PSZ type for PSZ + LONG and PSZ + DWORD.
  • -
  • The Usual class now implements the IDisposable() interface. When it contains an object that implements IDisposable then it will call the Dispose method on that object.
  • -
  • We have added Array index properties with one and two numeric indices to make code that accesses array elements a bit faster
  • -
  • The code SELECT 10, was not working properly. This has been fixed. Thanks Karl Heinz.
  • -
  • The return value of VoDbOrdSetFocus() was TRUE even when trying to set the order to a non existing index. This has been fixed.
  • -
  • We fixed a problem with Set(_SET_CENTURY) when the parameter passed was a string in the "ON" or "OFF" format
  • -
  • VODbOrdSetFocus() was returning TRUE even when the selected order could not be selected.
  • -
  • ArrayCreate<T> was not filling the array. This has been fixed.
  • -
  • Trailing or Leading spaces are now ignored by the CToD() function.
  • -
  • Calling VoDbSeek() with 2 parameters now does not set lLast to FALSE but to the LAST value from the Current Scope.
  • -
  • In the previous build the format for the stack trace for errors was changed (the names are all uppercase like in VO). You can now choose to enable or disable this. We have added a function SetErrorStackVOFormat() that takes and returns a logical value. The default format for the error stack is the VO format for the VO and Vulcan dialects and the normal .Net format for the other dialects.
  • -
  • We have implemented the StrEvaluate() function.
  • -
  • We have implemented the PtrLen() and PtrLenWrite() functions. These only work on the Windows OS() when running in x86 mode.
    For other OSes or for apps running in 64 bits these functions returns the same value as MemLen().
  • -
  • When dividing 2 float numbers results in a NaN (Not a Number) value because the divisor is zero, then a DivideByZero exception will now be generated.
  • -
  • When dividing 2 usual numbers results in a NaN (Not a Number) value because the divisor is zero, then a DivideByZero exception will now be generated.
  • -
  • Please note that dividing 2 REAL8 (System.Double) values can still result in a NaN, because we are not "intervening" with this division.
  • -
  • The OS() function now returns a more appropriate version description when running on Windows. It reads the version name from the registry and also includes a x86 and x64 flag in the version.
  • -
    - RDD System - -
  • The DBF RDD Now forces a disk flush when writing a record in shared mode.
  • -
  • Fixed a problem in the DBFCDX rdd that could corrupt indexes.
  • -
  • We have built in a validation routine inside the DBFCDX RDD that validates the integrity of the current tag. To call this routine call DbOrderInfo with the DBOI_VALIDATE constant.
    This will validate:
  • - -
  • If all records are included exactly once in the index
  • -
  • If the values for each record in the index are correct
  • -
  • If the order of the index keys in a page is correct
  • -
  • If the list of index pages in the index is correct
  • -
    -
    - When a problem is found then this call returns FALSE and a file will be written with the name <BagName>_<TagName>.ERR containing a description of the errors found. - -
  • Most exported variables inside the Workarea class (inside XSharp.Core) and other RDD classes have been changed to PROTECTED.
    We have also added some properties for variables that need to be accessed from outside of the RDD
  • -
  • Fixed a problem that occurred when skipping back repeatedly from the BOF position in a scoped CDX index.
  • -
  • The Zap() operation for DBFCDX was not clearing one of the internal caches. This has been fixed.
  • -
  • The DBFCDX driver now closes and deletes a CDX file when the last tag in that CDX has been deleted.
  • -
    - Macro compiler - -
  • The macro compiler was not recognizing 0000.00.00 as an empty date. This has been fixed.
  • -
  • The macro compiler now also exotic characters in identifiers like the normal compiler. We have added the same identifier name rules that the C# compiler uses.
  • -
    - - XBase++ Functions - -
  • Fixed a problem in the XPP function SetCollationTable()
  • -
  • DbCargo() can now also set the cargo value for a workarea to NULL or NIL
  • -
  • We have added several functions, such as PosUpper(), PosLower(), PosIns() and PosDel().
  • -
    - - VFP Functions - -
  • Added AllTrim() , RTrim(), LTrim() and Trim() variations for FoxPro (thanks Antonio)
  • -
  • Added StrToFile() and FileToStr() (thanks Antonio and Karl Heinz)
  • -
    - - VOSDK - -
  • We have created a Destroy() method on the CSession and CSocket class, so you can 'clean up' objects (in VO you could call Axit(), but that is no longer allowed). The derstructor on these classes will also call Destroy().
  • -
  • Fixed a problem in TreeView:GetItemAttributes. It can now also be called with a hItem (which happens inside TreeViewSelectionEvent:NewTreeViewItem)
  • -
  • The OpenDialog class is now resizable.
  • -
  • Fixed a problem in FormattedString:MatchesTemplChar(), that was causing problems with edit controls with a picture
  • -
  • Calling DataWindow:__DoValidate() late bound was not working because there are 2 overloads. This has been fixed. Please note that in the VO SDK DataWindow:__DoValidate() expects a parameter of type Control, but inside the DataBrowser code it is called with a parameter of type DataColumn. VO does not complain but in .Net that does not work !
  • -
  • Fixed a problem in GetMailTimeStamp() in the Internet classes.
  • -
  • We have included "typed" versions of Consoleclasses, SystemClasses and RDD classes. These are mostly strongly typed and can run in AnyCPU mode.
    The SQL classes and GUI classes will follow.
  • -
    - Visual Studio Integration - Code Model - -
  • We have totally rewritten the background parser and code model that is used to parse "entities" in the VS editor and that is used to build a memory model of the types, methods, functions etc in your VS solution. This parser now uses the same lexer that the compiler uses, but the entities are collected with a hand written parser (since the code in the editor buffer may contains incomplete code we can't reliably use the normal parser).
  • -
  • We are now using a SQLite database to persist the code model between sessions. This reduces the memory needed by the X# project system. We are no longer keeping the entire code model in memory.
  • -
  • This also means that when you reopen an existing solution we will only have to parse files that have  changed since the last time they were processed. That should speed up loading of large VS solutions.
  • -
  • We are now also reading type information from external code (assembly references and project references to non X# projects) using the Mono.Cecil library instead of the classes in the System.Reflection namespace. This is faster, uses less memory and, most important, we can easily unload and reload assemblies when they were changed.
  • -
  • As a result of all of this, opening VS solutions should be faster and "lock up" VS less often (hopefully not at all). Also code completion and other intellisense features should be improved.
  • -
    - - Source code editor - -
  • Fixed a problem with the dropdown comboboxes above the editor when the cursor is in a line of code before the first entity.
  • -
  • Fixed a problem that functions in the editor after a class declaration had no collapsible regions
  • -
  • The code completion inside the editor now also picks up extension methods for the types themselves, but also extension methods for interfaces implemented by these types.
  • -
  • The editor code now properly recognizes variables declared with the VAR keyword when they are followed by a constructor call
  • -
  • If you have XML comments in your source code for entities in your solution, then these comments should be picked up by the tooltips inside Visual Studio and by the parameter completion.
  • -
  • Fixed several problems in the "reformatting" code
  • -
    - Windows Forms editor - -
  • Some inline assignments to fields inside classes that are used by the Windows Forms could make the form unusable by the form editor. This has been fixed.
  • -
  • The Windows Forms editor was sometimes removing blank lines between entities. This has been fixed.
  • -
  • User Defined Commands in code parsed by the Windows Forms Editor were not recognized and disappeared when the form was changed and saved. This has been fixed.
  • -
  • Fixed a problem with setting images and similar properties with resources stored in the project resources file (which are prefixed with "global::" in the source code)
  • -
    - VOXporter - -
  • We have added support to export VO Forms from the AEFs to XML format
  • -
  • We have added support to export VO Menus from the AEFs to XML format
  • -
    - - Changes in 2.4.1.0 (Bandol GA 2.4a) - Compiler - -
  • Bracketed strings are now no longer supported in the Core dialect to avoid problems with single line external property declarations that contain attributes between the GET and SET keywords
  • -
  • The PROPERTY keyword was not properly recognized after an EXTERN modifier.
  • -
  • Fixed a XS9021 warning for a IIF expressions with 2 numeric constants
  • -
  • In the FoxPro dialect late bound calls are now always allowed on certain types (even when the /lb compiler option is not enabled), such as USUAL and the Empty class.  These types are marked with the AllowLateBound attributes in the runtime.
    They WILL generate a new compiler warning (XS9098).
  • -
  • We have added a new compiler option -fox2. This option makes local variables visible to the macro compiler and should also be used when you use SQL statements with embedded parameters. This compiler option must be used in combination with -memvar and the FoxPro dialect
  • -
    - Runtime - -
  • Fixed a problem in the DELIM Rdd that would occur when using DbServer:AppendDelimited() and DbServer:CopyDelimited().
  • -
  • Fixed a problem with DbSetOrder() returning TRUE even when the order was not found.
  • -
  • Fixed a problem where the File() function would return FALSE when using wildcard characters
  • -
  • SqlExec() now returns columns of type Date for SQL providers that have a separate Date type
  • -
  • Workareas/Cursors created with SqlExec() now have the NULL flags, Binary flags etc. set properly according to the settings read from the backend.
  • -
  • Fixed and added implementation of VFP functions (Gomonth, Quarter, ChrTran, At in various variations, RAt in various variations, DMY, MDY). Thanks Karl Heinz.
  • -
  • First work on parameterized SQL functions. Not finished yet.
  • -
  • Some types in the runtime are now marked with a special "AllowLateBound" attribute. These types will be accepted in the FoxPro dialect as candidates for compiling latebound even when the /lb compiler option is not enabled.
  • -
  • We have added support for the macro compiler to access local variables by name. This is built into the VarGet() and VarPut() functions and also the MemVarGet() and MemVarPut() functions. Local variables will have preference over same named private or public variables. You have to enable the -fox2 compiler option for this.
  • -
  • ValType() now returns "Y" for currency values and "T" for DateTime values
  • -
  • No copy of the runtime state is created when that state is accessed in the Garbage collector thread.
  • -
  • SQLExecute() now returns -1 when an invalid SQL statement is executed.
  • -
  • Added the VarType() function
  • -
  • IVarGet() and Send() now return Empty strings when a method returns a NULL_STRING and the return type  is STRING
  • -
    - RDD - -
  • Getting the OrdKeyNo for a scoped index was resetting the index position to the top of the index. This would affect scrollbars in browsers for scoped indexes
  • -
    - VOSDK - -
  • The Console classes assembly is now marked as AnyCpu.
  • -
  • Fixed a problem introduced in the previous build with the calling convention for certain functions imported from Shell32.DLL such as the Drag and Drop support.
  • -
  • Fixed a problem in the PrintingDevice constructor for reading of printers when running on a Remote Desktop
  • -
  • We have changed several calls to IsInstanceOf with <var> IS <Type> constructs
  • -
  • Fixed typo in several IsInstanceOf() calls
  • -
  • Improved "column scatter" code for the DataBrowser class
  • -
    - Visual Studio Integration - -
  • If you removed all the characters from the "Commit Completion List" control in the XSharp editor options, then after restarting VS all default characters would appear. We now remember that you have cleared the list and will not refill the list again.
  • -
  • Fixed a problem that caused the editor not to rescan the current buffer for changed entities
  • -
  • Added project property for the new -fox2 compiler option
  • -
  • The VO MDI template now has Drag and Drop enabled
  • -
  • Fixed a problem in the Debugger with some of the runtime types, such as DATE that could cause an exception while debugging in VS 2019
  • -
  • Fixed a problem in the part of the editor code that is responsible for showing collapsible regions and updating the comboboxes with type names and member names.
  • -
  • Fixed the code generation for Tab pages in the VO compatible forms editor
  • -
    - - Changes in 2.4.0.0 (Bandol GA 2.4) - Compiler - -
  • Fixed problems where certain operations on integers would still return the wrong variable type
  • -
  • The Unary Minus operator on unsigned integral types (BYTE, WORD, DWORD, UINT64) was returning the same type as the original, so it was not returning a negative value. This has been changed. The return value of this operator is now the next larger signed integral type.
  • -
  • Using a compiler macro, such as __VERSION__ in an interpolated string was causing an internal error in the compiler. This has been fixed.
  • -
  • The vo11 compiler option now only works for operations between integral and non integral types. Other behavior has been removed because the VO behavior for mixing integral types was confusing and impossible to emulate.
  • -
  • Bracketed strings are now also recognized after a RETURN and GET keyword.
  • -
    - Runtime - -
  • Fixed problems when subtracting a dword from a date (related to the signed/unsigned problems in the compiler)
  • -
  • LUpdate() now returns a NULL_DATE for workareas have no open table.
  • -
  • Added the missing ErrorStack() function (thanks Leonid)
  • -
  • Added the Stack property to the Error class
  • -
  • Added the SQL..() functions from Visual FoxPro. Please note that SQLExec() and SQLPrepare() with embedded parameters in the SQL statements are not supported yet. This requires a change in the compiler that is planned for the next build.
  • -
  • Added a DbDataTable() function that returns a (detached) DataTable with the data from the current workarea
  • -
  • Added a DbDataSource() function that returns a BindingList attached to the current workarea. Updates to properties in the bindinglist will be directly written to the attached workarea.
  • -
  • Added 2 classes DbDataTable and DbDataSource that are returned by the functions with the same name.
  • -
  • Fixed a problem with incorrectly formatted USUALs with numeric values
  • -
  • We have added the defines from FoxPro.h to the VFP assembly
  • -
  • We have added the VFP MessageBox functions, including a message box that automatically closes when a timeout has reached.
  • -
  • Fixed AsHexString() to display large DWORD values that are stored inside USUALs
  • -
  • Fixed several incompatibilities with VO for FLOAT->STRING conversions
  • -
    - RDD System - -
  • Fixed a problem with skipping backward in a DBFCDX table with a scope
  • -
  • Fixed a problem with creating unique indexes with the DBFCDX and DBFNTX drivers
  • -
  • Writing NULL values to DBF columns is now always supported. When the column is a Nullable column in a DBFVFP table then the null flags are set. For other RDDs a NULL value will be written as a blank value.
  • -
  • Fixed a performance issue in Append operations for all DBF based RDDs
  • -
  • Fixed a problem with the DBFCDX driver that could happen when index pages were nearly full with key-value pairs with all blanks
  • -
  • Fixed a problem in WrapperRDD:Open()
  • -
  • Added the SDF RDD
  • -
  • Added a special DbfVFPSQL RDD that is used by the SQL..() functions in the VFP support to store the results from SQL queries. The column information describing the original column from the Sql Resultset can be retrieved with the DbFieldInfo() and the DBS_COLUMINFO define. The return value for this call is an object of the type XSharp.RDD.DbColumnInfo.
  • -
  • Added the DELIM RDD and 2 subclasses (CSV and TSV). These RDDs all return separated values. The default format for the DELIM RDD is to use the comma as separator. CSV uses semi colons and TSV uses Tabs to delimit the fields. On top of that CSV and TSV write a header row with field names.
    The "normal" Delimited operations still use DELIM. If you want to use the CSV or TSV RDDs you need to set a global setting:
  • -
    - RddSetDefault("DBFNTX")
    DbUseArea(TRUE,"DBFNTX", "c:\Test\TEST.DBF")
    DbCopyDelim("C:\test\test.txt")             // this uses the DELIM RDD

    RuntimeState.DelimRDD := "CSV"              // Tell the runtime to use the CSV RDD for delimited writes
    DbCopyDelim("C:\test\test.csv")             // this uses the CSV RDD

    RuntimeState.DelimRDD := "TSV"              // Tell the runtime to use the TSV RDD for delimited writes
    DbCopyDelim("C:\test\test.tsv")             // this uses the TSV RDD
    DbZap()

    RuntimeState.DelimRDD := "CSV"              // Tell the runtime to use the CSV RDD for delimited reads
    DbAppDelim("C:\test\test.csv")              // this uses the CSV RDD
    - VO SDK - -
  • PrintingDevice:Init() no longer tries to read the default printer from win.ini but from the registry
  • -
  • Several other locations where the code was still accessing win.ini (with the GetProfile..() funcitons) have been updated.
  • -
  • The GUI Classes were delay loading several calls to common dialog DLL and winspool.drv. This has changed because that is no longer needed in .Net.
  • -
  • Cleaned up all PSZ(_CAST operations in GUI Classes.
  • -
    - Visual Studio integration - -
  • Parameter tips for OUT variables were shown as REF
  • -
  • XML descriptions for member with REF or OUT parameters were not found
  • -
  • Fixed an exception in the VS Editor
  • -
    - VOXporter - -
  • No changes in this build
  • -
    - - Changes in 2.3.2 (Bandol GA 2.3b) - Compiler - -
  • Added support for Bracketed Strings ([Some String containing quotes: '' and ' ] )
  • -
  • Added support for Support for PRIVATE/PUBLIC syntax with &Id and &Id.Suffix notation
  • -
  • EXE files were created without manifest before, unless you were using a WIN32 resource with a manifest. This manifest is now correctly added to exe files when no manifest is supplied.
  • -
  • The handling of unmanaged resources in relation to version resources and manifests has changed:
  • - -
  • When the compiler detects native resources it will now check to see if there is a version and/or manifest resource included.
  • -
  • When there is no manifest resource, then the default manifest resource will be added to the resources from the Win32 resource file.
  • -
  • When there is a version resource then this version resource will be replaced by the version resource that the compiler generates from the Assembly attributes.
  • -
  • This should help people coming from VO, so they can use AssemblyVersion etc for all their assemblies, also the ones that have menu and window resources.
    If there happens to be a versioninfo resource in the source then this is ignored.
  • -
  • Of course we have added a command line option to suppress this: if you use the commandline option "-usenativeversion" then the native version that is included in the Win32 resource will be used. If there is no version resource included in the Win32 resource file, then this commandline option is ignored.
  • -
    -
    - -
  • PCOUNT() and ARGCOUNT() are now supported inside ACCESS/ASSIGN methods. The number of parameters that you can pass is still fixed, but both functions will now return the # of parameters defined in ACCESS and/or ASSIGN methods.
  • -
  • We fixed a problem that a compiler error "Failed to emit module" was produced instead of showing the real problem in the code (a missing type) .
  • -
  • Extended match markers in the preprocessor, such as <(file)>  in the USE udc, now also properly match file names.
  • -
  • Improved the detection algorithm that distinguishes parenthesized expressions and typecasts. This algorithm is now:
  • - -
  • Built in type names between parentheses are always seen as a typecast. For example (DWORD), (SHORT) etc.
  • -
  • Other type names between parentheses may be treated as typecast but also as parenthesized expression. This depends on the token following the closing parenthesis. When this token is an operator such as +, -, / or * then this is seen as parenthesized expression. When the token following the closing parenthesis is an opening parenthesis then the expression is seen as a typecast. Some examples:
  • -
    -
    - ? (DWORD) +42       // this is a typecast
    ? (System.UInt32) +42   // this is a parenthesized expression and will NOT compile
    ? (System.UInt32) 42    // this is a typecast because there is no operator before 42
    ? (System.UInt32) (+42) // this is a typecast because +42 is between parentheses
    - -
  • Code that calls the Axit() method now generates  a compiler error.
  • -
  • We have implemented the /vo11 compiler option
  • -
  • We have fixed several signed/unsigned warnings
  • -
  • You can now use PCall() on typed function pointers stored inside structures (this is used in the VO Internet Server SDK)
  • -
  • The lexer now recognizes (in the FoxPro dialect) the For() and Field() functions and you do not need to prefix these with @@ anymore.
  • -
    - Runtime - -
  • Fix for StrZero() with negative values
  • -
  • Fix for IsSpace() crashing with empty or null string
  • -
  • AFill() in the VFP dialect now fills also elements in subarrays (for multi dimensional arrays)
  • -
  • NoIVarGet() and NoIvarPut() no longer convert the IVar names to Symbol. That way the original casing is kept when calling the NoIVarGet() and NoIVarPut() methods in a class
  • -
  • The VFP and XPP Abstract classes are now really abstract.
  • -
  • Implemented VFP Empty class.
  • -
  • Implemented VFP AddProperty and VFP RemoveProperty functions.
  • -
  • Fixed a typo in PropertyVisibility enum name
  • -
  • Fixed several errors when calling DBF related functions for a workarea that did not contain an open table.
  • -
  • The Seconds() function now returns 3 decimals when running in the FoxPro dialect. Please note that you have to add SetDecimal(3) to actually see the 3rd decimal
  • -
  • The Like() function is now case sensitive in the FoxPro dialect and case insensitive in all other dialects. The _Like() function is case sensitive in all dialects.
  • -
  • ASort() was not accepting a 4th argument of type Object(). This has been correct: when you pass an object that has an Eval() method then this method will be called to determine the right sort order.
  • -
  • When setting/restoring global State with the Set() function, some values that are synchronized by the runtime could get out of sync. This could result in incorrect date formats or similar errors. This has been fixed.
  • -
  • Several VFP compatibility functions have been added (some contributed by Thomas Ganss).
  • -
  • We have added several VFP functions such as
  • -
  • When you set a "global setting" using the Set() function the runtime now makes sure that related settings are set accordingly. For example Setting Set.DateFormat now also updates the DateFormatNet and DateFormatEmpty.
  • -
  • Fix for PadC() function with non standard filler
  • -
  • We have added DBOI_COLLATION and DBS_CAPTION for FoxPro specific properties
  • -
    - VO SDK - -
  • We have removed the versioninfo resource from the GUI classes sourcecode. The version info is now generated from the Assembly attributes
  • -
  • We have cleaned up the code and removed the warnings 9020 and 9021 from the suppressed warnings, since the compiler now handles this correctly.
  • -
    - RDD system - -
  • The DBFVP driver no longer fails to open a DBF when the DBC file is used exclusively by someone else
  • -
  • Added support for reading captions with DBS_CAPTION and collations with DBOI_COLLATION
  • -
  • The DBFNTX driver was not setting the HPLocking flag properly when creating new indexes
  • -
    - Visual Studio integration - -
  • The type lookup for variables declared with a VAR keyword could sometimes go into an infinite loop. This has been fixed.
  • -
  • Members starting with '__' are now only hidden from completion lists when the 'Hide Advanced members' checkbox in the general editor options is checked
  • -
  • Added support for colorizing BRACKETED_STRING constants
  • -
  • Fixed a bug in the keyword case synchronization code.
  • -
  • The code behind the VS Form editor had problems with methods declared without return type. As a result forms could not be opened. This has been fixed.
  • -
  • Improved intellisense info for Defines and Enum members
  • -
  • You can now enable/disable /vo11 in the project properties dialog
  • -
    - VOXporter - -
  • When porting from Clipboard contents, now VOXporter puts back the modified code to the clipboard
  • -
  • Added option to remove ~ONLYEARLY pragmas
  • -
    - Installer - -
  • The installer now has a new command line parameter "-nouninstall" that prevents the automatic installation of a previous version. This allows you to install multiple versions of X# side by side.
    Please note that the installer sets a registry key to the location where X# is last installed. This location will be used by the Visual Studio integration to locate the compiler.
    If you don't change this then all VS installations will always use the version of X# that is last installed. See the topic about the build process in VS and with MsBuild for information about how this mechanism works.
    Also if you choose to install the X# runtime assemblies in the GAC then newer versions of these runtime DLLs will/may overwrite older versions. This depends on the fact if the newer DLLs have a new Assembly version.
    At this moment all X# runtime DLLs (still) have version 2.1.0.0 even when X# itself is now on version 2.3.2.
  • -
  • The installer now lists all found instances of VS 2017 and VS 2019, including the Visual Studio Buildtools, so you can choose to install in a particular instance of these versions of Visual Studio or simply in all instances.
    Please note that when you run X# with the -nouninstall command line option, this will prevent the installer from removing X# from VS installations where it was previously installed.
  • -
  • We have added some documentation about all the installer command line options to the help file.
  • -
    - Documentation - -
  • Fixed errors in the documentation of escape codes
  • -
  • We have added a chapter with tips and tricks that contains the following topics at this moment.
  • -
  • Added description of the installer command line arguments
  • -
  • Added description of the Build process in VS and with MsBuild
  • -
  • Added topics describing the dialect "incompatibilities" in the X# runtime. Please note that this topic is not complete yet.
  • -
  • How to catch errors at startup
  • -
  • Compiler magic in the startup code
  • -
  • Special classes generated by the compiler.
  • -
    - - Changes in 2.3.1.0 (Bandol GA 2.3a) - Compiler - -
  • When compiling in case sensitive mode, the compiler now checks to see if a child class declares a method that only differs from a method in its parent class by case
  • -
    - -
  • The warning message about assigning to a foreach iterator variable has been changed from "Cannot assign" to "Should not assign"
  • -
  • #pragma warnings was not working with the xs1234 syntax but only with numbers. This has been corrected
  • -
    - - Runtime - -
  • Added the SetFieldExtent method to the IRdd interface
  • -
  • The USUAL type no longer "caches" the dialect setting
  • -
  • Fixed some problems with ACopy() with skipped or negative arguments.
  • -
  • The return value for Alias() is now in upper case.
  • -
    - VO SDK - -
  • The VO SDK Console class now uses the System.Console class internally. The only functionality that is no longer available is:
  • - -
  • It does not respond to the mouse anymore
  • -
  • Creating a "new" console window is not supported.
  • -
    -
    - RDD system - -
  • Fixed a problem in the Advantage RDDs that was caused by a casing problem (a method in a child class had a different case than the method in the parent class that it tried to override). This is why we also added a check to the compiler.
  • -
  • Creating an NTX with the DBFNTX driver could fail in some situations due to timing issues. This has been fixed.
  • -
    - Visual Studio integration - -
  • Fixed a problem in keyword case synchronization that could corrupt the editor contents.
  • -
    - - Changes in 2.3.0.0 (Bandol GA 2.3) - Compiler - -
  • Syntax errors (1003) or Parser errors (9002) in a source file could lead to multiple errors in the error list. We are now only reporting the first of these error types in a source file.
  • -
  • Implemented the -cs (Case Sensitive identifiers) compiler option
  • -
  • The compiler now includes the source for a compiletime codeblock as string in that codeblock. Calling ToString() on a compile time codeblock will retrieve this string.
  • -
  • Fixed a problem that memory variables were not updated when passed to a DO <proc> WITH statement
  • -
  • Accessing or assigning undefined properties or calling undefined methods in typed code was generating a compiler error. The compiler now detects if the type has a NoIVarGet(), NoIVarPut() or NoMethod() method, and when it finds the appropriate methods then a compiler warning (XS9094) is generated instead of a compiler error.
  • -
  • Casting a numeric to a LOGIC with the LOGIC(_CAST, numValue) construct was only looking at the lowest byte of numValue. If the lowest byte was zero and a higher byte was non zero the result would be FALSE. The compiler now compiles this into (numValue <> 0).
  • -
  • The compiler now supports an (optional) THEN keyword for the IF statement
  • -
  • Added support for the FoxPro CURRENCY type.
  • -
  • The Value keyword is always compiled in lower case in PROPERTY SET methods
  • -
  • Unterminated strings are now detected at the end of the line.
  • -
  • Added ENDTRY UDC for FoxPro
  • -
  • Added support for #pragma warning(s). See the #pragma warnings topic in the help file for more info.
  • -
  • Added support for #pragma options. See the #pragma options topic in the help file for more info.
  • -
    - Runtime - -
  • Added XSharp.Data.DLL which contains support code for .Net SQL based data access used by the RDD system and the new Unicode SQL classes.
  • -
  • DbEval() was throwing an exception when no FOR block or no WHILE block was passed
  • -
  • DbEval() was throwing an exception when the block that is evaluated was not returning a logical expression
  • -
  • The workarea event for OrdSetFocus() had an error which would result in an "Operation Failed" error for this event, even when the event succeeded.
  • -
  • The index operator on USUALs containing STRINGS (which is only supported in the Xbase++ dialect) was not taking into account that the indices were already ZERO based,
  • -
  • Calling DbCreate() with incorrect lengths for Date or Logic fields was throwing an exception, these are now automatically corrected
  • -
  • Added a fix for converting USUAL values of type STRING with NULL to STRING
  • -
  • Fixed a problem in __FIeldSetWa() when the area was NIL or "M".
  • -
    - -
  • Added the FoxPro CURRENCY type. These are also supported in USUAL variables. Internally the values of a CURRENCY variable are stored as Decimal but rounded to 4 decimal places.
  • -
  • Most runtime DLLs are now compiled in Case Sensitive mode.
  • -
  • Fixed a problem in the STOD() function, so it allows strings that are longer than 8 characters.
  • -
  • We have added some VFP functions to the runtime, such as the Just..() functions and AddBs(). Several other functions are there but not implemented. They are marked with an [Obsolete] attribute and will throw a NotImplementedException when called.
  • -
  • When running on windows the low level File IO system now uses native windows File access in stead of the managed access. This also affects the RDD system.
  • -
  • Fixed problems in ACopy(), Transform(), Str()
  • -
    - VOSDK Classes - -
  • Added DbServer:FieldGetBytes() and DbServer:FieldPutBytes() to read the 'raw' bytes of a string field. Please note that (in ccOptimistic mode) the bytes value is NOT cached and that you have to manually lock and unlock the server when calling FieldPutBytes().
  • -
  • Added several missing defines
  • -
  • Synchronized the VO SDK to the VO 2.8 SP4 SDK. The only changes that are not included are the ones from the DateTimePicker class. These changes were causing conflicts with the existing code in the X# VOSDK.
  • -
    - RDD System - -
  • Querying the header size for the Advantage RDD would cause an exception. This has been fixed
  • -
  • Fixed a problem with DbRlockList() and the advantage RDD
  • -
  • Skipping in a cursor for the Advantage RDDs was not refreshing the EOF and BOF flags for related tables
  • -
  • Fixed a problem writing strings in FPT files
  • -
  • The AX_Get.. Handle() functions were not properly returning the handles
  • -
  • We have added several missing Advantage related functions.
  • -
  • The DBFVFP driver was not writing the block for DBC backlinks to the file header when creating a new file, which resulted in negative record numbers.
  • -
  • We have added (temporary) support for reading field names from DBC files for the DBFVFP driver. As a result CDX files which use the long field names in index expressions are now also opened correctly
  • -
  • Fixed a problem in the CopyDb() code for the DBF RDD
  • -
  • The DBFCDX RDD now implements the BLOB_GET and also BlobExport() and BlobImport()
  • -
  • Packing, Zapping or Rebuilding a CDX index with a Custom or Unique flag would not keep these flags. This has been fixed.
  • -
  • When you create a file with the DBFVFP driver you can now include Field Flags in the field type of the DbCreate() array by following the type with a colon and one or more flags, where flags is one of:
    N or 0:Nullable
    BBinary
    +AutoIncrement
    UUnicode.  (not supported by FoxPro)
    Other flags may follow ( for example Harbour also has E = Encrypted and C = Compressed)
    Note:
  • - -
  • Please note that the size of the field is the # of bytes, so {"NAME","C:U",20,0} declares a Unicode character field of 10 Unicode characters and 20 bytes.
  • -
  • We do not validate combinations of flags. For example AutoIncrement is only working for fields of type Integer.
  • -
    -
    - -
  • DbFieldInfo(DBS_PROPERTIES) returns 5 for all RDDs with the exception of the DBFVFP driver. That driver returns 6. The 6th property is the FLAGS field. This field is a combination of the DBFFieldFlags enum values.
  • -
  • Fixed a problem with AppendDb() and CopyDb() for the Advantage RDD
  • -
  • Fixed a problem in the Append() code of the DBF RDD. When Append() was called and no data was written then the record that was written to disk could be corrupted. The Append() method now directly writes the new record with blanks..
  • -
  • The Fully qualified names of the Advantage RDDs inside XSharp.RDD.DLL are now the same as in the AdvantageRDD.DLL for Vulcan.
  • -
    - -
  • We have added a FileCommit event to the notifications. This sent when a workarea is committed.
  • -
    - Macro compiler - -
  • The macro compiler now also recognizes the Array(), Date() and DateTime() functions.
  • -
  • Fixed problems with Aliased expressions
  • -
  • On the place where the macro compiler expects a single expression you can now also have an expression list between parentheses. The last expression in the list is seen as the return value of the expression list
  • -
    - Visual Studio integration - -
  • The option to compile case sensitive has been enabled in the VS project system
  • -
    - -
  • The speed of 'Format Document' has improved a lot.
  • -
  • The XSharp Intellisense Optionspage in Tools/Options now has a scroll bar when needed
  • -
  • The ToolPalette in the VO Window editor now has icons
  • -
    - -
  • We have added templates for VO MDI windows and VO SDI windows.
  • -
    - Build System - -
  • When compiling native resources the resource compiler now automatically includes a file with some defines such as VS_VERSION_INFO
  • -
    - Debugger - -
  • When you enter a watch expression in the debugger or a breakpoint condition, you can now use 1 based array indices. Our debugger will now automatically subtract 1 when evaluating the expression.
  • -
    - VOXporter - -
  • Fixed a problem in the Windows Forms code generation
  • -
    - -
  • You can now also export single MEF files, single PRG files and data from the Clipboard.
  • -
  • Code between #ifdef .. #endif is not touched by VOXPorter
  • -
    - - Changes in 2.2.1.0 (Bandol GA 2.2a) - Compiler - -
  • When compiling code that contained an assign and not an access then trying to read the access could lead to a compiler exception. This has been fixed.
  • -
    - Runtime - -
  • Added a missing _Run() function
  • -
    - Visual Studio integration / Build system - -
  • Fixed a problem that caused a dialog to be shown with the message "The 'XSharp Project System' package did not load correctly."
  • -
  • Fixed a problem with writing response files for the resource compiler when the source file names contained ASCII characters with accents or other  characters > 128. Even though this is now fixed we still recommend not go to crazy with file names, because these names have to be converted from Unicode to Ansi, since the resource compiler can only read response files in Ansi format.
  • -
  • Fixed a problem for certain QuickInfo / Tooltip windows
  • -
  • The VO item templates now have a condition around the #include statements for the Vulcan include files, since these are no longer needed when compiling for the X# runtime.
  • -
  • Added Support for the "Auto" window in the debugger
  • -
  • Expressions in the Watch window, Breakpoint conditions etc may now contain SELF, SUPER and a colon separator. Unfortunately they are still case sensitive.
  • -
    - VOXPorter - -
  • we now detect that a class has fieldnames and accesses/assigns with the same name. This was allowed in VO but no longer in .Net. The field names will be prefixed with an underscore inside the class.
  • -
  • We now prefix the name "Trace" with @@ because this is quite often used to conditional compile tracing code in VS.
  • -
    - - Changes in 2.2.0.0 (Bandol GA 2.2) - Compiler - -
  • The compiler now recognizes the functions Date(), DateTime() and Array(), even though their names are the same as type names.
    Date() with 1 parameter will still be seen as a cast from that parameter to a Date(), like in the following example
    LOCAL dwJulianDate AS DWORD
    LOCAL dJulianDate  AS DATE
    dwJulianDate       := DWORD( 1901.01.01)
    dJulianDate        := DATE(dwJulianDate) // This is still a cast from Date to DWORD
    However when Date is called with 0 or 3 parameters then either the current date is returned (like with Today()) or a date is constructed from the 3 parameters (like in ConDate())
    The DateTime() function takes 3 or more parameters and constructs a DateTime() value.
    The Array() function takes the same parameters as the ArrayNew() function.
  • -
  • When choosing overloads for String.Format() and a usual expression is passed as first reference we no longer allow the compiler to choose one of the overloads that expects an IFormatProvider interface.
  • -
  • Parameters passed by reference to untyped methods/functions now have the IsByRef flag set. You can query for "By Reference" parameters by checking the parameter with IsByRef(uParameter). Please note that after assigning a new value to a parameter, this flag will be cleared.
  • -
  • The compiler now also allows to pass aliased fields and memvars by reference to untyped functions. Even undeclared memvars are allowed.
    Please note that the assignment back to the field and memvar will happen after the call to the function returns. So inside the function the field or memvar will still have its original value.
  • -
  • Using ':'  as send operator in Interpolated strings is ambiguous because ':' is also used add format specifiers to interpolated strings. The compiler now detects and allows "SELF:", "SUPER:" and "THIS:".
    If you want to be safe use the '.' as send operator inside interpolated strings for other variables, or simply don't use interpolated strings, but use String.Format like in:
    ? String.Format("{0} {1}", oObject:Property1, oObject:Property2)
    in stead of
    ? i"{oObject:Property1} {oObject:Property2}"
    This is the code that the compiler will produce anyway
  • -
    - - Macrocompiler - -
  • The macro compiler now recognizes and compiles nested codeblocks, such as
    LOCAL cb := {|e| IIF(e, {||SomeFunc()}, {||SomeOtherFunc}) } AS CODEBLOCK
    cb := Eval(cb, TRUE)   // cb will now contain {||SomeFunc()}
    ? Eval(cb)
  • -
  • In the FoxPro dialect the macro compiler now recognizes AND, OR, NOT and XOR as logical operators
  • -
    - Runtime - -
  • Added some Xbase++ compatible functions, such as DbCargo(), DbDescend() and DbSetDescend().
  • -
  • The DateCountry Enum now also the values System and Windows, which both read the date format from the Regional settings in the System.
  • -
  • We have added a WrapperRDD class that you can inherit from. This allows you to wrap an existing RDD and subclass methods of your choice. See the documentation of WrapperRDD for an example.
  • -
  • We had added a XPP member to the CollationMode enum with the same number as Clipper. This was confusing to some users. We have now give the XPP member a new number.
  • -
  • OleAutoObject:NoMethod() now behaves different in the Vulcan dialect (to be compatible with Vulcan). In the Vulcan dialect the method name is inserted at the beginning of the list of arguments. In the other dialects the arguments are unchanged, and you need to call the NoMethod() function to retrieve the name of the method that was originally called.
  • -
  • All settings in the runtime state are now initialized with a default value, so the Settings() dictionary in the runtimestate will have values for all Set enum values.
  • -
  • The previous change has fixed a problem with the Set() function when setting values for logical settings with a string "On" or "Off". Because some settings were not initialized with a logic this was not working.
  • -
  • When creating indexes with SetCollation(#Ordinal) the speed is a bit better now.
  • -
  • The runtimestate now has a setting EOF. When this is TRUE (which is done automatically for the FoxPro dialect) then MemoWrit() will write a ^Z (chr(26)) after a text file, and MemoRead() will remove that character when it finds it.
  • -
  • The runtimestate now has a setting EOL. This defaults to CR - LF (chr(13+chr(10)). This setting is used for line delimiters when writing files with FWriteLine().
  • -
    - RDD system - - -
  • Fixed locking problems in the DBFCDX RDD that were causing problems when opening files shared between multiple apps but also between multiple threads. The RDD now should properly detect that the CDX was updated by another process or thread.
  • -
  • Fixed a problem with the File IO system when running multiple threads
  • -
  • Fixed a problem with the File() and FPathName() functions when running multiple threads
  • -
  • Added support for Workarea Cargo (See DbCargo())
  • -
  • Numeric columns with trailing spaces were returned as 0. This has been fixed.
  • -
  • Fixed a problem in the DBFCDX driver that was happening when many keys were deleted / updated and index pages were deleted.
  • -
  • Fix a read error at EOF for the DBF RDD.
  • -
    - VOSDK - -
  • Fixed a problem in the DbServer destructor when called at application shutdown for a server that was already closed.
  • -
    - Visual Studio integration - -
  • Fixed speed problem in the "Brace Matching" code with the help of a user (thanks Fergus!)
  • -
  • You should no longer be able to edit source code when the debugger is running.
  • -
  • We have added a property "Register for COM Interop" to the build options of the Project Properties.
  • -
  • We have updated the assembly info templates . They now have a GUID and Comvisible attribute.
  • -
  • Empty lines in the editor buffer could sometimes trigger an exception. This has been fixed
  • -
  • Text between TEXT .. ENDTEXT is no longer changed by formatting options in the editor, such as indenting or case synchronization.
  • -
  • Incomplete strings will have the color of normal strings in the editor.
  • -
  • QuickInfo and Completion lists will follow the "format case" setting of the editor for keywords.
  • -
  • If a certain option from the Tools/Options was not set then loading a project that was saved with files open in the editor could result in an exception, causing the project to be loaded with no visible items. Unload and Reload would fix that. This will no longer happen.
  • -
  • We have made some changes to make solutions open and close faster.
  • -
  • Some colors were difficult to read when the Visual Studio Dark theme was selected. This has been fixed.
  • -
  • Brace matching was sometimes incorrectly matching an END CLASS with the BEGIN NAMESPACE. This should no longer happen.
  • -
  • Fixed an exception when opening a solution under certain circumstances which would display an error inside VS that the XSharp Project System was not loaded correctly.
  • -
  • The Code Generator for Windows Forms, Settings and Resources now respect the keyword case setting from the Tools - Options TextEditor/XSharp page.
  • -
    - VOXPorter - -
  • Folder names ending with a backslash could confuse VOXPorter
  • -
    - - Changes in 2.1.1.0 (Bandol GA 2.11) - Compiler - -
  • We have added new syntaxes for OUT parameters. You can now use one of the following syntaxes
  • -
    -
      LOCAL cString as STRING
      cString := "12345"
      IF Int32.TryParse(cString, OUT VAR result)      
    // this declares the out variable inline, the type is derived from the method call
         ? "Parsing succeeded, result is ", result
      ENDIF
      IF Int32.TryParse(cString, OUT result2 AS Int32)  
    // this declares the out variable inline, the type is specified by us
         ? "Parsing succeeded, result is ", result2
      ENDIF
      IF Int32.TryParse(cString, OUT NULL)      
    // this tells the compiler to generate an out variable, we are not interested in the result
         ? "Parsing succeeded"
      ENDIF
      IF Int32.TryParse(cString, OUT VAR _)      
    // this tells the compiler to generate an out variable, we are not interested in the result.
    - // The name "_" has a special meaning "ignore this"
         ? "Parsing succeeded"
      ENDIF
    - -
  • The compiler now allows the function names Date(), DateTime() and Array(). The runtime has these functions (see below)
  • -
  • Fixed a preprocessor problem where the <token> match marker inside UDCs was stopping matching tokens when the .not. or ! operator was found after another logical operator such as .AND. or .OR..
  • -
  • Added support for <usualValue> IS <SomeType>. The compiler will automatically extract the contents of the USUAL and wrap it in an object and then apply the normal IS <SomeType> operation.
  • -
  • Fixed a problem with Interpolated strings where the '/' character was not properly recognized.
  • -
  • The compiler now supports the FoxPro syntax for cursor access. When dynamic memory variables are disabled this always gets translated to reading a field from the current cursor/workarea.

      USE Customer
      SCAN
         ? Customer.LastName
      END SCAN
      USE
  • -
    - When memory variables are enabled then this code could also mean that you are trying to read the Lastname property of a variable with the name "Customer" like in the example below: -   USE Invoices
      Customer = MyCustomerObject{}
      SCAN
         ? Customer.LastName, Invoice.Total
      END SCAN
      USE
    - You can also use the M prefix to indicate a local variable or memory variable. The compiler will try to resolve the variable to the local first and when that fails it will try to resolve the variable to a memory variable (when dynamic memory variables are enabled). - Runtime - -
  • We have added support functions for the FoxPro cursor access syntax.
  • -
  • In the Vulcan dialect the NoMethod() method now receives the methodname as first parameter (this is NOT compatible with VO)
  • -
  • Added functions Date() (can have 0 or 3 parameters, equivalent to Today() and ConDate()), DateTime() and Array().
  • -
  • Added fixes and optimizations for functions such that take an area parameter such as Used(uArea) and Eof(uArea).
  • -
  • AScan() and AScanExact() now return 0 when a NULL_ARRAY is passed.
  • -
    - - RDD - -
  • There was a problem reading negative numbers from DBFs. This has been fixed
  • -
  • Fixed an exception when FPT drivers were writing data blocks in the FPT file with a 0 byte length.
  • -
  • The DBF() function returns the Full filename in the FoxPro dialect and the alias in the other dialects.
  • -
  • When creating an CDX index for a completely empy DBF file then an index key would be inserted for the phantom record. This has been fixed.
  • -
    - - Changes in 2.1.0.0 (Bandol GA 2.1) - Compiler - -
  • We have added support for parameters by reference to function and method calls for untyped parameters
  • -
  • In the Xbase++ and FoxPro dialect arguments passed with '@' are always treated as BY REF arguments because these dialects do not support the 'AddressOf' functionality
  • -
  • When /undeclared was used and an entity added a new private then this private was not cleared when the entity went out of scope. This has been fixed.
  • -
  • Compiling oObject?:Variable was not handled correctly by the compiler
  • -
  • Fixed an internal compiler error when calling SELF:Axit()
  • -
  • Parameters for the DO statement are now passed by reference
  • -
  • Changed the order of 'necessary' assembly names when compiling for not core dialect.
  • -
  • We have added support for several SET commands, such as SET DEFAULT, SET PATH, SET DATE, SET EXACT etc.
  • -
    - Runtime - -
  • We have made some changes to get XSharp.Core to run on Linux
  • -
  • We have fixed a problem in the Subtract operator for the Date type. This changes the signature of the Subtract operator which has forced us to increase the Assemblyversion of the runtime.
  • -
  • The Xbase++ dialect now allows the [] operator on a string inside a usual. This returns a substring of 1 character for the given position.
  • -
  • We have fixed an incorrect event for the OrderChanged event
  • -
  • CoreDb.BuffRefresh was sending an incorrect enumerator value to the IRDD.RecInfo() method.
  • -
  • The IVarList() function was including protected Fields and Properties. This has been fixed.
  • -
  • IsInstanceOfUsual() could not be used if an objects was of a subclass of CodeBlock. This has now been fixed.
  • -
  • We have added many overloads of workarea related functions with an extra parameter to indicate a workarea number or workarea name. For example for the EoF(), Recno(), Found() and Deleted() functions
  • -
  • We have added Xbase++ collation tables. The SetCollationTable() function now selects the right collation.
  • -
  • Several Array related functions now have better checks for NULL arrays
  • -
  • The SubcodeText property in the error class is now Read/Write. When the value has not been written then the subcode number is used to lookup the value of the property.
  • -
  • MExec() was not always evaluating the compiled codeblock. This has been fixed.
  • -
  • We have added some missing Goniometric functions, such as ACos(), ASin() and more.
  • -
  • In the Xbase++ dialect the FieldGet() and FieldPut() functions no longer throw an error for incorrect field numbers
  • -
  • We have added a missing MakeShort() function and SEvalA() function.
  • -
  • The DateCountry settings now include a System setting which will read the date format from the settings for the current culture.
  • -
    - Macrocompiler - -
  • When the macro compiler detects an ambiguous method or constructor it now includes the signatures of these in the error message
  • -
  • We have added a new IMacroCompiler2 interface that adds an extra property "Resolver". This property will may receive a Delegate of type "MacroCompilerResolveAmbiguousMatch". This delegate has the following prototype:
    DELEGATE MacroCompilerResolveAmbiguousMatch(m1 as MemberInfo, m2 as MemberInfo, args as System.Type[]) AS LONG
  • -
  • The delegate will be called when the macro compiler detects an ambiguous match and receives the System.Reflection.MemberInfo for possible candidates and an array of the detected types of the arguments (detected at compile time). The delegate can return 1 or 2 to choose between either candidate. Any other value means that the delegate does not know which of the ambiguous members to choose.
    If the macro compiler finds more than 2 alternatives, it first calls the delegate with alternatives 1 & 2, and then the selected delegate from these 2 and alternative 3 etc.
  • -
  • You can register a function or method as delegate with the new function
    SetMacroDuplicatesResolver()
  • -
  • We are now handling (one level of) nested Macros. So the macro compiler correctly compiles a codeblock like
    {|e| iif(e, {||TRUE}, {||FALSE})}
  • -
  • The macrocompiler now allows comparisons between Integers and Logics (just like the Usual type in the runtime). This is still not recommended !
  • -
  • The macrocompiler now allows the use of '[' and ']' as string delimiters. This is NOT allowed in the normal compiler because these delimiters will be impossible to differentiate from attributes.
  • -
  • We have fixed a problem when a late bound call was needed for method names that were matching method names or property names in the Usual type (such as a method with the name Item()).
  • -
  • PCount() for macro compiled codeblocks was always returning 1. This has been fixed.
  • -
    - VOSDK - -
  • Fixes a problem with DbServer objects that were not closed in code.
    The existing code was trying to close the workarea from the destructor. But in .Net the destructor runs in a separate thread and in that GC Thread there where no files open...
  • -
  • Removed unneeded calls to DbfDebug()
  • -
  • The AdsSqlServer class is now added to the VORDDClasses assembly
  • -
    - RDD - -
  • We have fixed a problem with parsing incorrect or empty dates
  • -
  • We have fixed a problem with reading Dates in the Advantage RDD that could cause a Heap error when reading dates.
  • -
  • We have added several 'missing' functions for Advantage support that were in the 'Ace.Aef' for VO
  • -
  • We have added support for Character fields > 255 characters
  • -
  • DbSetScope() now moves the record pointer to the first record that matches the new scope.
  • -
  • DbCreate() for the DBFNTX driver with SetAnsi(TRUE) was creating a file with a first byte of 0x07 (or 0x87) .
    This no longer happens in the Xbase++, FoxPro and Harbour dialects because this first byte is VO specific only
  • -
  • Some FoxPro memo values are written with an extra 0 byte at the end. This extra byte is now suppressed when reading these values.
  • -
  • We have fixed a problem with the version numbers in CDX files not being updated and also improved CDX locking.
  • -
  • Xbase++ was not recognizing NTX indices when the tag name in the index header was not in uppercase. This has been fixed.
  • -
  • We have fixed a (performance and size) problem when creating CDX indexes.
  • -
  • When opening a DBF file that does not have a codepage byte, we default to the current Windows or DOS codepage, depending on the current SetAnsi() setting.
  • -
  • Optimized reading numeric, date and logical columns
  • -
  • -
    - Visual Studio integration - -
  • The WCF Service template has been fixed
  • -
  • We have migrated the project system to the Asynchronous API. This should make loading of solutions with a large number of X# projects a bit faster.
  • -
  • Fixed a problem in the Keyword Case synchronization that could lock up the UI for several seconds
  • -
  • Fixed an exception in the BraceMatching code.
  • -
  • Uncommenting a block of lines was sometimes leaving the comments in front of empty lines. This has been fixed.
  • -
  • We have improved the (XML) documentation lookup for types, methods, fields, properties and parameters.
  • -
  • We have improved the type lookup between X# projects.
  • -
    - VOXPorter - -
  • DbServer and FieldSpec entities are now also exported
  • -
  • VOXPorter now also can genarate a separate project/application that contains Windows Forms versions of the VO GUI windows found in the VO Applications.
  • -
  • When running VOXPorter you now can choose to export to XIDE, Visual Studio or Both.
  • -
    - - Changes in 2.0.8.1 (Bandol GA 2.08a) - Compiler - -
  • Fixed a recursion problem in the preprocessor
  • -
  • MEMVAR-> and FIELD-> were no longer correcty detected This has been fixed.
  • -
  • We have fixed several issues in  dbcmd.xh
  • -
  • Fixed a problem with return statements inside Lambda expressions.
  • -
  • The = Expression() statements (FoxPro dialect) was not generating any code. This has been fixed.
  • -
    - Runtime - -
  • XPP.Abstract.NoMethod() and XPP.DataObject.NoMethod() were still expecting the method name as 1st parameter.This has been fixed.
  • -
  • StretchBitmap() was doing the same as ShowBitmap() because of an incorrect parameter. This has been fixed.
  • -
    - Visual Studio integration - -
  • Improved the Format-Document code
  • -
  • Fixed a problem in the VS Parser when looking up the type for variables defined with the VAR keyword which could send VS in an endless loop.
  • -
  • The contents of the TEXT .. ENDTEXT block and the line after the \ and \\ tokens now has its own color
  • -
    - - Changes in 2.0.8 (Bandol GA 2.08) - Compiler - -
  • The compiler had a problem with the "return" attribute target
  • -
  • Errors inside the "statementblock" rule are now better detected and the compiler will no longer report many errors after these for correct lines of code.
  • -
  • Fixed a problem with Casts to logic
  • -
  • Fixed a problem with undeclared variables used as counter for For Loops
  • -
  • Improved the code generation for FIELDs, MEMVARs and undeclared variables for prefix operation, postfix operations and assignments.
  • -
  • Improved the code generation for method calls where the parameter is a ref or out variable when default parameters are involved. The compiler now generates extra temporary variables for these calls.
  • -
    - -
  • In the dialects where this relevant the compiler now also supports ENDFOR as alias for NEXT and FOR EACH as alias for FOREACH.
  • -
  • Added support for the DO <proc> [WITH arguments] syntax
  • -
    - Runtime - -
  • The DbCreate() function now creates a unique alias when the base filename of the file to create is already opened as an alias
  • -
  • The Numeric overflow checking for USUAL values now follows the overflow checks of the main app
  • -
  • DbUnLock() now accepts an (optional) record number as parameter
  • -
  • XMLGetChild() was throwing an exception when no elements were found
  • -
  • XMLGetChildren() was throwing an exception
  • -
  • Fixed a problem in 2 rules inside "dbcmds.xh"
  • -
  • The XSharpDefs.xh  file now automatically includes "dbcmd.xh"
  • -
  • Some datatype errors were reported incorrectly.
  • -
  • The "NoMethod" method for late bound code was called with incorrect parameters. This has been fixed.
  • -
  • Fixed some problems with translating usuals with a NIL value to string or object.
  • -
  • In Xbase++ the Set() function also accepts strings with the value "ON" or "OFF" for logical settings. We are now allowing this too.
  • -
  • Set(_SET_AUTOORDER) now accepts a numeric second parameter just like in VO (Vulcan was using a Logic parameter)
  • -
  • We have added some support classes to the FoxPro class hierarchy for the FoxPro class support (Abstract, Custom and Collection). More classes will follow later.
  • -
  • Fixed a problem with transform and "@ez" picture.
  • -
    - VOSDK - -
  • Fixed a problem in the SQLSelect class when re-opening a cursor.
  • -
    - RDD System - -
  • Fixed a problem reading Advantage MEMO fields
  • -
  • Improved the error messages when an index cannot be opened due to an index expression with an error (for example a missing function)
  • -
  • We have added the option to install an event handler in the RDD system. See the topic Workarea Events for more information.
  • -
  • Skip, Gobottom and other workarea operations that change the current record will no longer set EOF to FALSE for workareas with 0 records.
  • -
  • Clearing the scope in an Advantage workarea would throw an exception when there was no scope set. This has been fixed.
  • -
  • Unlocking a record in an Advantage workarea would throw an exception when there was no record locked. This has been fixed.
  • -
  • DbSetRelation() was not working correctly. This has been fixed.
  • -
    - VS Integration - -
  • Fixed a problem with the code generation for DbServer and FieldSpec entities
  • -
  • Added support for the Import and Export buttons in the DbServer Editor
  • -
  • Improved entity parsing inside the editor in the Xbase++ dialect.
  • -
  • The VS Parser was not colorizing the UDC tokens (including ENDFOR) unless the source file had preprocessor tokens itself. This has been fixed.
  • -
  • Improved block detection for new END keywords.
  • -
  • The VS Integration now recognized the class syntax for VFP type classes.
  • -
  • Fixed a problem in the code that was checking to see which project system "owns" the PRG extension.
  • -
  • Added compiler option to the Project Property pages to suppress generating a default Win32 manifest.
  • -
    - VOXporter - -
  • VOXPorter was ignoring entities that were not properly prototyped in VO. This has been fixed
  • -
    - FoxPro dialect - -
  • We have added a compiler option /fox1 that controls the class hierarchy for objects. With /fox1 enabled (the default in the FoxPro dialect) all classes must inherit from the Custom class. The code generation for properties stores the values for properties in a collection inside the Custom class. With /fox1- properties will be generated as "auto" properties with a backing field.
  • -
  • We have added support for FoxPro classes. See the topic FoxPro class syntax for more information about what works and what doesn't work.
  • -
  • We have added support for DIMENSION and DECLARE statements (which create a MEMVAR initialized with an array)
  • -
    - - Changes in 2.0.7 (Bandol GA 2.07) - Possible breaking change - -
  • We have removed the #define CRLF from the standard header file. There is a DEFINE CRLF in XSharp.Core now. If you are compiling against Vulcan and you are seeing an error about a missing CRLF then you may want to add the following to your code:
    DEFINE CRLF := e”\r\n”
  • -
    - Compiler - -
  • UDCs that were resulting in an empty list of tokens were triggering a compiler error in the preprocessor. This has been fixed.
  • -
    - -
  • Calling a method on an array would be translated to a ASend() with the method name as parameter when the method does not exist in the underlying array class.
    The compiler will generate a warning now when this happens,.
  • -
  • The compiler was producing incorrect code for (USUAL) casts. This has been fixed. In rare cases this may produce a compilation error. If that happens to you then simply create a usual by calling the USUAL constructor:  USUAL{somevalue}
  • -
  • Fixed several problems with methods declared outside of a CLASS .. END CLASS
  • -
  • In the FoxPro dialect NOT, AND, OR and XOR are now allowed as alternate syntax for .NOT.,.AND., .OR. and .XOR.
  • -
  • In the FoxPro dialect you can now include statements before the first entity in the file. The compiler will recognize these and will automatically create a function with the name of the source file and will add the code in these statements a body of this function.
  • -
  • The compiler now allows to cast an integer expression to logic when /vo7 is enabled. The LOGIC(_CAST is always supported for expressions of type integer
  • -
  • Incorrect use of language features (such as using a VOSTRUCT in the Core or FoxPro dialect) is now detected earlier by the compiler leading to somewhat faster compile times for incorrect code.
  • -
  • The compiler now also initialized multi dimensional string arrays with an empty string when /vo2 is enabled, like in the code below:
    CLASS TestClass
      EXPORT DIM aDim[3,3] AS STRING
    END CLASS
  • -
    - -
  • In previous builds you could not set breakpoints on the source code line with a SELF() or SUPER() call if this line was immediately after the CONSTRUCTOR(). This has been fixed.
  • -
  • When a project contains "_DLL METHOD", "_DLL ASSIGN" or "_DLL ACCESS" (after exporting from VO) then the compiler will now generate a more meaningful errormessage.
  • -
  • The compiler will no longer produce hundreds of the same error messages when a source file contains many of the same error. After 10 errors per source file the compiler will only report unique error numbers. So if your source code has 20 different error messages then you will still see 20 errors reported, but if your source contains the same error type 100 times then the list will be truncated after 10 errors.
  • -
  • The compiler no longer allows code behind end tokens such as ENDIF or NEXT. The standard header file 'XSharpDefs.xh' now includes rules that will eliminate these tokens.
  • -
    - Runtime - -
  • The ++ and -- operators for the usualtype were not working for Date and Datetime values
  • -
  • FErase() and FRename() now set FError() to 2 when the source file does not exist
  • -
  • The File() function was throwing an exception for paths with invalid characters. It now returns FALSE and sets the Ferror()
  • -
  • Several specific numbers were producing incorrect Str() results. This has been fixed.
  • -
  • The case of the name of the Value property for several types was changed from Value to VALUE. This caused problems for people that were interfacing with X# code from C# code. The original case has been restored. This change has been reversed.
  • -
  • Under certain situations the error stack would not contain the complete list of frames. This has been fixed.
  • -
  • The size of the Close and Copy buttons of the Error Dialog has been enlarged so there is more space for translated strings
  • -
  • The Pad..() functions were returning a padded version of "NIL" for NIL values. This was not compatible with Xbase++. They now return a string with all spaces. Btw: VO throw an exception when you call Pad..() with a NIL value.
  • -
  • Fixed a problem with the PadC() function for values > 1 character.
  • -
  • We have changed the Val() function to be more compatible with Visual Objects
  • -
  • The runtime contained a second overload for the Space() function that accepted an Int parameter. This was causing problems in the macro compiler. This overload has been removed. You may have to change your code because of that.
  • -
  • Fixed a problem in EnforceType() and EmptyUsual() with the STRING type
  • -
  • AEval and AEvalOld() now both pass the array index as second parameter to the codeblock that is evaluated
  • -
    - RDD System - -
  • Fixed a problem that EOF and BOF were not both set to true when opening an empty DBF with an index
  • -
  • Fixed a problem with DbSeek() and Found() for DBFNTX and DBFCDX
  • -
  • The DBF class was not properly decoding field names and/or index expressions that contain Ascii characters > 127 (field names like STRAßE)
  • -
  • File dates were updated when a dbf was closed even when nothing was changed. This has been fixed.
  • -
  • The runtime now contains code that closes all open workareas at shutdown. This should help to prevent DBF or index corruption.
  • -
  • The Advantage RDD was automatically doing a GoTop after the index order was changed. This no longer happens.
  • -
  • The Advantage RDD now retries opening DBF and Index files a couple of times before failing.
  • -
  • Fixed a small incompatibility between DBFCDX and AXDBFCDX
  • -
    - VS Integration - -
  • The Core Classlibrary template had a typo in a file name which caused it not to be loaded correctly
  • -
  • The code generator for the Windows Forms editor was duplicating USING statements. This has been fixed. Duplicate using statements will be deleted when a form is opened and saved in the designer.
  • -
  • The compilation messages on the output window for the compile time and the number of warnings and errors is now only shown for the build verbosity normal and higher. The warnings and errors message is also shown for lower build verbosity if there are compiler errors.
  • -
  • The project system will no longer update the version number in the project file if the project file was created with build 2.0.1 or later.
  • -
  • Fixed a problem with setting and clearing the "Specific version" property for Assembly References.
  • -
  • The default templates for the VO compatible editors are now installed in the XSharp\Templates folder and the editor uses this location as 'fallback' when you don't have templates in your project
  • -
  • The Properties folder is now placed as first child in the tree of a Project, and the VO Binaries items are placed before resource items in the list of children of a source item in the tree.
  • -
    - VOXporter - -
  • VOXPorter now prefixes Debug tokens with @@
  • -
  • VOXPorter now removes INSTANCE declaration for properties that are also declared as ACCESS/ASSIGN
  • -
  • VOXPorter now adds spaces between variable names that are delimited with .AND. or .OR.. So  "a.and.b" becomes "a .and. b"
  • -
    - Documentation - -
  • We have "lifted" some of the documentation of the Visual Objects runtime functions and added these to our runtime documentation. This is 'work in progress', some topics will need some extra work.
  • -
    - - Changes in 2.0.6.0 (Bandol GA 2.06) - General - -
  • We received a request to keep the version numbering simpler. For that reason this new build is called Bandol 2.06 and the file versions for this build are also 2.06. The assembly versions for the runtime assemblies are all 2.0, and we intend to keep those stable as long as possible, so you will not be forced to recompile code that depends on the runtime assemblies.
  • -
  • Several fixes that were meant to be included in 2.0.5.0 were not included in that build. This has been corrected in 2.0 6.0
  • -
    - Compiler - -
  • A missing ENDTEXT keyword now produces an error XS9086
  • -
  • Unbalanced textmerge delimiters produce a warning XS9085
  • -
  • The TEXT keyword in the FoxPro dialect is now only recognized when it is the first non whitespace token on a line. As a result of this you can use tokens like <text> in Preprocessor commands again.
  • -
  • The VO cast operations on literal strings no longer produce a compiler warning about possible memory leaks.
  • -
    - - Runtime - -
  • Runtime errors in late bound code were always shown as TargetInvocationException. The true cause of the error was hidden that way. We are now unpacking the error and rethrowing the original error, including the callstack that was leading to that error
  • -
  • Some texts in the string resources were updated
  • -
  • Calling the Str() function with a -1 value for length and/or decimals produced results that were not compatible with VO. This was fixed.
  • -
  • Fixed a problem with DBZap() and files with a DBT memo.
  • -
  • In some situations EOF and BOF were not set to TRUE when opening an empty DBF file. This has been fixed.
  • -
  • PSZ values with an incorrect internal pointer are now displayed as "<Invalid PSZ>(..)"
  • -
    - - RDD System - -
  • The code to read and write to columns in an Advantage workarea now uses separate column objects, just like the code for the DBF RDD. This makes the code a bit easier to understand and should make the code a bit faster.
  • -
    - - VS Integration - -
  • The text block between TEXT and ENDTEXT is now displayed in the same color as literal strings
  • -
  • The VO compatible Project Item templates no longer automatically add references to your project
  • -
  • Project files from version 2.01.0 and later will no longer be "touched" when opening with this version of the X# project system, since there have been no changes to the project file format since that build.
  • -
    - - VOXporter - -
  • The CATCH block in the generated Start function now calls ErrorDialog() to show the errors. This uses the new language resources to display the full error with VO compatible error information (Gencode, Subcode etc)
  • -
    - - Changes in 2.0.5.0 (Bandol GA 2.01) - Compiler - -
  • Blank lines after an END PROPERTY could confuse the compiler. This has been fixed
  • -
  • The TEXT .. ENDTEXT command has been implemented in the compiler (FoxPro dialect only)
  • -
  • The \ and \\ commands have been implemented (FoxPro dialect only)
  • -
  • Procedures in the FoxPro dialect may now return values. Also the /vo9 options is now enabled by default in the FoxPro dialect. The default return value for a FUNCTION and PROCEDURE is now TRUE in the foxpro dialect and NIL in the other dialects.
  • -
  • Error messages no longer refer to Xbase types by their internal names (XSharp.__Usual) but by their normal name (USUAL).
  • -
    - MacroCompiler - -
  • Creating classes with a namespace prefix was not working. This has been fixed.
  • -
    - Runtime - -
  • Fixed a problem with ArrayNew() and multiple dimensions
  • -
  • When calling constructor of the Array class with a number the elements were already initialized. This was not compatible with Vulcan.NET. There is now an extra constructor whtich takes a logical parameter lFill which can be used to automatically fill the array
  • -
  • The text for the ERROR_STACK language resource has been updated
  • -
  • Calling Str() with integer numbers was returning a slightly different result from VO. This has been fixed.
  • -
  • Added support functions for TEXT .. ENDTEXT and TextMerge and an output text file.
  • -
  • Fixed a problem in the DTOC() function
  • -
  • You can now add multiple ImplicitNamespace attributes to an assembly
  • -
  • We have added several FoxPro system variables (only _TEXT does something at this moment)
  • -
    - RDDs - -
  • Zap and Pack operations were not properly setting the DBF file size
  • -
  • An Append() in shared mode was not properly setting the RecCount
  • -
  • Opening a file with one of the Advantage SQL RDDs was not working. This has been fixed.
  • -
  • Writing DateTime.Minvalue to a DBF would not write an empty date but the date 1.1.1 This has been fixed.
  • -
    - VO SDK - -
  • Fixed a problem in ListView:EnsureVisible().
  • -
  • Some questionable casts (such as the one that cause the previous problem) have been cleaned up
  • -
    - Visual Studio Integration - -
  • Parameter tips for constructor calls were off by one parameter. This has been fixed.
  • -
  • When looking for types, the XSharp namespace is now the first namespace that is searched.
  • -
    - - Changes in 2.0.4.0 (Bandol GA) - Compiler - -
  • Fix a problem in assignment expressions where the Left side is an aliased expression with a workarea in parentheses:
    (nArea)->LastName := AnotherArea->LastName
  • -
  • Multiline statements, such as FOR blocks, no longer generate Multiline breakpoints in the debugger.
  • -
  • Fixed a problem where blank lines or lines with 'inactive' preprocessor comments after a class definition would generate a compiler error.
  • -
  • Errors for implicit conversions between INT/DWORD and PTR now produce a better error message when they are not supported.
  • -
  • USUAL.ToObject() could not be called with the latebinding compiler option was enabled. This has been fixed.
  • -
  • Fixed an internal compiler error with untyped STATIC LOCALs.
  • -
  • Fixed a problem with aliased expressions.
  • -
  • Indexing PSZ values is no longer affected by the /az compiler option
  • -
    - MacroCompiler - -
  • Fixed a problem with some aliased expressions
  • -
  • The macro compiler now detects that you are overriding a built-in function in your own code and will no longer throw an "ambigous method" exception but will choose function from your code over functions defined in the X# runtime
  • -
    - Runtime - -
  • FIxed several problems in the Directory() function
  • -
  • Fixed problem with indexing PSZ values
  • -
  • Added StackTrace property on the Error object so also errors caught in a BEGIN SEQUENCE will have stack information.
  • -
  • Fixed problems with "special" float values and ToString(), such as NaN, PositiveInfinity
  • -
  • Fixed a problem with RddSetDefault() with a null parameter
  • -
  • DbInfo(DBI_RDD_LIST) was not returning a value. This has been fixed.
  • -
  • We have updated many of the language resources, Also the Error:ToString() now uses the language resources for captions like 'Arguments' and 'Description'.
  • -
  • Low level file errors now include the callstack
  • -
  • Fixed some problems in AsHexString()
  • -
  • The DosErrString() no longer gets its messages from the language string tables. The messages have been removed and also the related members in the XSharp.VOErrors enum.
  • -
  • Added a Turkish language resource.
  • -
    - RDD System - -
  • Fix locking problem in FPT files
  • -
  • Fixed several problems with OrdKeyCount() and filters, scopes and SetDeleted() setting
  • -
  • Some DBF files have a value in the Decimals byte for field definitions for field types that do not support decimals. This was causing problems. These decimals are now ignored.
  • -
  • Opening and closing a DBF without making changes was updating the time stamp. This has been fixed.
  • -
  • Fixed problems in Pack() and Zap()
  • -
  • Fixed a problem where custom indexes were accidentally updated.
  • -
  • Fixed several problems with OrdKeyCount() in combination with Filters, SetDeleted() and scopes.
  • -
    - VO SDK Classes - -
  • Most of the libraries now compile with "Late Binding" disabled for better performance.
    To help in doing this some typed properties have been added such as SqlStatement:__Connection which is typed as SQLConnection.
  • -
    - Visual Studio integration - -
  • Fixed a problem in the Brace matching code
  • -
  • Improved Brace matching for keywords. Several BEGIN .. END constructs have now been included as well as CASE statements inside DO CASE and SWITCH, RECOVER, FINALLY, ELSE, ELSEIF and OTHERWISE
  • -
  • Fix a problem with adding and deleting references when unloaded or unavailable references existed.
  • -
    - VOXPorter - -
  • The program is now able to comment, uncomment and delete source code lines from the VO code when exporting to XSharp.
    You have to add comments at the end of the line. The following comments are supported:
  • -
    - // VXP-COM : comments the line when exporting it
    // VXP-UNC : uncomments the line
    // VXP-DEL : deletes the line contents

    example:
    // METHOD ThisMethodDoesNotGetDefinedInVOcode() // VXP-UNC
    // RETURN NIL // VXP-UNC
    - - Changes in 2.0.3.0 (Bandol RC3) - Compiler - -
  • Code generation for STATIC LOCALs of type STRING was not initializing the variables to an empty string when /vo2 was selected. We have also improved code generation for STATIC LOCALs when they are initialized with a compile time constant
  • -
  • In preparation for the support for variables passed by reference to functions/methods with clipper calling convention we are now assigning back the locals variables to the parameter array at the end of a function/method with clipper calling convention.
  • -
  • The compiler would not complain if you were assigning a value of one enum to a variable of another enum. This has been fixed.
  • -
  • Added support for the FoxPro '=' assignment operators. Other dialects also allow the assignment operator but a warning is generated in the other dialects.
  • -
  • Xbase++ classes inside BEGIN NAMESPACE .. END NAMESPACE were not recognized. This has been fixed.
  • -
  • Statements inside WITH blocks are no longer constrained to assignment expressions and method calls. You can now use the WITH syntax for expressions anywhere inside a WITH block. If the compiler can't find the WITH variable then it will output a new error message (XS9082)
  • -
  • Updated the Aliased Expression rules to make sure that compound expressions properly respect the parentheses.
  • -
  • The __DEBUG__ macro was not always set correctly. We have changed the algorithm that sets this macro. When the DEBUG define is set then this macro gets defined. When the NDEBUG define is set then this macro is not defined. When both defines are absent then __DEBUG__ is NOT set.
  • -
  • The compiler was allowing you to use the '+' operator between variables/ expressions of type string and logic. This is now flagged as an error.
  • -
    - MacroCompiler - -
  • Fixed a problem with resolving Field names that were identical to keywords or keyword abbreviations (for example DATE and CODE) and for Field names that are equal to built-in function names (such as SET)
  • -
  • Fixed a problem where a complicated expression evaluated with an alias prefix was not evaluated correctly.
  • -
  • The macro compiler initializes itself from the Dialect option in the runtime to enable/disable certain behavior.
  • -
  • The macro compiler now recognizes the "." operator for workarea access and memvar access when running in the FoxPro dialect.
  • -
    - Runtime - -
  • Added functions FieldPutBytes() and FieldGetBytes()
  • -
  • Added function ShowArray()
  • -
  • Added several defines that were missing, such as MAX_ALLOC and ASC_A.
  • -
  • Added Crypt() overloads that accept BYTE[] arguments
  • -
  • The ClassDescribe() method for DataObject classes (XPP dialect) now includes properties and methods that were dynamically added.
  • -
  • Fixed a problem with the RELEASE command for MemVars. This was also releasing variables defined outside the current function / method.
  • -
  • There is now also a difference between the FoxPro dialect and other dialects in the behavior of the RELEASE command.
    FoxPro completely deletes the variables, the other dialect set the value of the variables to NIL.
  • -
  • New PRIVATE memvars are initialized to FALSE in the FoxPro dialect. In the other dialects they are initialized to NIL.
  • -
  • Some numeric properties in the RuntimeState were giving a problem when a numeric of one type was written and another numeric type was expected when reading. This has been fixed.
  • -
  • Fixed a problem with return NIL values from Macro compiled codeblocks.
  • -
  • The parameter to DbClearScope() is now optional
  • -
  • The USUAL type now allows to compare between values of type PTR and LONG/INT64 The PTR value is converted to the appropriate Integral type and then an Integral comparison is done.
  • -
  • The USUAL type now also allows comparisons between any type and NIL.
  • -
  • Casts from USUAL values to SHORT, WORD, BYTE and SBYTE are no longer checked to be compatible with VO.
  • -
    - RDD System - -
  • Added support for different block sizes in DBFFPT.
  • -
  • DBFFPT now allows to override the block size (when creating) from the users code. Please note that block sizes < 32 bytes prevent the FPT from opening in Visual FoxPro.
  • -
  • Added support for reading various Flexfile memo field types, including arrays.
  • -
  • Added support for writing to FPT files
  • -
  • When creating FPT files we now also write the FlexFile header. Please note that our FPT driver does not support "record recycling" for deleted blocks like FlexFile does. We also only support writing STRING values to FPT files and Byte[] values.
  • -
  • Added support for Visual FoxPro created CDX files that were created with the COLLATE option. The RDD dll now contains collation tables for all possible combinations of collation and CodePage.
  • -
  • Added support for USUALs with a NIL value and the comparison operators (>, >=, <, <=). These operators return FALSE, except the >= and <= operators which return TRUE when both sides of the comparison are NIL.
  • -
  • We exposed several Advantage related function and types. Also the function AdsConnect60() was defined. We have not created functions for all available functions in Ace32 and Ace64, but only the ones needed in the RDD.
  • -
  • If you are missing a function in the ACE class, please let us know. All functions should be available and accessible now in the Ace32 and Ace64 classes or in the ACEUNPUB32 or ACEUNPUB64 classes.
  • -
  • The ADS RDD was returning incorrect values for LOGIC fields.
  • -
  • Fixed some problems with skipping in CDX indexes and scopes and filters.
  • -
  • Executing DbGoTop() twice or DbGoBottom() twice for DBFCDX would confuse the RDD. This has been fixed.
  • -
  • Fixed a problem with Seeking() in an empty DBF file
  • -
  • FieldPut for STRING fields in the Advantage RDD now truncates the fields to the maximum length of the field before assigning the value
  • -
  • Fixed a problem with UNIQUE CDX Indexes.
  • -
  • You can now create VFP compatible DBF files with DBCreate(). To do so use the following field types (apart from the normal CDLMN):
  • -
    - WBlob
    YCurrency
    BDouble
    TDateTime
    FFloat
    GGeneral
    IInteger
    PPicture
    QVarbinary
    VVarchar
    - Special field flags can be indicated by adding a suffix to the type: - "0" = Nullable
    "B" = Binary
    "+" = AutoIncrement
    - So this creates a nullable date: "D0" and this creates an autoincremental integer "I+". - Auto increment columns are initialized with a counter that starts with 1 and a step size of 1. You can change that by calling DbFieldInfo: - DbFieldInfo(DBS_COUNTER, 1, 100) // sets the counter for field 1 to 100
            DbFieldInfo(DBS_STEP, 1, 2)   // sets the step size for field 1 to 2
    - -
  • Fixed a locking problem with FPT files opened in shared mode
  • -
  • Fixed several problems related to OrderKeyCount() and various settings of Scopes and SetDeleted()  in the DBFCDX RDD.
  • -
    - VO SDK Classes - -
  • Fixed a problem in the DateTimePicker class when assigning only a time value.
  • -
  • System classes and RDD classes have been cleaned up somewhat and now compile in AnyCPU mode. So this means that you can use the DbServer class in a 64 bit program !
    The projects for these two libraries also no longer have the "Late Binding" compiler option enabled. There is still some late bound code in these libraries but this code now uses explicit late bound calls such as Send(), IVarGet() and IVarPut().
  • -
  • Because of the change in the handling of __DEBUG__ some SDK assemblies are not better optimized.
  • -
    - Visual Studio integration - -
  • Added support for WITH .. END WITH blocks in the editor
  • -
  • When generating Native Resources (RC files) the BuildSystem now sets a #define __VERSION__. This will have the fileversion number of the XSharp.Build.DLL without the dots. (2.1.0.0 will be written as "2100")
  • -
  • The XSharp help item in the VS Help menu now opens the local Help (CHM) file
  • -
  • Fixed a problem in the WCF service template
  • -
  • Correction to the multi line indenting for code that uses attributes
  • -
  • Code generation for new Event handlers now includes a RETURN statement, even when VS does not add one to the statement list
  • -
  • The intellisense option "Show completionlist after every character" has been disabled since it was having a negative impact on performance and would also insert keywords with @@ characters in front of them.
  • -
  • Several changes to the code parsing for the Windows Forms editor. Comments and Regions should now be saved and regenerated as well as attributes on classes. Also code generation for images from project resources has been fixed as well as parsing of static fields and enumerators declared in the same assembly.
    Please note. If you are using values from types defined in the same assembly as the form then the assembly needs to be (re)compiled first before the form can be successfully opened in the Windows Forms Editor.
  • -
  • New methods generated from the Windows forms editors will now be generated with a closing RETURN statement.
  • -
  • We have made some improvements to the presentation of QuickInfo in the source code editor.
  • -
    - Tools - -
  • VOXporter now also exports VERSIONINFO resources
  • -
    - - Changes in 2.0.2.0 (Bandol RC 2) - Compiler - -
  • File wide PUBLIC declarations (for MEMVARs) were incorrectly parsed as GLOBALs. Therefore they were initialized with NIL and not with FALSE. They are now generated correctly as public Memvars. The creation of the memvars and the initialization is done in after the Init3 procedures in the assembly have run.
  • -
  • Instance variable initializers now can refer other fields and are allowed to use the SELF keyword. This is still not recommended. The order in which fields are initialized is the order in which they are found in the source code. So make sure the field initializers are defined in the right order in your code.
  • -
  • AUTO properties are now also initialized with an empty string when /vo2 is enabled.
  • -
  • The compiler was allowing you to define instance variables for Interfaces. They were ignored during code generation. Now an error message is produced when the compiler detects fields on interfaces.
  • -
  • When the compiler detects 2 ambiguous symbols with different types (for example a LOCAL and a CLASS with the same name) then the error message now clearly indicates the type for each of these symbols.
  • -
  • Fixed an exception in the Preprocessor
  • -
    - -
  • Added support for the FoxPro runtime DLL.
  • -
    - -
  • The ANY keyword (an alias for USUAL) is no longer supported.
  • -
  • Keywords that appear after a COLON (":") DOT (".") or ALIAS (->) operator are no longer parsed as keyword but as identifier. This should solve issues with parsing code that for example accesses the Date property of a DateTime class.
  • -
  • We have added support for the WITH .. END WITH statement block:

    LOCAL oPerson as Person
    oPerson := Person{}
    WITH oPerson
      :FirstName := "John"
      :LastName := "Doe"
      :Speak()
    END WITH
    You can also use the DOT (.) as prefix for the names. The only expressions allowed inside WITH .. ENDWITH are assignments and method calls (like you can see above)
  • -
  • Added support for the FoxPro LPARAMETERS statement. Please not that a function or procedure can only have a PARAMETERS keyword OR a LPARAMETERS keyword OR declared parameters (names between parentheses on the FUNCTION/PROCEDURE line)
  • -
  • Added support for the FoxPro THIS keyword and .NULL. keyword
  • -
  • We have added support for the FoxPro Date Literal format {^2019-06-21} and FoxPro DateTime Literals {^2019-06-21 23:59:59}.
  • -
  • Date literals and DateTime literals are now also supported in the Core dialect. Date Literals will be represented as DateTime values in the Core dialect.
  • -
  • The standard header file xsharpdefs.xh now conditionally includes header files for the Xbase++ dialect and FoxPro dialect. These header files do not have much content at this moment, but that will change in the coming months.
  • -
  • When the compiler detects that some header files are included but that the defines in these header files are also available as constants in references assemblies then a warning will be generated and the include file will be skipped (XS9081)
  • -
  • The compiler now supports an implicit function _ARGS(). This will be resolved to the arguments array that is passed to functions/methods with clipper calling convention. This can be used to pass all the arguments of a function/method to another function/method.
  • -
  • We have added the TEXT ... ENDTEXT command for the FoxPro dialect. The string inbetween the TEXT and ENDTEXT lines is passed to a special runtime function __TextSupport that will receive 5 parameters: the string, the merge, NoShow, Flags and Pretext arguments. You will have to define this function yourself for now. it will be included in the XSharp Foxpro runtime in a future version.
  • -
  • We have added support for END keywords for all entity types that did not have one yet. The new end keywords are optional. They are listed in the table below. The FoxPro ENDPROC and ENDFUNC keywords will be mapped to END PROCEDURE and END FUNCTION with a UDC.
  • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - Start - - End -
    - PROCEDURE - - END PROCEDURE -
    - PROC - - END PROC -
    - FUNCTION - - END FUNCTION -
    - FUNC - - END FUNC -
    - METHOD - - END METHOD -
    - ASSIGN - - END ASSIGN -
    - ACCESS - - END ACCESS -
    - VOSTRUCT - - END VOSTRUCT -
    - UNION - - END UNION -
    - -
  • The compiler now registers the Dialect of the main in the Dialect property of the RuntimeState (Non Core dialects only)
  • -
    - MacroCompiler - -
  • Fixed a problem with escaped literal strings
  • -
    - -
  • Fixed a problem with implicit narrowing conversions
  • -
  • Fixed a problem with macro compiled alias operations  (Customer)->&fieldName
  • -
    - Runtime - -
  • Fixed a problem in the Round() function.
  • -
  • Fixed a problem in the ExecName() function.
  • -
  • Added FoxPro runtime DLL.
  • -
  • Added XML support functions in the Xbase++ dialect runtime
  • -
  • Added support for dynamic class creation in the Xbase++ dialect runtime.
  • -
  • Fixed a problem in the Push-Pop workarea code for aliased expressions.
  • -
  • converting a NULL to a symbol would cause an exception. This has been fixed.
  • -
    - RDD system - -
  • Fixed several problems in the ADS RDD
  • -
  • The DBFCDX RDD is now included
  • -
  • The DBFVFP RDD is now included. This RDD can be used to access files with DBF/FPT/CDX extension and support the Visual Foxpro field types, such as Integer, Double, DateTime and VarChar. Reading files should be fully supported. Writing should also work with the exception of the Picture and General formats and with the exception of the AutoIncremental Integer fields. You can also use the RDD to open the various "definition" files from VFP such as projects, forms and reports. The RDD 'knows' about the different extensions for indexes and memos. You can also open DBC files as normal tables. In a future version we will support the VFP database functionality.
  • -
    - Visual Studio Integration - -
  • You can now specify that multi line statements should indent on the 2nd and subsequent lines.
  • -
  • Type lookup for functions inside a BEGIN NAMESPACE .. END NAMESPACE did not include the types in this namespace.
  • -
  • Started intellisense for INLINE methods in the Xbase++ dialect
  • -
  • Fixed several problems in intellisense
  • -
  • Improved intellisense for VAR keywords declared in a FOREACH loop
  • -
  • Several other (smaller) improvements.
  • -
    - Tools - -
  • VOXporter now writes DEFINES in the RC files and no longer literal values.
  • -
  • VOXporter: fix for module names with invalid chars for filenames
  • -
    - - - - Changes in 2.0.1.0 (Bandol RC 1) - Compiler - -
  • Added support for the so called IF Pattern Expression syntax, which consists of an IS test and an assignment to a variable, prefixed with the VAR keyword:
    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ENDIF

    The variable oFoo introduced in the expression will only be visible inside the IF statement.
    Of course you can also use the pattern on other places, such as ELSEIF blocks, CASE statements, WHILE expressions etc:

    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ELSEIF x is Bar VAR oBar
      ? oBar:DoSomethingElse()
    ENDIF
  • -
  • Fixed a problem with method modifiers and generic methods
  • -
  • Fixed a problem with partial classes with different casing and destructors
  • -
  • Fixed a problem with Interfaces and methods with CLIPPER calling convention
  • -
  • The compiler now generates an error (9077) when an ACCESS or ASSIGN method has Type Parameters and/or Constraint clauses
  • -
  • Fixed a problem with DEFINEs with specific binary numeric values. Also overflow checking is now always of when calculating the result of numeric operations for the values of a DEFINE.
  • -
  • When a constant value was added or subtracted to a numeric value < 32 bits then the result was seen as 32 bits by the compiler. This sometimes forced you to use casts in your code. With this change that cast is no longer necessary.
  • -
  • The compiler allowed you to concatenate non string values and strings and was automatically calling ToString() on the non strings. This is no longer possible. The compiler now generates an error (9078)when it detects this.
  • -
  • We have added error trapping code to the compiler that should route internal errors to compiler error XS9999. If you see such an error, please let us know.
  • -
  • DIM arrays of literal strings are now initialized properly.
  • -
  • There was a problem when switching between dialects when using the shared compiler. It would sometimes no longer detect dialect specific keywords. This has been fixed.
  • -
  • Fixed a problem where incorrect code was producing an error "Failure to emit assembly"
  • -
  • Fixed a problem in code that uses _CAST to cast a 32 bits value to 16 bits
  • -
  • Fixed a problem with overloaded indexed properties where the index parameter in a subclass has a different type than the index parameter in the super class.
  • -
  • Changed implementation of several aliased operations (ALIAS->FIELD and (ALIAS)->(Expression))
  • -
  • Changed preprocessor handling of extended strings ( (<token>) )
  • -
  • The Roslyn code was not marking some variables as 'assigned but not read' to be compatible with the old C# compiler. We are now flagging these assignments with a warning. This may produce a lot of warnings in your code that were not detected before.
    To support this we have received some requests to "open up" the support for 1 based indexes in the compiler. In the past the compiler would only allow 1 based indexing for variables of type System.Array or of the XBase ARRAY Type.
    We have now added a couple of interfaces to the runtime. If your type implements one of these interfaces then the compiler will recognize this and allow you to use 1 based indexes in your code and then the compiler will automatically subtract 1 from the numeric index parameter. The XSharp ARRAY type and ARRAY OF type now also implement (one of) these interfaces/
    The interfaces are:
       INTERFACE IIndexer
           PUBLIC PROPERTY SELF[index PARAMS INT[]] AS USUAL GET SET
       END INTERFACE

       INTERFACE IIndexedProperties
           PROPERTY SELF[index AS INT   ] AS USUAL GET SET
           PROPERTY SELF[name  AS STRING] AS USUAL GET SET
       END INTERFACE
      INTERFACE INamedIndexer
         PUBLIC PROPERTY SELF[index AS INT, name AS STRING] AS USUAL GET SET
      END INTERFACE
  • -
    - Runtime - -
  • Fixed some problems in the OrderInfo() function
  • -
  • Fixed several problems with DB..() functions in the runtime
  • -
  • Fixed several problems with the macro compiler
  • -
  • Fixed a problem with the handling of default parameters in late bound calls to methods
  • -
  • Improved error messages for missing methods and/or properties in late bound code.
  • -
  • The Select() function was changing the current workarea. This has been fixed.
  • -
  • Converting a USUAL to a STRING was not throwing the same exceptions as VO. It was always calling ToString() on the USUAL. Now the behavior is the same as in VO.
  • -
  • F_ERROR has been defined as a PTR now and no longer as numeric
  • -
  • CreateInstance can now also find classes defined in namespaces
  • -
  • Fix problems with missing parameters in late bound code. Also added (limited) support for calling overloaded methods and constructors in late bound code.
  • -
  • Fixed problems with TransForm(), and several of the Str() functions.
  • -
  • XSharp.Core is now fully compiled as Safe code.
  • -
  • Fixed a problem with late bound assigns and access
  • -
  • NIL<-> STRING comparisons are now compatible with Visual Objects
  • -
  • Fixed problem with AEval() and missing parameters
  • -
  • Added Set() function. Please be careful when using header files for _SET defines. There are subtle differences between the definitions in Harbour, Xbase++ and VO/Vulcan.
    We recommend NOT to use the defines from the header file but to use the defines that are defined inside the X# runtime DLLs
  • -
  • Changed implementation of the functions used by the compiler for Aliased operations
  • -
    - RDD system - -
  • Added support for DBF character fields up to 64K.
  • -
  • Implemented the DBFCDX RDD
  • -
  • Fixed several problems related to the DBFNTX RDD
  • -
  • The DBF RDD was using the incorrect locking scheme for Ansi DBF files. It now uses the same scheme as VO and Vulcan.
  • -
  • Macro compiled index expressions are not of the type _CodeBlock and not of the type RuntimeCodeBlock (the RuntimeCodeblock is encapsulated inside the _CodeBlock object).
    That prevents problems when storing these expressions inside a USUAL
  • -
    - Visual Studio integration - -
  • Fixed an exception that could occur when typing a VAR expression
  • -
  • When the project system makes a backup of a project file, we are now making sure that Readonly flags are cleared before writing to or deleting existing files.
  • -
  • Reading intellisense data from C++ projects could send the intellisense engine into an infinite loop. This has been fixed.
  • -
  • The changes to the Form.Designer.prg are now written to disk immediately, to make sure that changes to the form are recompiled if you press 'Run' or 'Debug' from the window of the form editor
  • -
  • Improved support for intellisense for the VAR keyword.
  • -
  • Added support for FoxPro on the Project Properties page to prepare for the Compiler and Runtime changes for FoxPro.
  • -
  • .CH files are now also recognized as "X#" files in Visual Studio.
  • -
  • You can now control the characters that select an entry from a Completion List. For example the DOT and COLON now also select the current selected element. The complete list can be found on the Tools-Options-TextEditor-XSharp-Intellisense page.
  • -
  • Assemblies added to a project would not be properly resolved until the next time the project was loaded. This has been fixed.
  • -
  • Fixed a problem in the codedom parser which feeds the windows form editor. You can now inherit a form from another form in the same assembly. You will have to compile the project first (of course).
  • -
  • The .CH extension is now also registered as relevant for the X# project system.
  • -
  • Changed auto indentation for #ifdef commands
  • -
  • Fixed an exception that could occur during loading of project files with COM references.
  • -
  • Added templates for class libraries in XPP and VO Dialect
  • -
  • Sometimes a type lookup for intellisense was triggered inside a comments region. This has been fixed.
  • -
    - Tools - -
  • VOXPorter was not removing calling conventions when creating delegates. This has been fixed
  • -
  • VOXporter was sometimes generating project files with many duplicates of resource items. This has been fixed.
  • -
  • VOXporter now marks prefix identifiers that conflict with one of the new keywords with "@@"
  • -
  • The delay for the VOXporter welcome screen has been shortened.
  • -
    - - - Changes in 2.0.0.9 (Bandol Beta 9) - Compiler - -
  • The Lexer (the part of the compiler that recognizes keywords, literals etc) has been rewritten and is slightly faster.
  • -
  • The compiler now supports digit separators for numeric literals. So you can now write 1 million as:
    1_000_000
  • -
    - -
  • Fixed problem where static local variables were not initialized with "" even when compiler option -vo2 was selected
  • -
  • #ifdef commands using preprocessor macros such as __XSHARP_RT__ were not working correctly.
  • -
  • The Xbase++ dialect now also supports the 'normal' class syntax.
  • -
  • We had changed the 'Entrypoint' algorithm in Beta 8. This has been restored now and the -main command line option now works again as well. In stead the "body" of the Start method is now encapsulated in an anonymous function.
  • -
    - -
  • Duplicate include files no longer produce an error but a warning
  • -
  • Fix for problem with default parameter values with 'L' or 'U' suffix
  • -
  • Added compiler error when specifying default parameter values for methods/functions with clipper calling convention
  • -
  • DIM arrays of STRING were not initialized with "" when /vo2 was specified. This has been fixed.
  • -
  • Added support for Dbase style memory variables (MEMVAR, PUBLIC, PRIVATE, PARAMETERS). See the MEMVAR topic in the help file for more information. This is only available for certain dialects and also requires the /memvar commandline option
  • -
  • Added support for undeclared variables (this is NOT recommended!). This is only available for certain dialects and requires the /memvar AND the /undeclared commandline options
  • -
  • Fixed a problem for comparisons between USUAL variables and STRING variables
  • -
  • Fixed a problem with partial classes where the classname had different casing in the various declarations
  • -
  • Fixed a problem with numeric default parameters with L or U suffixes
  • -
  • Fixed a problem with line continuation semi colons followed by a single line comment with the multiline comments style.
  • -
  • Fixed a problem with methods containing YIELD statements in combination with compiler option /vo9
  • -
  • When a visibility modifier was missing on a generic method then this method was created as a private method. This has been fixed.
  • -
  • When choosing between overloaded functions in XSharp.RT and XSharp.Core the function in the XSharp.RT assembly would sometimes be chosen although the overload in XSharp.Core was better
  • -
  • CASE statements without CASE block but only a OTHERWISE block would crash the compiler. This has been fixed and an warning about an empty CASE statement has been added.
  • -
    - Runtime - -
  • Several changes to the Macro compiler, such as the parsing of Hex literals, case sensitivity of parameters (they are no longer case sensitive) and limited support for function overloading.
  • -
  • Several missing functions have been added, such as _Quit(),
  • -
  • The return value of several Ord..() functions was incorrect. This has been fixed.
  • -
  • Fixed a problem with CurDir() for the root directory of a drive
  • -
  • Fixed a problem with calling Send() with a single parameter with the value NULL_OBJECT.
  • -
  • Solved problem with incorrect parameters for DiskFree() and DiskSpace()
  • -
  • MemoRead() and MemoWrit() and FRead..() and FWrite..() now respect the SetAnsi() setting like the functions in the VO Runtime.
  • -
  • We have added 2 new functions to read/write binary files: MemoReadBinary() and MemoWritBinary()
  • -
  • Not all DBOI_ enum values had the same value as in Vulcan. This has been solved.
  • -
  • SetDecimalSep() and SetThousandSep() now also set the numeric separators in the current culture.
  • -
  • The USUAL -> STRING conversion now calls AsString()
  • -
    - -
  • Added support for Dbase style dynamic memory variables (MEMVAR, PUBLIC, PRIVATE, PARAMETERS). See the Memory Variables topic in the help file for more information.
  • -
  • The IsDate() function now also returns TRUE for USUALs of type DateTIme. There is also a separate IsDateTime() function. We have also added IsFractional() (FLOAT or DECIMAL) and IsInteger (LONG or INT64) and IsInt64()
  • -
  • Added missing Cargo slot to the Error class. Also improved Error:ToString()
  • -
  • Fix for problem in W2String()
  • -
  • And many more small changes.
  • -
    - Visual Studio Integration - -
  • We have added a new tab page in the Project Properties dialog: Dialect. This contains dialect specific language options.
  • -
  • 2 options from the Build options page (which is configuration dependent) have been moved to the Language page (which is build INdepedent), because that makes more sense:
  • - -
  • Include Path
  • -
  • NoStdDef
  • -
    -
    - -
  • We have also added a project property on the Language page to specify an alternative standard header file (in stead of XSharpDefs.xh)
  • -
  • The XSharp.__Array type was shown in the intellisense with the wrong name
  • -
  • We have added entries on the Project Properties dialog pages to enable MEMVAR support and to enable Undeclared variables
  • -
  • Fixed a problem in the CodeDom provider (used by the Windows Form editor) where fields with array types were losing their array brackets when writing back to the source.
  • -
  • When writing changes from the windows form editor we are no longer writing to disk but to the opened (sometimes invisible) windows of the .designer.prg. This should prevent warning messages about the .designer.prg file that was changed outside Visual Studio
  • -
  • Fixed a problem parsing source code where identifier names were starting with '@@'
  • -
  • The Debugger was showing UINT64 as typename for ARRAYs. This has been fixed.
  • -
  • Renaming forms in the Windows Forms editor was not working for forms with a separate .designer.prg. This has been fixed.
  • -
  • Fixed a (very old) problem where the OutPutPath property in the xsproj file was sometimes set to $(OutputPath).
  • -
  • Fixed an exception in the editor for empty source files or header files.
  • -
  • Fixed an exception when the error list was created for errors without errorcode
  • -
  • Commenting a single line in the editor will now always use the // comment format
  • -
    - Tools - -
  • No changes in this release.
  • -
    - - - Changes in 2.0.0.8 (Bandol Beta 8) - Compiler - -
  • The compiler source code has been upgraded to Roslyn 2.10 (C# 7.3). As a result of that there are some new compiler options, such as /refout and we also support the combination of the "PRIVATE PROTECTED" modifier that defines a type member as accessible for subclasses in the same assembly but not for subclasses in other assemblies
  • -
  • We have added support for Xbase++ class declarations. See the Xbase++ class declaration topic for more information about the syntax and what is supported and what not.
  • -
  • We have added support for simple macros with the &Identifier syntax
  • -
  • We have added support for late bound property access:
  • - -
  • The <Expression>:&<Identifier> syntax.
    This translates to IVarGet(<Expression>, <Identifier>).
  • -
  • The <Expression>:&(<Expression2>) syntax.
    This translates to IVarGet(<Expression>, <Expression2>).
  • -
  • Both of these can also be used for assignments and will be translated to IVarPut:
    <Expression>:&<Identifier> := <Value>
    This becomes IVarPut(<Expression>, <Identifier>, <Value>)
  • -
  • All of these will work even when Late Binding is not enabled.
  • -
    -
    - -
  • We have added a new compiler options /stddefs that allows you to change the standard header file (which defaults to XSharpDefs.xh)
  • -
  • We have added a new preprocessor Match marker <#idMarker> which matches a single token (all characters until the first whitespace character)
  • -
  • When you select a dialect now, then the compiler will automatically add some compiler macros. The VO dialect declares the macro __VO__, the Vulcan dialect declares the macro __VULCAN__ the harbour dialect declares the macro __HARBOUR__ and the Xbase++ dialect declares the macro __XPP__.
  • -
  • When compiling against the X# runtime then also the macro __XSHARP_RT__ will be defined.
  • -
  • We have added a new warning when you pass a parameter without 'ref' modifier (or @ prefix) to a method or function that expects a parameter by reference or an out parameter.
  • -
  • We have also added a warning that will be shown when you assign a value from a larger integral type into a smaller integral type to warn you about possible overflow problems.
  • -
    - Runtime - -
  • This build includes a new faster macro compiler. It should be fully compatible with the VO macro compiler. Some of the .Net features are not available yet in the macro compiler.
  • -
  • We moved most of the generic XBase code to XSharp.RT.DLL. XSharp.VO.DLL now only has VO specific code. We have also added XSharp.XPP.DLL for XPP
  • -
  • Fix Ansi2OEM problem with FRead3(), FWrite3() and FReadStr
  • -
  • Added  missing functions EnableLBOptimizations() and property Array:Count
  • -
  • Fixed problem with latebound assign with CodeBlock values
  • -
  • Fixed problem with AScan() and AEval() with missing parameters
  • -
  • Changed error return codes for DirChange(), DirMake() and DirRemove()
  • -
  • Send() was "swallowing" errors. This has been fixed
  • -
  • Fixed a problem with assigning to multi dimensional arrays
  • -
  • Fixed a problem with creating objects with CreateInstance() where objects are not in the "global" namespace
  • -
  • Fixed several problems in the RDD system and support functions.
  • -
  • Fixed several problems in the late binding support, such as IsMethod, IsAccess, IVarPut, IVarPutSelf etc.
  • -
  • Fixed several problems with TransForm()
  • -
  • Integer divisions for usuals containing integers now return either integers or else fractional numbers depending on the compiler setting of the main app.
  • -
  • We fixed several conversions problems during late bound calls
  • -
  • We have fixed several problems with the Val() and Str() functions.
  • -
  • The internal type names for DATE and FLOAT have been changed to __Date and __Float. If you rely on these type names please check your code !
  • -
  • DebOut32 was not outputting data to the debug terminal if the runtime was compiled in release mode. This has been fixed.
  • -
    - Visual Studio Integration - -
  • Fixed filtering on 'current project' in the error list
  • -
  • Type lookup for local variables was sometimes failing. This has been fixed
  • -
  • Fixed a problem with Brace Matching that could cause an exception in VS
  • -
  • Fixed a problem with Tooltips that could cause an exception in VS
  • -
  • Fixed a problem with uncommenting that could cause an exception in VS
  • -
  • New references added in VS would not always be included in the type search in the editor. This has been fixed.
  • -
  • Member prototypes for constructors now include the type name and curly braces
  • -
  • We have started work on improved code completion for variables declared with VAR
  • -
  • We have started with support for code completion for members of Generic types. This is not finished yet.
  • -
  • PRG files that are not part of a X# project and not part of a Vulcan project are now also colorized in the editor.
  • -
    - Tools - -
  • VulcanXPorter was always adjusting the referenced VO libraries and  was ignoring the "Use X# Runtime" checkbox
  • -
  • VOXPorter now has an option to copy the resources referenced in the AEF files to the Resources subfolder in the project
  • -
  • VOXPorter now also copies the cavowed, cavofed and cavoded template files to the properties folders in your project.
  • -
    - - - Changes in 2.0.0.7 (Bandol Beta 7) - Compiler - -
  • When calling a runtime function with a USUAL parameter the compiler now automatically prefers methods or functions with "traditional' VO types over the ones with enhanced .Net types. For example when there are 2 overloads, one that takes a byte[] and another that takes a string, then the overload that takes a string will get preference over the overload that takes a byte[].
  • -
  • Resolved a problem with .NOT. expressions inside IIF() expressions
  • -
  • Improved debugger break point generation for Invoke expressions ( like String.Compare())
  • -
  • Fixed a pre-processor error for parameters for macros defined in a #define. These parameters must have the right case now. Parameters with a different case will not be resolved any longer.
  • -
  • Fixed a pre-processor error where optional match patterns in pre-processor rules were repeated. This is too complicated to explain here in detail <g>.
  • -
  • The code generated by the compiler for Array operations now uses the new interfaces declared in the X# runtime (see below).
  • -
    - Runtime - -
  • We have added several missing functions, such as _GetCmdLine, Oem2AnsiA() and XSharpLoadLibrary
  • -
  • Fixed problems in CreateInstance, IVarGet, IVarPut(), CtoDAnsi() and more.
  • -
  • Added VO Compatible overload for FRead4()
  • -
  • No longer (cathed) exceptions are produced for empty dates
  • -
  • Ferror() was not always return the error of a file operation. This has been fixed
  • -
  • We have added a new FException() function that returns the last exception that occurred for a low level file operation
  • -
  • Casting a usual containing a PTR to a LONG or DWORD is now supported
  • -
  • Some new interfaces have been added related to array handling. The compiler no longer inserts a cast to Array inside the code, but inserts a cast to one of these interfaces depending on the type of the index parameter. The USUAL type implements IIndexer and IIndexProperties and dispatches the call to the objects inside the usual when this objects exposes the interface. This is used for indexed access of properties when using AEval or AScan on an ARRAY OF <type>
  • - -
  • XSharp.IIndexer
  • -
  • XSharp.INamedIndexer
  • -
  • XSharp.IIndexedProperties
  • -
    -
    - SDK Classes - -
  • We have added the Hybrid UI classes from Paul Piko (with permission from Paul)
  • -
    - Tools - -
  • The Vulcan XPorter now also has an option to replace the runtime and SDK references with references to the X# runtime
  • -
    - - - Changes in 2.0.0.6 (Bandol Beta 6) - Compiler - -
  • The compiler was sometimes still generating warnings for unused variables generated by the compiler. This has been fixed.
  • -
  • The compiler will now produce a warning that #pragmas are not supported yet (9006)
  • -
  • Added compiler macro __FUNCTION__ that returns the current function/method name in original casing.
  • -
  • Literal sub arrays for multidimensional arrays no longer need a type prefix when compiling in the Core dialect
  • -
  • Fixed problem with the Global class name that would happen when building the runtime assemblies (these have a special convention for the global class names)
  • -
  • When the calling convention of a method in an interface is different from the calling convention of the implementation (CLIPPER vs Not CLIPPER) then a new error (9067) will be generated by the compiler.
  • -
  • The calling convention for _DLL functions and procedures is now optional and defaults to PASCAL (stdcall)
  • -
  • The namespace alias for using statements was not working in all cases.
  • -
  • The compiler will now generate an error for code that incorrectly uses the VIRTUAL and OVERRIDE modifiers.
  • -
  • The compiler was throwing an exception for a specific kind of incorrect local variable initializer with generic arguments. This has been fixed.
  • -
  • Visibility modifiers on GET or SET accessors for properties were not working correctly (INTERNAL, PRIVATE etc). This has been fixed.
  • -
  • The compiler now handles PSZ(_CAST,...) and PSZ(..) differently. When the argument is a literal string, then the PSZ will only be allocated once and stored in a "PSZ Table" in your assembly. The lifetime of this PSZ is then the lifetime of your app. When this happens then the new compiler warning XS9068 will be shown.
    When the argument is a string stored in a local or global (or define) then the compiler can't know the lifetime of the PSZ. It will therefore allocate the memory for the PSZ with the StringAlloc() function. This ensures that the PSZ will not go out of scope and be freed. If you use this a lot in your application then you may be repeatedly allocating memory. We recommend that you avoid the use of the cast and conversion operators for PSZs and take control of the lifetime of the PSZ variables by allocating and freeing the PSZ manually. PSZ casts on non strings (numerics or pointers) simply call the PSZ constructor that takes an intptr (this is used on several spots in the Win32API library for 'special' PSZ values).
  • -
  • Named arguments are now also supported in the Vulcan dialect. This may lead to compiler errors if your code looks like the code below, because the compiler will think that aValue is a named argument of the Empty() function.

    IF Empty(aValue := SomeExpression())
  • -
  • If you were inheriting a static class from another class then you would get a compiler warning before. This is now a compiler error, because this had a side effect where the resulting assembly contained a corrupted reference.
  • -
  • The overload resolution code now chooses a type method/function over a method/function with clipper calling convention.
  • -
  • The Xbase++ dialect is now recognized by the compiler. For the time being it behaves the same as Harbour. We have also added the compiler macro __DIALECT_XBASEPP__ that will be automatically define to TRUE when compiling in Xbase++ mode.
  • -
  • Fixed a problem in the PDB line number generation that would cause incorrect line numbers in the debugger
  • -
    - Visual Studio integration - -
  • The source code editor was not always showing the correct 'active' region for #defines defined in #include files.
  • -
  • Opening a source file without entities (e.g. a header file) could result in an error message inside VS.
  • -
  • Fixed a null reference exception in the editor
  • -
  • Fixed a problem when un-commenting code in the editor
  • -
  • Improved load time performance for large solutions with many dependencies.
  • -
  • Fixed a problem where the intellisense engine could lock a DLL that was used by a project reference or assembly reference.
  • -
  • Fixed a problem where missing references (for example COM references that were not installed on the developers machine) could cause problems with the type lookup when opening forms in the windows forms editor.
  • -
  • Added an option to select the Harbour dialect on the project properties page.
  • -
    - The Build System - -
  • The Build system did not recognize that begin NAMESPACE lines in source code were commented out. This has been fixed.
  • -
    - VOXporter - -
  • We have added an option to sort the entities in alphabetical order in the output file.
  • -
  • We have added an option so you can choose to add the X# Runtime as reference to your application (otherwise the Vulcan runtime is used)
  • -
    - Runtime - -
  • The SetCentury setting was incorrect after calling SetInternational(#Windows). This has been fixed.
  • -
  • The Descend function for dates now returns a number just like in VO
  • -
  • The functions ChrA and AscA have been renamed to Chr() and Asc() and the original functions Chr() and Asc() have been removed. The original functions were using the DOS (Oem) codepage and this is not compatible with Visual Objects.
  • -
  • On several places in the runtime characters were converted from 8 bit to 16 bit using the System.Encoding.Default codepage. This has been changed. We use the codepage that matches the WinCodePage in the Runtimestate now. So by setting the Windows codepage in the runtime state you now also control the conversions from Unicode to Ansi and back
  • -
  • The Oem2Ansi conversion was incorrect for some low level file functions.
  • -
  • We have changed several things in the Late Binding support
  • -
  • All String - PSZ routines (String2PSz(), StringAlloc() etc) now use the Windows Codepage to convert the unicode strings to ansi.
  • -
  • If you library is compiled with 'Compatible String comparisons' but the main app isn't, then the string comparisons in the library will follow the same rules as the main app because the main app registers the /vo13  setting with the runtime. The "compatible" stringcomparison routines in the runtime now detect that the main app does not want to do VO compatible string comparisons and will simply call the normal .Net comparison routines.
    We therefore recommend that 3rd party products always use the Compatible String comparisons in their code.
  • -
    - -
  • Preliminary documentation for the runtime was generated from source code comments and has been included as chapter in this documentation.
  • -
    - The VO SDK - -
  • This build includes the first version of the VO SDK compiled against the X# runtime. We have included the following class libraries
  • - -
  • Win32API
  • -
  • System Classes
  • -
  • RDD Classes
  • -
  • SQL Classes
  • -
  • GUI Classes
  • -
  • Internet Classes
  • -
  • Console Classes
  • -
  • Report Classes
  • -
    -
    - -
  • All assemblies are named VO<Name>.DLL and the classes in these assemblies are in the VO namespace.
  • -
  • This SDK is based on the VO 2.8 SP3 source code. The differences between VO 2.8 SP3 and VO 2.8 SP4 will be merged in the source later,
  • -
  • The Libraries for OLE, OleServer and Internet Server are not included. The OleAutoObject class and its support classes is included in the XSharp.VO library. OleControl and OleObject are not included.
  • -
  • Preliminary documentation for these classes was generated from source code comments and has been included as chapter in this documentation.
  • -
    - The RDD system - -
  • This build includes the first version of the RDD system. DBF-DBT is ready now. Other RDDs will follow in the next builds. Also most of the RDD related functions are working in this build.
  • -
  • This build also includes the first version of the Advantage RDD. With this RDD you can access DBF/DBT/NTX files , DBF/FPT/CDX files and ADT/ADM/ADI files. The RDD names are the same as the RDD names for Vulcan. (AXDBFCDX, AXDBFNTX, ADSADT). We also support the AXDBFVFP format and the AXSQLCDX, AXSQLNTX, AXSQLVFP. For more information about the differences and possibilities of these RDD look in the Advantage documentation.
    We have coded the Advantage RDD on top of the Advantage Client Engine. Our RDD system detects if you are running in x86 or x64 mode and calls functions in Ace32 or Ace64 accordingly.
    To use Advantage you copy the support DLLs from an Advantage Vulcan RDD to the folder of your application. Look at the Advantage docs for Vulcan to see the list of the DLLs. The Advantage RDD is part of the standard XSharp.RDD.DLL which therefore replaces the AdvantageRDD.Dll for Vulcan.
  • -
  • The XSharp.Core DLL now also has RDD support. We have chosen NOT to implement this in functions, but as static methods inside the CoreDb class. Old code that uses the VoDb..() functions can be simply ported by changing "VoDb" to "CoreDb."
    The parameters and return values that are USUAL in VO and Vulcan are implemented as OBJECT in the CoreDb class.
    The ..Info() methods have 2 overloads. One that takes an Object and one that takes a reference to an object.
    The methods inside CoreDb return success or failure with a logical value like the VODB..() functions in VO. If you want to know what the error was during the last operation then you can access that with the method CoreDb._ErrInfoPtr() . This returns the last exception that occurred in a RDD operation.
  • -
  • At this moment the CoreDb class only has a FieldGet() that returns an object. We will add some extra methods that return values in a specified type in the next build (such as FieldGetString(), FieldGetBytes() etc). We will also add overloads for FieldPut() that take different parameter types.
  • -
  • The XSharp.VO DLL has the VoDb..() functions and the higher level functions such as DbAppend(), EOF(), DbSkip() etc.
    The VoDb..() functions return success or failure with a logical value. If you want to know what the error was during the last operation then you can access that with the method _VoDbErrInfoPtr() . This returns the last exception that occurred in a RDD operation.
  • -
  • You can mix calls to the VoDb..() functions and CoreDb...() methods. Under the hood the VoDb..() functions also call the CoreDb methods.
  • -
  • The higher level functions may throw an exception just like in VO. For example when you call them on a workarea where no table is opened. Some functions simply return an empty value (like Dbf(), Recno()). Others will throw an exception. When you have registered an error handler with ErrorBlock() then this error handler will be called with the error object. Otherwise the system will throw an exception.
  • -
  • Date values are returned by the RDD system in a DbDate structure, Float values are returned in a DbFloat structure. These structures have no implicit conversion methods. They do however implement IDate and IFloat and they can and will be converted to the Date and Float types when they are stored in a USUAL inside the XSharp.VO DLL. The DbDate structure is simply a combination of a year, month and date. The DbFloat structure holds the value of fields in a Real8, combined with length and the number of decimals.
  • -
  • More documentation about the RDD system will follow later. Of course you can also look at the help file and source code on GitHub.
  • -
    - - Changes in 2.0.0.5 (Bandol Beta 5) - Compiler - -
  • The strong named key for assemblies with native resources was invalid. This has been fixed
  • -
  • When an include file was included twice for the same source (PRG) file then a large number of compiler warnings for duplicate #defines would be generated. Especially when the Vulcan VOWin32APILibrary.vh was included twice then over 15000 compiler warnings would be generated per source file where this happened. This large number of warnings could lead to excessive memory usage by the compiler. We are now outputting a compilation error when we detect that the same file was included twice. We have also added a limit of 500 preprocessor errors per source (PRG) file.
  • -
  • A change in Beta 4 could result in compiler warnings about unused variables that were introduced automatically by the X# compiler. This warning will no longer be generated.
  • -
  • The compiler now correctly stores some compiler options in the runtime state of XSharp.
  • -
    - Runtime - -
  • Fixed a problem in the Ansi2OEM and OEM2Ansi functions.
  • -
  • Fixed a problem in the sorting for SetCollation(#Windows)
  • -
  • Fixed a problem with string comparisons in runtime functions like ASort(). This now also respects the new runtime property CompilerOptionVO13 to control the sorting
  • -
    - Visual Studio integration - -
  • The sorting of the members in the editor dropdown for members was on methodname and propertyname and did not include the typename. When a source file contained more than one type then the members would be mixed in the members dropdown
  • -
    - Build System - -
  • The default value for VO15 has been changed back from false to undefined.
  • -
    - - - Changes in 2.0.0.4 (Bandol Beta 4) - Compiler - -
  • POSSIBLY BREAKING CHANGE: Functions now always take precedence over same named methods. If you want to call a method inside the same class you need to either prefix it with the typename (for static methods) or with the SELF: prefix. If there is no conflicting function name then you can still call the method with just its name. We recommend to prefix the method calls to make your code easier to read.
  • -
  • The compiler was accepting just an identifier without a INSTANCE, EXPORT or other prefix and without a type inside a class declaration. It would create a public field of type USUAL. That is no longer possible.
  • -
  • Improved the positional keyword detection algorithm (this also affects the source code editor)
  • -
  • The || operator now maps to the logical or  (a .OR. b) and not to the binary or (_OR(a,b))
  • -
  • The VAR statement now also correctly parses

    VAR x = SomeFunction()
  • -
    - And will compile this with a warning that you should use the assignment operator (:=). - We have added this because many people (including we) copy examples from VB and C# where the operator is a single equals token. - -
  • Error messages about conflicting types now include the fully qualified type name.
  • -
  • The compiler no longer includes the width for literal Floats. This is compatible with VO.
  • -
  • A Default parameter of type Enum is now allowed.
  • -
    - Runtime - -
  • Added several functions that were missing, such as __Str() and DoEvents()
  • -
  • Fixed a problem in the macro compiler with non-english culctures.
  • -
  • Added several overloads for Is..() functions that take a PSZ instead of a string, such as IsAlpha() and IsUpper().
  • -
  • Added some missing error defines, such as E_DEFAULT and E_RETRY.
  • -
  • Fix for a problem with SubStr() and a negative argument
  • -
  • Fix for a problem with IsInstanceOf()
  • -
  • Fix for a problem with Val() and a hex value with an embedded 'E' character
  • -
  • Added implicit conversions from ARRAY to OBJECT[] and back.
  • -
  • Several changes to the code for Transform() and Unformat() to cover several exotic picture formats
  • -
  • Changes to the code for SetCentury() to automatically also adjust the date format (SetDateFormat())
  • -
  • Fixes for the Str() family of functions in combination with SetFixed() and SetDigitFixed().
  • -
    - Visual Studio integration - -
  • Fixed a problem when building projects in the latest build of Visual Studio
  • -
  • Several 'keywords' were not case synchronized before, such as TRUE, FALSE, NULL_STRING etc,
  • -
  • Keywords are not case synchronized on the current line as long as the user has the cursor on them or immediately after them. That means that when you type String and want to continue to change it to StringComparer then the formatter will no longer kick in and change "String" to the keyword case before you have the chance to complete the word.
  • -
  • The Control Order dialog inside the form editor was not saving its changes.
  • -
  • Added an option to include all entities from the editor, or just the members from the current selected type in the right dropdown of the editor
  • -
  • The editor was also matching braces inside literal strings and comments. This has been fixed.
  • -
  • Fixed a problem with the CodeDom parser where extended strings (strings containing CRLF tokens or other special tokens) were parsed incorrectly. This resulted in problems in the windows forms editor.
  • -
  • The member resolution code in the editor was not following the same logic as the compiler: When a function and a method with the same name exist it was resolving to the method in stead of the function. This has been fixed.
  • -
  • Fixed a problem when debugging in X64 mode.
  • -
  • Fixed an exception when comparing source code files with SCC integration.
  • -
  • Fixed several problems w.r.t. the XAML editor:
  • - -
  • Code is now generated with STRICT calling convention to avoid problems when compiler option "Impliciting CLIPPER calling convention" is enabled
  • -
  • WPF and other templates now include STRICT calling convention for the same reason
  • -
  • The XAML editor could not properly load the current DLL or EXE and had therefore problems resolving namespaces and adding user controls to the tool palette. This has been fixed.
  • -
    -
    - -
  • We have added an option to the Tools/Editor/XSharp/Intellisense options that allow you to control how the member combobox in the editor works. You can choose to only show methods & properties of the current type or all entities in the right combobox. The left combobox always shows all types in the file.
  • -
  • Some of the project and item templates have been updated. Methods and constructors without parameters now have a STRICT calling convention. Also the compiler option /vo15 has been explicitly disabled in templates for the Core dialect.
  • -
    - - - Changes in 2.0.0.3 (Bandol Beta 3) - Compiler - -
  • When 2 method overloads have matching prototypes the compiler now prefers the non generic one over the generic one
  • -
  • Fixed an exception that could occur when compiling a single line of source code with a preprocessor command in it.
  • -
    - Runtime - -
  • Added Mod() function
  • -
  • Added ArrayNew() overload with no parameters
  • -
    - -
  • Fixed problem in __StringNotEquals() when length(RHS) > length(LHS) and SetExact() == FALSE
  • -
  • Added missing string resource for USUAL overflow errors
  • -
    - Visual Studio integration - -
  • Improved keyword case synchronization and indenting. Also a source file is 'Keyword Case' synchronized when opened.
  • -
  • Opening a source file by double clicking the find results window no longer opens a new window for the same source file
  • -
  • Improved type lookup speed for intellisense
  • -
  • Fixed a problem that would prevent type lookup for types in the same namespace
  • -
  • Fix for QuickInfo problem introduced in the latest Visual Studio 2017 builds
  • -
  • QuickInfo tips are no longer shown in the debugger where they were overlapping with debugger tooltips
  • -
  • The comboboxes with methods and functions in the editor window no longer shows parameter names and full type names. Now it shows the shortened type names for the parameters
  • -
  • These same comboboxes now show the file name for methods and properties defined in another source file
  • -
  • Fixed problem in the window editor with generating code for tab pages
  • -
    - Vulcan XPorter - -
  • Project dependencies defined in the solution file were not properly converted
  • -
    - VO XPorter - -
  • Fixed a problem where resource names were replaced with the value of a define
  • -
    - - - Changes in 2.0.0.2 (Bandol Beta 2) - Compiler - -
  • The compiler now transparently accepts both Int and Dword parameters for XBase Array indices
  • -
  • When the compiler finds a weakly typed function in XSharp.VO and a strongly typed version in XSharp.Core then it will choose the strongly typed version in XSharp.Core now.
  • -
  • In the VO and Vulcan dialect sometimes an (incorrect) warning 'duplicate usings' was displayed. This is now suppressed.
  • -
  • The debugger information for the Start function has been improved to avoid unnecessary step back to line 1 at the end of the code
  • -
  • The debugger break point information for BEGIN LOCK and BEGIN SCOPE has been improved
  • -
  • The debugger break point information for multi line properties has been improved
  • -
  • /vo6, /vo7 and /vo11 are now only supported in the VO/Vulcan dialect
  • -
    - Runtime - -
  • Removed DWORD overloads for Array indexers
  • -
  • Fixed overload problem for ErrString()
  • -
  • Fixed overload problem for _DebOut()
  • -
  • Fixed problems in DTOC() and Date:ToString()
  • -
  • Fixed ASort() incompatibilities with VO
  • -
  • Fixed memory blocks now get filled with 0xFF when they are released to help detect problems
  • -
    - Visual Studio - -
  • Fix 'Hang' in VS2017 when building
  • -
  • Fix 'Hang' in VS2017 when a tooltip (QuickInfo) was displayed
  • -
  • Fixed problem with debugging x64 apps
  • -
  • You can no longer rename or delete the Properties folder
  • -
  • Selecting 'Open' from the context menu on the the Properties folder now opens the project properties screen
  • -
  • Updated several icons in the Project Tree
  • -
  • Enhancements in the Goto Definition
  • -
    - Build System - -
  • Fix problem with CRLF in embedded resource commandline option
  • -
    - - - Changes in 2.0.0.1 (Bandol Beta 1) - Compiler - New features - -
  • Added support for ARRAY OF language construct. See the Runtime chapter  for more information about this.
  • -
  • Added support for the X# Runtime assemblies when compiling in the VO or Vulcan dialects.
  • -
  • Added support for the "Pseudo" function ARGCOUNT() that returns the # of declared parameters in a function/method compiled with clipper calling convention.
  • -
  • Added a new warning number for assigning values to a foreach local variable. Assigning to USING and FIXED locals will generate an error.
  • -
    - Optimizations - -
  • Optimized the code generation for Clipper calling convention functions/methods
  • -
  • The /cf and /norun compiler options are no longer supported
  • -
  • The preprocessor no longer strips white space. This should result in better error messages when compiling code that uses the preprocessor.
  • -
  • Some parser errors are now more descriptive
  • -
  • Changed the method that is used to determine if we compile against CLR2 or CLR4. The compiler checks at the location either system.dll or mscorlib.dll. When this location is in a path that contains "v2", "2.", "v3" or "3." then we assume we are compiling for CLR2. A path that contains "V4" or "4." is considered CLR4. The /clr commandline option for the compiler is NOT supported.
  • -
  • The preprocessor now generates an error when it detects recursive #include files.
  • -
    - Bug fixes - -
  • Fixed a problem when using the [CallerMemberAttribute] on parameters when compiling in Vulcan or VO Dialect
  • -
  • Abstract properties should no longer generate a warning about a body
  • -
  • You can now correctly use ENUM values as array indexes.
  • -
  • Fixed a problem for Properties with PUBLIC GET and PRIVATE SET accessors.
  • -
  • Fixed an issue where assigning an Interface to a USUAL required a cast to Object
  • -
  • Fixed an issue where IIF expressions with literal types were returning the wrong type (the L or U suffix was ignored)
  • -
  • Fixed an issue where the declaration LOCAL x[10] was not compiled correctly. This now compiles into a local VO Array with 10 elements.
  • -
    - Visual Studio Integration - -
  • Build 1.2.1 introduced a problem that could cause output files to be locked by the intellisense engine. This has been fixed
  • -
  • The editor parser had problems with nested types. This has been fixed
  • -
  • Enum members were not included in code completion for enums inside X# projects
  • -
  • Some improvements in the code reformatting
  • -
  • Added option on the Tools/Options for the editor to include keywords in the "All tokens" completion list
  • -
    - -
  • Fixed a problem where assemblies that could not be loaded to retrieve meta information would be retried 'for ever'
  • -
  • Fixed a problem with retrieving type information from assemblies that contained both managed and unmanaged code.
  • -
  • Added some properties for referenced assemblies to the IDE Properties window
  • -
  • Fixed a problem with assembly references and the Windows Forms editor, introduced in one of the latest Visual Studio 2017 updates
  • -
  • When enabling XML output on the Project Properties window an incorrect filename was shown for assemblies that contain a '.'in the assembly name.
  • -
  • The editor parser now has better support for parameters of type REF and OUT
  • -
  • Added support for 'Embed Interop Types' in the property windows for Assembly References and COM references
  • -
  • Fixed a problem where the codemodel was sometimes locking output DLLs for Project references
  • -
    - Build System - -
  • Fixed a problem with the naming of the XML documentation file.
  • -
    - Runtime - -
  • Added XSharp.Core.DLL, XSharp.VO.DLL and XSharp.Macrocompiler.DLL.
    Most runtime functions are implemented and supported. See the X# Runtime chapter for more information
  • -
    - VO XPorter - -
  • SDK related options have been removed. They will be moved to a new tool later.
  • -
    - - - Changes in 1.2.1 - Compiler - -
  • Fixed a problem where a compilation error resulted in the message "Failed to emit module" without further information
  • -
  • Fixed a problem with ++, -- += and similar operations in aliased expressions (like CUSTOMER->CUSTNO++)
  • -
  • Constructor initializers and Collection initializers were not working after a constructor with parameters. That has been fixed.
  • -
  • Fixed an issue with negative literal values stored in a USUAL when overflow checking was enabled.
  • -
  • For the CATCH clause now both the ID and the TypeName are optional. This means that there are 4 variations.
    You can only have one catch clause without type, since this defaults to the System.Exception type. However, you can have many catch clauses without ID.
  • -
    -   CATCH ID AS ExceptionType
      CATCH ID                  // defaults to Exception type
      CATCH AS ExceptionType  
      CATCH            // defaults to Exception type
    - Visual Studio Integration - -
  • Improved the speed of the background code scanning
  • -
  • Improved the speed of the background parser inside the editor
  • -
  • Fixed a problem in the codedom provider that is used by the windows forms editor
  • -
    - - - Changes in 1.2.0 - Compiler - -
  • You can now pass NULL for parameters declared by reference for compatibility with VO & Vulcan.
    We STRONGLY advise not to do this, unless you make sure that the function expects this and does not assign to the reference parameter without checking for a NULL reference first. This will only work when the /vo7 compiler option is enabled.
  • -
  • We have made some optimizations in the Lexer. The compiler should be a little faster because of that
  • -
  • We fixed a problem with the automatic constructor generation (/vo16) for classes that inherit from classes defined in an external DLL
  • -
  • When compiling with /vo2 any string fields assigned in a child class before the super constructor was called would be overwritten with an empty string. The generated code will now only assign an empty string when the string is NULL.
    Note: we do not recommend to assign parent fields in the child constructor before calling the super constructor. Manually coded default values for parent fields will still overwrite values assigned in the child constructor before the SUPER call
  • -
  • Fixed a problem with CHECKED() and UNCHECKED() syntax in the VO dialect
  • -
  • Fixed a problem with choosing overloads for methods where an overload exists with  a single object parameter and also an overload with an object[] parameter.
  • -
  • Added support to the parser for LOCAL STATIC syntax
  • -
  • Fixed a problem with compiler option /vo9 (Allow missing return values) and procedures or methods that return VOID
  • -
  • Improved debugger sequence point generation. The compiler no longer generates 'hidden' breakpoint information for startup and closedown code in the VO/Vulcan dialects, and for expression statements no longer a double step is necessary.
  • -
  • ACCESS and ASSIGN for partial classes could generate error messages without source file name. This has been solved.
    The compiler now generates slightly different code for these "partial" properties.
    The Access and Assign are implemented as compiler generated methods and the property getter and property setter now call these methods.
  • -
  • The compiler was not recognizing the _WINCALL calling convention. This has been fixed.
  • -
  • The compiler now generates a warning when the #pragma command is used
  • -
    - Visual Studio Integration - -
  • More performance improvements in the editor. Especially large source files with incorrect code could slow down the editor.
  • -
  • The editor parser no longer tries to parse include files repeatedly when these files contain #defines only (like the Vulcan header files)
  • -
  • The source code editor tried to show intellisense for words in a comment region. That has been fixed.
  • -
  • We have started work on Object Browser and Class Browser.
  • -
  • Opening and closing of projects should be slightly faster
  • -
  • The internal code model used by the editors now disposes its loaded information when projects are closed and no projects need this information anymore. This should reduce the memory usage of the X# project system
  • -
  • Matching keywords, such as IF .. ENDIF and FOR .. NEXT should now be highlighted in the editor
  • -
  • If you select an identifier in the editor then that identifier will be highlighted in the current method/function on all places where it is used
  • -
  • We have added several features that you need to enable/disable on the Tools/Options/Text Editor/XSharp/Intellisense dialog:
  • - -
  • The code completion in the editor also supports instance member completion when a dot is pressed.
    Please note that the compiler ONLY accepts this in the Core language, not in the VO & Vulcan dialect. So the option has no effect inside projects with other dialects.
  • -
  • We have added some options to control the sorting of the DropDown comboboxes in the editor, as well as if fields/instance variables should be included in these comboboxes. When you do not sort, then the entries in the dropdown box will be shown in the order in which they are found in the source file.
  • -
  • We have added the option to autocomplete identifiers when typing. This includes locals, parameters, class fields, namespaces, types etc.
  • -
    -
    - -
  • Overridden methods in subclasses with the same signature as the parent methods they override are no longer counted as overloads in completionlists
  • -
  • A missing reference DLL could "kill" the intellisense engine. This no longer happens. Of course the type info from a missing referenced DLL is not included.
  • -
  • Properties and methods in the generated source files for XAML code (the .g.prg files in the OBJ folder) are now also parsed and included in the completion lists in intellisense and in the Class Browser and Object Browser windows.
  • -
    - VOXPorter - -
  • The installer now includes the correct version of VOXPorter <g>
  • -
  • VOXporter now supports the following commandline options:
    /s:<source folder or aef>
  • -
    - /d:<destination folder> - /r:<runtime folder> - /nowarning - - -
  • Some code corrections were added for issues found in the GUI classes
  • -
  • The template files can now also be found when VOXPorter is run from a different working directory
  • -
    - - - Changes in 1.1.2 - Compiler - -
  • Added compiler warning for code that contains a #pragma
  • -
  • Fixed a problem with iif() functions and negative literal values
  • -
    - Visual Studio Integration - -
  • Fixed a slowness in the editor after typing a send (: ) operator
  • -
  • Enum values are now properly decoded in the debugger
  • -
  • Fixed the CodeDom provider for handling literal FALSE values and negative numbers. As a result, more (Vulcan created) winforms should open without problems
  • -
  • Some positional keywords (such as ADD and REMOVE) are no longer colored as keyword in the editor for incomplete code when they appear after a colon ‘:’ or dot ‘.’;
  • -
    - VOXPorter - -
  • Fixes for exporting the VO RDD Classes from the SDK
  • -
    - - - - Changes in 1.1.1 - Compiler - -
  • Fixed a problem with Debugger Breakpoints for DO CASE and OTHERWISE
  • -
  • Fixed a problem with Debugger Breakpoints for sourcecode that is defined in #included files
  • -
  • Added support for the Harbour Global Syntax where the GLOBAL keyword is optional
  • -
  • Fixed a problem with FOR.. NEXT loops with negative step values
  • -
  • In some situations the @@ prefix to avoid keyword conflicts was not removed from workarea names or field names. This has been fixed
  • -
  • In the VO/Vulcan dialect a warning (XS9015) was generated when a default parameterless SUPER constructor call was automatically generated. This error message is now suppressed. However a generated SUPER constructor call with parameters still generates a warning.
  • -
  • Prepared the compiler for Xbase type names and function names in the XSharp Runtime
  • -
    - Preprocessor - -
  • Fixed a crash in the preprocessor
  • -
  • The preprocessor was generating an error "Optional block does not contain a match marker" for blocks without match marker. This is now allowed.
    (for example for the ALL clause in some of the Database UDCs )
  • -
  • When the same include files was used by multiple source files, and different sections of this file were included because of different #ifdef conditions, then the preprocessor would get "confused". This has been fixed.
  • -
  • Debugger file/line number information from source code imported from #include files is not processed correctly.
  • -
    - Visual Studio Integration - -
  • Fixed several issues with the Windows Form Editor
  • -
  • The class declaration generated by the VO compatible editors now included the PARTIAL modifier.
  • -
    - - - Changes in 1.1 - Compiler - -
  • Fixed a problem with Codeblocks used in late bound code after the release of X# 1.0.3
  • -
  • Fixed a problem with overriding properties in a subclass that inherit from a class where only the Assign (Set) or Access (Get) are defined.
  • -
  • The compiler option /vo16: automatically generate VO Clipper constructors has been implemented.
  • -
  • Fixed a crash in the compiler for compiler errors that occur on line 1, column 1 of the source file
  • -
  • Fixed a problem where overflow checking was not following the /ovf compiler option
  • -
  • Fixed problem with public modifier for interface methods
  • -
  • Added proper error message with unreachable fields in external DLLs
  • -
  • Fixed a problem with debugger sequence points (debugger stepping)
  • -
  • X# generated pdb files are now marked with the X# language GUID so they are recognized as X# in the VS debugger
  • -
  • DATETIME (26)  and DECIMAL (27) are added as UsualType to the compiler in preparation of the X# runtime that allows usuals of these types
  • -
  • Compiler options /VO15 and /VO16 now produce an error message when used outside the VO/Vulcan dialect
  • -
  • Methods declared outside a class (VO style code) would declare a private class and not a public class
  • -
  • ASTYPE has been changed to a positional keyword
  • -
  • Fixed a problem with the Chr() and _Chr() functions for literal numbers > 127
  • -
  • Added support for the __CLR2__ and __CLR4__ compiler macros. The version is derived from the folder name of mscorlib.dll and/or system.dll
  • -
  • The Codeblock syntax was not working in the Core dialect.
  • -
  • Some new keywords, such as REPEAT, UNTIL, CATCH, FINALLY,VAR, IMPLIED, NAMESPACE, LOCK, SCOPE, YIELD, SWITCH etc are now also positional and will only be recognized as keyword when at the start of a line or after a matching other keyword.
    This should help prevent cryptic error messages when these keywords are used as function names.
  • -
    - Visual Studio - Source code editor - -
  • Added Goto Definition for Functions and Procedures
  • -
  • Improved Info tips for Functions and Procedures
  • -
  • Improved case synchronization
  • -
  • Added first version of smart indenting
  • -
  • Fixed lookup problems in the intellisense engine that could lock up VS
  • -
  • Compiler Generated types are now suppressed from the completion lists.
  • -
  • Added partial support for intellisense for LOCAL IMPLIED and VAR variables
  • -
  • Added support for Format Document. This also sets the case for identifiers according to the tools defined in the Tools/Options menu
  • -
  • Performance improvements for the background file scanner. This scanner is also paused during the build process to improve the compilation speed.
  • -
    - Project System and MsBuild - -
  • Fixed a problem in the project files with conditioned property groups. Existing projects will be updated automatically
  • -
  • Added support for the /vo16 compiler option in MsBuild and the VS Project Property pages.
  • -
  • Fixed a problem with the /nostddef compiler option which was not working as expected.
  • -
  • Fixed a problem which would occur when entering resources or settings in the project property dialog
  • -
  • Fixed a problem with the /nostdlib compiler option
  • -
  • License.Licx files are now added as "Embedded Resource"
  • -
  • Fixed a problem with the automatic adding of License files
  • -
  • When a project has a "broken reference" and a new reference is added with the correct location, then the broken reference will be deleted and the new references will be added instead.
  • -
  • The MSBuild support DLL was unable to find the location of the compiler and native resource compiler when running inside a 64 bit process
  • -
    - Form Editor - -
  • Improved Windows Form Editor support for types defined in project references. We will now detect the location of the output files for these projects, like the C# and VB project systems.
  • -
  • The Code parser for the Form Editor was having problems with untyped methods. This has been fixed.
  • -
    - VO Window and Menu Editor - -
  • The code generator for the Window and Menu editor will delete old unused defines.
  • -
  • Changed the item template for VO windows to fix a problem when adding an event handler to a window that has not been saved yet
  • -
  • The code generator for the Window editor was not outputting a style for WS_VISIBLE. This has been fixed.
  • -
    - Debugger - This build introduces a first version of the XSharp debugger support - -
  • The Visual Studio debugger now shows the language X# in the callstack window and other places
  • -
  • Functions, Methods and procedures are now displayed in the X# language style in the callstack window
  • -
  • Compiler generated variables are no longer shown in the locals list
  • -
  • The locals list now shows SELF in stead of this
  • -
  • X# predefined types such as WORD, LOGIC etc are shown with their X# type names in the locals window
  • -
    - Testing - -
  • Added support for the Test Explorer window
  • -
  • Added templates for unit testing with XUnit, NUnit and Microsoft Test
  • -
    - Other - -
  • Added warning when Vulcan was (re)installed after XSharp, which could cause a problem in the Visual Studio integration
  • -
  • The VS Parser was marking Interfaces as structure in stead of interface. This has been fixed.
  • -
  • The tool XPorter tools have better names in the VS Tools Menu
  • -
  • The VS Background parser gets suspended while looking up type information to improve the intellisense speed
  • -
  • Several changes were made to the templates that come with X#
  • -
    - XPorter - -
  • Fix problem in propertygroup conditions.
  • -
    - VOXPorter - -
  • Generate clipper constructors is now disabled by default
  • -
  • Fixed a problem in the VS Template files.
  • -
    - - - Changes in 1.0.3 - Compiler - -
  • Fixed a problem with the index calculation for Vulcan Arrays indexed with a usual argument
  • -
  • Fixed a problem with the generation of automatic return values for code that ends with a begin sequence statement or a try statement
  • -
  • Optimized the runtime performance for literal symbols.
    The compiler now generates a symbol table for the literal symbols and each literal symbol used in your app is only created once.
    You may experience a little delay at startup if your app uses a LOT (thousands) of literal symbols. But the runtime performance should be better.
  • -
  • Added a compiler error for code where numerics are casted to an OBJECT with the VO compatible _CAST operator.
    This is no longer allowed:
    LOCAL nValue as LONG
    LOCAL oObject as OBJECT
    nValue := 123
    oObject := OBJECT(_CAST, nValue)
  • -
    - - - Changes in 1.0.2 - Compiler - -
  • Added support for XML doc generation. We support the same tags that the C# compiler and other .Net compiler support.
  • -
  • Improved some parser errors.
  • -
  • Created separate projects for portable and non portable (.Net framework 4.6) for the compiler and scripting
  • -
  • Fixed the code generation for conversion from USUAL to a known type. Now the same error is generated that Vulcan produces when the object type in the usual does not match the type of the target variable
  • -
  • When declaring a type with the same name as the assembly now a compiler error is generated with a suggested work around.
  • -
  • Fixed a strange compiler message when using a PTR() operation on a method call
  • -
  • Indexed access to bytes in a PSZ is now 1 based like in VO when the VO dialect is used. The Vulcan dialect needs 0 based index access like Vulcan.
  • -
  • The error message for compound assignments of FLOAT and USUAL has been removed. The compiler now contains a workaround for the problem in the Vulcan Runtime
  • -
  • For ambiguous code where the compiler has to choose between a Function call and a static method call in any other class, the compiler now chooses the function call over the method call (Vo and Vulcan dialect). The warning will still be generated.
  • -
  • When passing a variable by reference with the @ sign the compiler will now check to see if the declared type of the function/method parameter matches the type of the local variable.
  • -
  • Some compiler warnings for unused variables were being suppressed in the VO/Vulcan dialect. They are activated again.
  • -
    - Scripting - -
  • The scripting was not working in release 1.01
  • -
    - Visual Studio Integration - -
  • QuickInfo could generate a 'hang' in the VS editor. This has been fixed
  • -
  • Added quickinfo for globals and defines
  • -
  • Added completionlists for globals and defines
  • -
  • Added VO Form editor to edit vnfrm/xsfrm files and generate the code and resources
  • -
  • Added VO Menu editor to edit vnmnu/xsmnu files and generate the code and resources
  • -
  • Added VO DbServer editor and VO Fieldspec editor to edit vndbs/xsdbs and vnfs/xsfs files and generate the code and resources
  • -
  • Added keyword and identifier case synchronization.
  • -
  • Fixed a problem where typing SUPER( in the editor could throw an exception
  • -
  • Prebuild and Postbuild entries in the project file are now configuration specific
  • -
  • Added support for XML Doc generation in the project system
  • -
  • Fixed a 'hang' that could occur with Visual Studio 2017 version 15.3 and later
  • -
    - VO Xporter - -
  • Fixed a problem when importing certain VO 2.7 AEF files
  • -
  • Fixed a problem with acceptable characters in the solution folder name
  • -
  • VO Form and menu entities are also included in the xsproj file
  • -
  • Added an option to the INI files to specify the Vulcan Runtime files location ()
  • -
    - - - Changes in General Release (1.0.1.1) - Compiler - -
  • Fixed a problem with VERY old versions of the Vulcan Runtime
  • -
  • Variables declared as DIM Byte[] and similar are now Pinned by the compiler
  • -
  • [Return] attribute was not properly handled by the compiler. This has been fixed
  • -
  • Compound Assignment (u+= f or -=) from USUAL and FLOAT were causing a stackoverflow at runtime caused by a problem in the Vulcan Runtime. These expressions now generate a compiler error with the suggestion to change to a simple assignment ( u := u + f)
  • -
    - Visual Studio Integration - -
  • Project References between XSharp Projects were also loaded as assemblyreference when resolving types. This could lead to speed problems and unnecessary memory usage
  • -
  • Improved the speed of the construction of Completion Lists (such as methods and fields for a type).
  • -
  • We have also added Completion List Tabs, where you can see fields, properties, methods etc. on separate tabs. You can enable/disable this in the Tools/Options/Text Editor/XSharp/Intellisense options page.
  • -
    - VO XPorter - -
  • We have added a check to make sure that the default namespace for a X# project cannot contain a whitespace character
  • -
    - - - Changes in General Release (1.0.1) - New Features - -
  • We have added support for ENUM Basetypes (ENUM Foo AS WORD)
  • -
  • We have added a separate syntax for Lambda Expressions
  • -
  • We have added support for Anonymous Method Expressions
  • -
  • Typed local variables can now also be used for PCALL() calls
  • -
  • Methods with the ExtensionAttribute and Parameters with the ParamArrayAttribute attributes now compile correctly, but with a warning
  • -
    - Compiler - -
  • Fixed a problem with a late bound assign of a literal codeblock
  • -
  • Resolved several name conflicts
  • -
  • Improved several of the error messages
  • -
  • Fixed compilation problem for Properties with only a SET accessor
  • -
  • Fixed a crash in a switch block with an if .. endif statement
  • -
  • Fix problem with virtual instance methods and structures
  • -
  • Fixed name conflict foreach variables used in Array Literals
  • -
  • Changed resolution for Functions and static methods with the same name.
    In the VO/Vulcan dialect functions take precedence over static methods. If you want to call the static method then then you need to prefix the method call with the classname.
  • -
  • There is a separate topic in this documentation now that describes the syntax differences and similarities between Codeblocks, Lambda Expressions and Anonymous Method Expressions.
  • -
  • Fixed incorrect error message for Start() function with wrong prototype.
  • -
  • When an ambiguity is detected between a function and a static method then a warning is displayed
  • -
    - Visual Studio - -
  • Added parameter tips for Functions and methods from "Using Static" classes
  • -
  • Added parameter tips for Clipper Calling Convention functions and methods
  • -
  • Added support for generics in Intellisense
  • -
  • Intellisense will show keywords in stead of native type names (WORD in stead of System.UInt16 for example)
  • -
  • Parameter tips are now shown when a opening '(' or '{' is typed as well as when the user types a comma ','.
  • -
  • Parameter tips will show REF OUT and AS modifiers
  • -
  • Added intellisense for COM references, both for normal COM references as well as for Primary Interop Assemblies. Also members from implemented interfaces are now included in intellisense code completion (this is very common for COM).
  • -
  • Improved intellisense for Project References from other languages, such as C# and VB.
  • -
  • Added intellisense for Functions in referenced projects and referenced Vulcan and/or X# assemblies
  • -
  • Suppress "special type names" in intellisense lists
  • -
  • Added support for "VulcanClassLibrary" attribute to help find types and functions
  • -
  • Errors from the Native Resource compiler are now also included in the error list
  • -
  • Fixed problem with parameter tips for Constructors
  • -
  • Added memberlist support for X# type keywords such as STRING, REAL4 etc.
  • -
  • Fixed several issues with the Windows Form editor in relation to ActiveX controls
  • -
  • Added a menu option to start the VO Xporter tool
  • -
  • Added background scanning for dependent items, to make sure that newly generated code is scanned and available for intellisense.
  • -
  • Several changes to the Windows Forms editor and project system:
  • - -
  • Added support for adding ActiveX controls
  • -
  • Added support for Form Inheritance. Our forms are also visible in the C# Inherited form wizard
  • -
  • Added support to add our Windows Forms Custom Controls to the ToolBox in Visual Studio
  • -
  • Some performance enhancements in the Codedom Parser that is used by the Windows Form Editor. You should notice this for larger forms.
  • -
    -
    - -
  • Fixed several crashes reported by users
  • -
  • Native Resource files (.rc) now open in the Source code editor
  • -
  • Improved background parsing speed
  • -
  • Improved keyword colorization speed
  • -
  • Improved handling of Type and Member dropdowns in the editor
  • -
    - Tools - -
  • Added a first version of the VO Xporter tool
  • -
  • The installer now registers .xsproj files, .prg, .ppo. .vh, .xh and .xs files so they will be opened with Visual Studio
  • -
    - Documentation - -
  • We have added some chapters on how to convert your VO AEF and/or PRG files to a XIDE project and/or a Visual Studio solution.
  • -
    - - - Changes in 0.2.12 - Scripting - -
  • We have added the ability to use X# scripts. Some documentation about how this works can be found here. You can also find scripting examples in the
    c:\Users\Public\Documents\XSharp\Scripting folder
  • -
    - Compiler - All dialects - -
  • The compiler is now based on the Roslyn source code for C# 7.
  • -
  • Accesses and Assigns with the same name for the same (partial) class in separate source files are now merged into one property. This will slow down the compiler somewhat. We recommend that you define the ACCESS and ASSIGN in the same source file.
  • -
  • Added support for repeated result markers in the preprocessor
  • -
  • We have added the compiler macro __DIALECT_HARBOUR__
  • -
  • Fixed the name resolution between types, namespaces, fields, properties, methods, globals etc. The core dialect is very close to the C# rules, the other dialect follows the VO rules.
  • -
  • Some warnings for ambiguous code have been added
  • -
  • _Chr() with untyped numeric values would crash. This has been fixed.
  • -
  • We made some changes to the character literal rules. For the VO and Harbour dialect there are now other rules then for Core and Vulcan. See the help topic for more information
  • -
    - VO and Vulcan Dialect - -
  • Several VO compatibility issues have been fixed
  • -
  • The QUIT, ACCEPT, WAIT, DEFAULT TO and STORE command are now removed from the compiler and defined in our standard header file "XSharpDefs.xh" which is located in the \Program Files(x86)\XSharp\Include folder. These commands are not compiled in the core dialect
  • -
  • Added support for CONSTRUCTOR() CLASS MyClass and DESTRUCTOR CLASS MyClass (in other words, outside the CLASS .. ENDCLASS construct
  • -
    - -
  • The # (not equal) operator is now recognized when used without space before the keywords NIL, NULL_STRING, NULL_OBJECT etc. so #NIL is not seen as the symbol NIL but as Not Equal To NIL
  • -
  • SizeOf and _TypeOf were special tokens in VO and could not be abbreviated. We have changed the X# behavior to match this. This prevents name conflicts with variables such as _type.
  • -
  • We have added support for DLL entrypoints with embedded @ signs, such as "CAVOADAM.AdamCleanupProtoType@12"
  • -
  • (DWORD) (-1) would require the unchecked operator. This is now compatible with Vulcan and generates a DWORD with the value System.Uint32.MaxValue.
  • -
  • STATIC VOSTRUCT now gets compiled as INTERNAL VOSTRUCT. This means that you cannot have the same structure twice in your app. Why would you want to do that ?
  • -
  • Fixed several cases of "incorrect" code that would be compiled by VO, such as a codeblock that looks like:
    cb := { |x|, x[1] == 1 }
    Note the extra comma.
    This now compiled into the same codeblock as:
  • -
    - cb := { |x| x[1] == 1 } - -
  • The /vo16 compiler option has been disabled for now (does not do anything) because it had too many side effects.
  • -
    - Visual Studio Integration - -
  • Deleted files and folders are moved them to the Trash can.
  • -
  • Fixed an intellisense problem in the XAML editor
  • -
  • Added support for Code Completion between different X# projects
  • -
  • Added support for Code Completion and other intellisense features for source code in VB and C# projects
  • -
  • Added support for parameter info
  • -
    - Documentation - -
  • We have added (generated) topics for all undocumented compiler errors. Some topics only contain the text that is shown by the compiler. More documentation will follow. Also some documentation for the X# Scripting has been added.
  • -
    - - - Changes in 0.2.11 - Compiler - All dialects - -
  • Improved some error messages, such as for unterminated strings
  • -
  • Added support for the /s (Syntax Check only) command line option
  • -
  • Added support for the /parseonly command line option which is used by the intellisense parser
  • -
    - -
  • Added some compiler errors and warnings for invalid code
  • -
  • The preprocessor did not properly handle 4 letter abbreviations for #command and #translate. This has been fixed
  • -
  • Fixed some problems found with the preprocessor
  • -
  • We switched to a new Antlr parser runtime. This should result in slightly better performance.
  • -
  • Changed the way literal characters and strings are defined:
  • - -
  • In the Vulcan dialect a literal string that is enclosed with single quotes is a char literal. Double quotes are string literals
  • -
  • In the Core and VO dialect a literal string that is enclosed with single quotes is a string literal. Double quotes are also string literals.
    To specify a char literal in Core and VO you need to prefix the literal with a 'c':
  • -
    -
    - -      LOCAL cChar as CHAR
         cChar := c'A'
    - -
  • Changed the way literal characters and strings are defined:
  • -
  • sizeof() and _sizeof() no longer generate a warning that they require 'unsafe' code, when compiling for x86 or x64. When compiling for AnyCpu the warning is still produced.
  • -
  • When the includedir environment variable was not set then the XSharp\Include folder would also not be found automatically.
  • -
    - VO/Vulcan Compatibility - -
  • Added /vo16 compiler option to automatically generate constructors with Clipper calling convention for classes without constructor
  • -
    - Harbour Compatibilty - -
  • Started work on the Harbour dialect. This is identical with the VO/Vulcan dialect. The only difference so far is that the IIF() expressions are optional
  • -
    - Visual Studio - New features / changed behavior: - -
  • Added Brace Matching
  • -
  • Added Peek definition (Alt-F12)
  • -
  • All keywords are not automatically part of the Completionlist
  • -
  • Fixed a member lookup problem with Functions and Procedures inside a Namespace
  • -
  • Increased background parser speed for large projects
  • -
  • Fixed type lookup for fields and properties from parent classes
  • -
  • Fixed problem where CSharp projects could not find the output of a XSharp project reference
  • -
  • The Intellisense parser now properly used all current projects compiler options.
  • -
  • Prevent crashes when the X# language buffer is fed with "garbage" such as C# code
  • -
    - Installer - -
  • The local template cache and components cache for VS2017 was not cleared properly this has been fixed.
  • -
  • Added code to properly unregister an existing CodeDomProvider when installing
  • -
    - Documentation - -
  • Several empty chapters are now hidden.
  • -
  • Added description of the templates
  • -
    - - - Changes in 0.2.10 - This build focuses on the last remaining issues in the VO and Vulcan compatibility and adds a lot of new features to the Visual Studio integration. - Compiler - VO/Vulcan Compatibility - -
  • We have completed support for the DEFINE keyword. The type clause is now optional. The compiler will figure out the type of the define when no type is specified.
    The DEFINEs will be compiled to a Constant field of the Functions class, or a Readonly Static field, when the expression cannot be determined at compile time (such as for Literal dates or symbols).
  • -
  • We have extended the preprocessor . It now has support for #command, #translate, #xcommand and #xtranslate. Also "Pseudo function" defines are supported, such as :

    #define MAX(x,y) IIF((x) > (y), (x), (y))

    This works just like a #xtranslate, with the exception that the define is case sensitive (unless you have enabled the "VO compatible preprocessor" option (/vo8).
    The only thing that is not working in the preprocessor is the repeated result marker.
  • -
  • In VO/Vulcan mode the compiler now accepts "garbage" between keywords such as ENDIF and NEXT and the end of the statement, just like the VO compiler.
    So you no longer have to remove "comment" tokens after a NEXT or ENDIF. This will compile without changes in the VO and Vulcan dialect:

      IF X == Y
          DoSomething()
      ENDIF X == Y
    or
      FOR I := 1 to 10
         DoSomething()
      NEXT I
    We do not recommend this coding style, but this kind of code is very common...
  • -
  • Fixed an issue with recognition of single quoted strings. These were always recognized as CHAR_CONST when the length of the string was 1. Now they are treated as STRING_CONST and the compiler backend has been adjusted to convert the STRING literals to CHAR literals when needed.
  • -
  • In VO and Vulcan dialect when the compiler option /vo1 is used then RETURN statements without value or with a return value of SELF are allowed for the Init() and Axit() methods. Other return values will trigger a compiler warning and will be ignored.
  • -
    - New features / changed behavior: - -
  • The compiler now produces an error when a source file ends with an unterminated multi line comment
  • -
  • Added ASTYPE expression, similar to the AS construct in other languages. This will assign a value of the correct type or NULL when the expression is not of the correct type:
  • -
    - VAR someVariable := <AnExpression> ASTYPE <SomeType>
    - -
  • The Chr() and _Chr() functions are now converted to a string or character literal when the parameter is a compile time constant
  • -
  • Compilation speed for assemblies with larger numbers of functions, procedures, defines, globals or _dll functions has been improved.
  • -
  • _DLL FUNCTIONS now automatically are marked with CharSet.Auto
  • -
  • Fixed some inconsistencies between Colon (:) and Point (.) interoperability and the super keyword
  • -
  • Fixed several compiler issues reported by FOX subscribers and other users.
  • -
    - Visual Studio - New features / changed behavior: - -
  • Tested and works with the release version of Visual Studio 2017
  • -
    - -
  • We have added support for regions inside the VS editor. At this moment most "entities" are collapsible as well as statement blocks, regions and lists of usings, #includes and comments.
  • -
  • We have added support for member and type drop downs in the VS Editor
  • -
  • We have added support for Code completion in the VS editor
  • -
  • We have added support for Goto definition in the VS Editor
  • -
  • Errors detected by the intellisense scanner are now also included in the VS error list.
  • -
  • We have added help links to the errors in the VS error list. The help links will bring you to the appropriate page on the X# website. Not all the help pages are complete yet, but at least the infrastructure is working.
  • -
  • We have added support for snippets and included several code snippets in the installer
  • -
  • We have made several changes to the project properties dialogs
  • - -
  • The pre and post build events are now on a separate page for the Project Properties. These are now also not defined per configuration but are shared between the various configurations.
    If you want to copy output results to different folders for  different configurations you should use the $(Configuration) and $(Platform) variables
  • -
  • We have  moved the Platform and Prefer32Bits properties to the Build page to make them configuration dependent
  • -
  • Fixed a problem with casing of the AnyCPU platform which would result in duplicate items in the VS Platform combobox
  • -
  • Added support for ARM and Itanium platform types
  • -
  • Some properties were saved in project file groups without a platform identifier. This has been fixed
  • -
  • We have added a project property to control how Managed file resources are included:  Use Vulcan Compatible Managed Resources
    When 'True' then resources files are included in the assembly without namespace prefix. When 'False' then the resource files are prefixed with the namespace of the app, just like in other .Net languages, such as C#
  • -
    -
    - -
  • We have fixed some code generation problems
  • -
  • The parser that is used in the Windows Forms editor now also properly handles background images. Both images in the resx for the form and also background images in the shared project resources
  • -
  • We have added Nuget support for our project system.
  • -
  • We have made several changes to fix problems in project files
  • - -
  • The project system now silently fixes problems with duplicate items
  • -
  • Fixed a problem with dependencies between xaml files and their dependent designer.prg files and other dependent files
  • -
  • Fixed a problem with dependent items in sub folders or in a folder tree that includes a dot in a folder name.
  • -
  • Fixed a problem in the WPF template
  • -
    -
    - -
  • Fixed a refresh problem when deleting a references node
  • -
  • Added implementation of the OAProject.Imports property, which is used by JetBrains
  • -
    - XPorter - -
  • Fixed a problem converting WPF style projects
  • -
    - - - Changes in 0.2.9 - Compiler - With this build you can compile the Vulcan SDK without changes, except for some obvious errors in the Vulcan SDK that Vulcan did not find!
    We consider the Vulcan Compatibility of the compiler finished with the current state of the compiler. All Vulcan code should compile without proble now.
    - VO/Vulcan Compatibility - New features / changed behavior: - -
  • All Init procedures are now properly called at startup. So not only the init procedures in the VOSDK libraries but also init procedures in other libraries and the main exe
  • -
  • Changed the method and type resolution code:
  • - -
  • A method with a single object parameter is now preferred over a method with an Object[] parameter
  • -
  • When both a function (static method) exists and an instance method we will now call the static method in code inside methods that does not have a SELF: or SUPER: prefix.
  • -
  • In situations where the @ operator is used to pass variables by reference.
  • -
  • To make it more compatible with Vulcan for overloads with different numeric types.
  • -
  • To prefer a method with specific parameters over a method with usual parameters
  • -
  • To avoid problems with Types and Namespaces with the same name.
  • -
  • To prefer a method with an OBJECT parameter over the one with OBJECT[] parameters when only 1 argument is passed
  • -
  • When 2 identical functions or types are detected in referenced assemblies we now choose the one in the first referenced assembly like Vulcan does, and generate warning 9043
  • -
    -
    - -
  • The sizeof operator now returns a DWORD to be compatible with VO and Vulcan.
  • -
  • Added support for EXIT PROCEDURES (PROCEDURE MyProcedure EXIT). These procedures will automatically be called during program shutdown, just before all the global variables are cleared.
    The compiler now generates an $Exit function for each assembly in which the exit procedures will be called and the reference globals in an assembly will be cleared. In the main app a $AppExit() function is created that will call the $Exit functions in all references X# assemblies. When a Vulcan compiled assembly is referenced, then all the public reference globals will be cleared from the $AppExit() function.
  • -
  • Added support for PCALL and PCALLNATIVE
  • -
  • Added support for several Vulcan compatible compiler options:
  • - -
  • /vo1 Allow Init() and Axit() for constructor and destruction
  • -
  • /vo6 Allow (global) function pointers. DotNet does not "know" these. They are compiled to IntPtr. The function information is preserved so you can use these pointer in a PCALL()
  • -
  • /ppo. Save the preprocessed compiler output to a file
  • -
  • /Showdefs Show a list of the defines and their values on the console
  • -
  • /showincludes Show a list of the included header files on the console
  • -
  • /verbose Shows includes, source file names, defines and more. on the console
  • -
  • DEFAULT TO command
  • -
  • ACCEPT command
  • -
  • WAIT command
  • -
    -
    - -
  • Several code generation changes:
  • - -
  • Changed the code generation for DIM elements inside VOStruct arrays because the Vulcan compiler depends on a specific naming scheme and did not recognize our names.
  • -
  • Improved the code generation inside methods with CLIPPER calling convention.
  • -
    -
    - Bug fixes - -
  • Implicit namespaces are now only used when the /ins compiler option is enabled. In Vulcan dialect the namespace Vulcan is always included.
  • -
  • Fixed several problems with the @ operator and VOSTRUCT types
  • -
  • Fixed a problem with DIM arrays of VOSTRUCT types
  • -
  • Fixed a problem with LOGIC values inside VOSTRUCT and UNION types
  • -
  • Fixed several problems with the VOStyle _CAST and Conversion operators.
  • -
  • Fixed several numeric conversion problems
  • -
  • Fixed several problems when mixing NULL, NULL_PTR and NULL_PSZ
  • -
  • Fixed several problems with the _CAST operator
  • -
  • Fixed several problems with PSZ Comparisons. X# now works just like Vulcan and VO and produces the same (sometimes useless) results
  • -
  • Fixed a problem with USUAL array indexes for multi dimensional XBase Arrays
  • -
  • Fixed codeblock problems for codeblocks where the last expression was VOID
  • -
  • Changed code generation for NULL_SYMBOL
  • -
  • Preprocessor #defines were sometimes conflicting with class or namespace names. For example when /vo8 was selected the method System.Diagnostics.Debug.WriteLine() could not be called because the DEBUG define was removing the  classname. We have changed the preprocessor so it will no longer replace words immediately before or after a DOT or COLON operator.
  • -
  • Fixed a compiler crash when calling static methods in the System.Object class when Late Binding was enabled
  • -
  • Fixed String2Psz() problem inside PROPERTY GET and PROPERTY SET
  • -
  • And many more changes.
  • -
    - All dialects - New features / changed behavior: - -
  • Several code generation changes:
  • - -
  • The code generation for ACCESS and ASSIGN has changed. There are no longer separate methods in the class, but the content of these methods is now inlined in the generated Get and Set methods for the generated property.
  • -
  • Optimized the code generation for IIF statements.
  • -
  • The debugger/step information has been improved. The debugger should now also stop on IF statements, FOR statements, CASE statements etc.
  • -
    -
    - -
  • Indexed access to properties defined with the SELF keyword can now also use the "Index" property name
  • -
  • Functions and Procedures inside classes are not allowed (for now)
  • -
  • RETURN <LiteralValue> inside an ASSIGN method will no longer allocate a variable and produce an warning
  • -
  • Several keywords are now also allowed as Identifier (and will no longer have to be prefixed with @@ ):
    Delegate, Enum, Event, Field, Func, Instance, Interface, Operator, Proc, Property, Structure, Union, VOStruct and many more
    As a result the following is now valid code (but not recommended):

    FUNCTION Start AS VOID
      LOCAL INTERFACE AS STRING
      LOCAL OPERATOR AS LONG
      ? INTERFACE, OPERATOR
      RETURN
  • -
    - You can see that the Visual Studio language support also recognizes that INTERFACE and OPERATOR are not used as keywords in this context - Bug fixes - -
  • Fixed a problem with the REPEAT UNTIL statement
  • -
  • Fixed a crash for code with a DO CASE without a matching END CASE
  • -
  • Fixed several issues for the code generation for _DLL FUNCTIONs and _DLL PROCEDUREs
  • -
  • Fixed a problem (in the Roslyn code) with embedding Native Resources in the Assembly.
  • -
  • Fixed a problem with the _OR() and _AND() operators with more than 2 arguments.
  • -
  • Added support for Pointer dereferencing using the VO/Vulcan Syntax : DWORD(p) => p[1]
  • -
  • Fixed several problems with the @ operator
  • -
  • When two partial classes had the same name and a different casing the compiler would not properly merge the class definitions.
  • -
  • Fixed a crash when a #define in code was the same as a define passed on the commandline
  • -
  • Indexed pointer access was not respecting the /AZ compiler option (and always assumed 0 based arrays). This has been fixed
  • -
  • Fixed a problem with the caching of preprocessed files, especially files that contain #ifdef constructs.
  • -
  • Fixed a problem which could occur when 2 partial classes had the same name but a different case
  • -
  • Fixed a compiler crash when a referenced assembly had duplicate namespaces that were only different in Case
  • -
  • Fixed problems with Functions that have a [DllImport] attribute.
  • -
  • Error messages for ACCESS/ASSIGN methods would sometimes point to a strange location in the source file. This has been fixed.
  • -
  • Fixed a problem with Init Procedures that had a STATIC modifier
  • -
  • Fixed a problem in the preprocessor when detecting the codepage for a header file. This could cause problems reading header files with special characters (such as the copyright sign ©)
  • -
  • And many more changes.
  • -
    - Visual Studio Integration - -
  • Added support for all compiler options in the UI and the build system
  • -
  • Fixed problems with dependent file items in subfolders
  • -
  • The Optimize compiler option was not working
  • -
  • The 'Clean' build option now also cleans the error list
  • -
  • Under certain conditions the error list would remain empty even though there were messages in the output pane. This has been fixed.
  • -
  • The <Documentationfile> property inside the xsproj file would cause a rebuild from the project even when the source was not changed
  • -
  • Earlier versions of XPorter could create xsproj files that would not build properly. The project system now fixes this automatically
  • -
  • Fixed a problem with the build system and certain kind of embedded managed resources
  • -
    - - Documentation - -
  • We have added many descriptions to the commandline options
  • -
  • We have added a list of the most common compiler errors and warnings.
  • -
    - - - Changes in 0.2.8 - Compiler - VO/Vulcan Compatibility - -
  • Default Parameters are now handled like VO and Vulcan do. This means that you can also have date constants, symbolic constants etc as default parameter
  • -
  • String Single Equals rules are now 100% identical with Visual Objects. We found one case where Vulcan does not return the same result as Visual Objects. We have chosen to be compatible with VO.
  • -
  • When compiling in VO/Vulcan mode then the init procedures in the VO SDK libraries are automatically called. You do not have to call these in your code anymore
    Also Init procedures in the main assembly are called at startup.
  • -
  • The /vo7 compiler option (Implicit casts and conversions) has been implemented. This also includes support to use the @ sign for REF parameters
  • -
  • You can now use the DOT operator to access members in VOSTRUCT variables
  • -
  • We have fixed several USUAL - Other type conversion problems that required casts in previous builds
  • -
  • The compiler now correctly parses VO code that contains DECLARE METHOD, DECLARE ACCESS and DECLARE ASSIGN statements and ignores these
  • -
  • The compiler now parses "VO Style" compiler pragma's (~"keyword" as white-space and ignores these.
  • -
  • Fixed a problem where arrays declared with the "LOCAL aSomething[10] AS ARRAY" syntax would not be initialized with the proper number of elements
  • -
  • Fixed a problem when calling Clipper Calling Convention constructors with a single USUAL parameter
  • -
  • Attributes on _DLL entities would not be properly compiled. These are recognized for now but ignored.
  • -
  • Fixed several numeric conversion problems
  • -
    - New features - -
  • We have added support for Collection Initializers and Object Initializers
  • -
  • Anonymous type members no longer have to be named. If you select a property as an anonymous type member then the same property name will be used for the anonymous type as well.
  • -
  • Missing closing keywords (such as NEXT, ENDIF, ENDCASE and ENDDO) now produce better error messages
  • -
  • IIF() Expressions are now also allowed as Expression statement. The generated code will be the same as if an IF statement was used
  • -
    - FUNCTION IsEven(nValue as LONG) AS LOGIC
      LOCAL lEven as LOGIC
      IIF( nValue %2 == 0, lEven := TRUE, lEven := FALSE)
    RETURN lEven
    - We really do not encourage to hide assignments like this, but in case you have used this coding style,it works now <g>. - -
  • AS VOID is now allowed as (the only) type specification for PROCEDUREs
  • -
  • We have added a .config file to the exe for the shared compiler that should make it faster
  • -
  • The XSharpStdDefs.xh file in the XSharp is now automatically included when compiling. This file declares the CRLF constant for now.
  • -
  • Include files are now cached by the compiler. This should increase the compilation speed for projects that depend on large included files, such as the Win32APILibrary header file from Vulcan
  • -
  • When a function is found in an external assembly and a function with the same name and arguments is found in the current assembly, then the function in the current assembly is used by the compiler
  • -
  • Compiler error messages for missing closing symbols should have been improved
  • -
  • Compiler error messages for unexpected tokens have been improved
  • -
    - Bug fixes - -
  • Several command-line options with a minus sign were not properly handled by the compiler
  • -
  • Fixed several crashes related to assigning NULL_OBJECT or NULL to late bound properties have been fixed
  • -
  • Partial class no longer are required to specify the parent type on every source code location. When specified, the parent type must be the same of course. Parent interfaces implemented by a class can also be spread over multiple locations
  • -
  • We have fixed a crash that could happen with errors/warnings in large include files
  • -
  • Abstract methods no longer get a Virtual Modifier with /vo3
  • -
  • Fixed a problem with virtual methods in child classes that would hide parent class methods
  • -
  • Automatic return value generation was also generating return values for ASSIGN methods. This has been fixed.
  • -
  • We fixed a problem with the Join Clauses for LINQ Expressions that would cause a compiler exception
  • -
  • The /vo10 (compatible iif) compiler option no longer adds casts in the Core dialect. It only does that for the VO/Vulcan dialect
  • -
    - Visual Studio Integration - We have changed the way the error list and output window are updated. In previous version some lines could be missing on the output window, and the error code column was empty. This should work as expected now. - -
  • We have merged some code from some other MPF based project systems, such as WIX (called Votive), NodeJS and Python (PTVS) to help extend our project system. As a result:
  • - -
  • Our project system now has support for Linked files
  • -
  • Our project system now has support for 'Show All Files' and you can now Include and Exclude files. This setting is persisted in a .user file, so you can exclude this from SCC if you want.
  • -
  • We have made some changes to support better 'Drag and Drop'
  • -
    -
    - -
  • We have fixed several issues with regard to dependent items
  • -
  • When you include a file that contains a form or user control, this is now recognized and the appropriate subtype is set in the project file, so you can open the windows forms editor
  • -
  • We are now supporting source code generation for code behind files for .Settings and .Resx files
  • -
  • The combobox in the Managed Resource editor and Managed Settings tool to choose between internal code and public code is now enabled. Selecting a different value in the combobox will change the tool in the files properties.
  • -
  • The last response file for the compiler and native resource compiler are now saved in the users Temp folder to aid in debugging problems.
  • -
    - -
  • The response file now has each compiler option to a new line to make it easier to read and debug when this is necessary.
  • -
  • The code generation now preserves comments between entities (methods)
  • -
  • We fixed several minor issues in the templates
  • -
  • When the # of errors and warnings is larger than the built-in limit of 500, then a message will be shown that the error list was truncated
  • -
  • At the end of the build process a line will be written to the output window with the total # of warnings and errors found
  • -
  • The colors in the Source Code Editor are now shared with the source code editors for standard languages such as C# and VB
  • -
  • When you have an inactive code section in your source code, embedded in an #ifdef that evaluates to FALSE then that section will be visibly colored gray and there will be no keyword highlighting. The source code parser for the editor picks up the include files and respects the path settings. Defines in the application properties dialog and the active configuration are not respected yet. That will follow in the next build.
  • -
    - - - Changes in 0.2.7.1 - Compiler - -
  • The compiler was not accepting wildcard strings for the AssemblyFileVersion Attribute and the AssemblyInformationVersion attribute. This has been fixed
  • -
  • The #Pragma commands #Pragma Warnings(Push) and #Pragma Warnings(Pop) were not recognized. This has been fixed.
  • -
  • The compiler was not recognizing expressions like global::System.String.Compare(..). This has been fixed
  • -
    - Visual Studio Integration - -
  • Dependent items in subfolders of a project were not recognized properly and could produce an error when opening a project
  • -
  • Fixed a problem in the VulcanApp Template
  • -
  • The Windows Forms Editor would not open forms in a file without begin namespace .. end namespace. This has been fixed
  • -
  • Source code comments between 'entities' in a source file is now properly saved and restored when the source is regenerated by the form editor
  • -
  • Unnecessary blank lines in the generate source code are being suppressed
  • -
  • The XPorter tool is now part of the Installation
  • -
  • Comments after a line continuation character were not properly colored
  • -
  • Changed the XSharp VS Editor Color scheme to make certain items easier to read
  • -
  • New managed resource files would not be marked with the proper item type. As a result the resources would not be available at runtime. This has been fixed.
  • -
  • Added 'Copy to Output Directory' property to the properties window
  • -
    - Setup - -
  • The installer, exe files and documentation are now signed with a certificate
  • -
    - - - Changes in 0.2.7 - Compiler - New features: - -
  • Added support for the VOSTRUCT and UNION types
  • -
  • Added support for Types as Numeric values, such as in the construct
    IF UsualType(uValue) == LONG
  • -
  • Added a FIXED statement and FIXED modifier for variables
  • -
  • Added support for Interpolated Strings
  • -
  • Empty switch labels inside SWITCH statements are now allowed. They can share the implementation with the next label.
    Error 9024 (EXIT inside SWITCH statement not allowed) has been added and will be thrown if you try to exit out of a loop around the switch statement.
    This is not allowed.
  • -
  • Added support for several /vo compiler options:
    - vo8 (Compatible preprocessor behavior). This makes the preprocessor defines case insensitive. Also a define with the value FALSE or 0 is seen as 'undefined'
    - vo9 (Allow missing return statements) compiler option. Missing return values are also allowed when /vo9 is used.  
    Warnings 9025 (Missing RETURN statement) and 9026 (Missing RETURN value) have been added.
    - vo12 (Clipper Integer divisions)
  • -
  • The preprocessor now automatically defines the macros __VO1__ until __VO15__ with a value of TRUE or FALSE depending on the setting of the compiler option
  • -
  • The FOX version of the compiler is now distributed in Release mode and much faster. A debug version of the compiler is also installed in case it is needed to aid in finding compiler problems.
  • -
    - Changed behavior - -
  • The compiler generated Globals class for the Core dialect is now called Functions and no longer Xs$Globals.
  • -
  • Overriding functions in VulcanRTFuncs can now be done without specifying the namespace:
    When the compiler finds two candidate functions and one of them is inside VulcanRTFuncs then the function that is not in VulcanRTFuncs is chosen.
  • -
  • Warning 9001 (unsafe modifier implied) is now suppressed for the VO/Vulcan dialect. You MUST pass the /unsafe compiler option if you are compiling unsafe code though!
  • -
  • Improved the error messages for the Release mode of the compiler
  • -
    - Bug fixes - -
  • RETURN and THROW statements inside a Switch statement would generate an 'unreachable code' warning. This has been fixed
  • -
  • Fixed several problems with mixing signed and unsigned Array Indexes
  • -
  • Fixed several problems with the FOR .. NEXT statement. The "To" expression will now be evaluated for every iteration of the loop, just like in VO and Vulcan.
  • -
  • Fixed several compiler crashes
  • -
  • Fixed a problem with implicit code generation for constructors
  • -
  • Fixed a visibility problem with static variables inside static functions
  • -
    - Visual Studio Integration - -
  • Fixed a problem that the wrong Language Service was selected when XSharp and Vulcan.NET were used in the same Visual Studio and when files were opened from the output window or the Find Results window
  • -
  • Fixed some problems with 'abnormal' line endings in generated code
  • -
  • Fixed a problem in the Class Library template
  • -
  • Fixed a problem with non standard command lines to Start the debugger
  • -
    - - Changes in 0.2.6 - Compiler - -
  • Added alternative syntax for event definition. See EVENT keyword in the documentation
  • -
  • Added Code Block Support
  • -
  • Implemented /vo13 (VO compatible string comparisons)
  • -
  • Added support for /vo4 (VO compatible implicit numeric conversions)
  • -
  • Aliased expressions are now fully supported
  • -
  • Fixed a problem with the &= operator
  • -
  • Fixed several crashes for incorrect source code.
  • -
  • Fixed several problems related to implicit conversions from/to usual, float and date
  • -
  • Indexed properties (such as String:Chars) can now be used by name
  • -
  • Indexed properties can now have overloads with different parameter types
  • -
  • Added support for indexed ACCESS and ASSIGN
  • -
  • Fixed a problem when calling Clipper Calling Convention functions and/or methods with a single parameter
  • -
  • Fixed a crash with defines in the preprocessor
  • -
  • _CODEBLOCK is now an alias for the CODEBLOCK type
  • -
  • Fixed a crash for properties defined with parentheses or square brackets, but without actual parameters
  • -
    - Visual Studio Integration - -
  • Completed support for .designer.prg for Windows.Forms
  • -
  • Fixed an issue in the CodeDom generator for generating wrappers for Services
  • -
  • The XSharp Language service will no longer be used for Vulcan PRG files in a Side by Side installation
  • -
  • Editor performance for large source files has been improved.
  • -
  • All generated files are now stored in UTF, to make sure that special characters are stored correctly. If you are seeing warnings about code page conversions when generating code, then save files as UTF by choosing "File - Advanced Save Options", and select a Unicode file format, from the Visual Studio Menu.
  • -
    - - Changes in 0.2.51 - Visual Studio Integration & Build System - -
  • The Native Resource compiler now "finds" header files, such as "VOWin32APILibrary.vh" in the Vulcan.NET include folder. Also the output of the resource compiler is now less verbose when running in "normal" message mode. When running in "detailed" or "diagnostics" mode the output now also includes the verbose output of the resource compiler.
  • -
    - Compiler - -
  • Fixed a problem that would make PDB files unusable
  • -
  • The error "Duplicate define with different value" (9012) has been changed to warning, because our preprocessor does a textual comparison and does not "see" that "10" and "(10)" are equal as well as "0xA" and "0xa". It is your responsibility of course to make sure that the values are indeed the same.
  • -
  • Exponential REAL constants were only working with a lower case 'e'. This is now case insensitive
  • -
  • Made several changes to the _DLL FUNCTION and _DLL PROCEDURE rules for the parser. Now we correctly recognize the "DLL Hints " (#123) and also allow extensions in these definitions. Ordinals are parsed correctly as well, but produce an error (9018) because the .Net runtime does not support these anymore. Also the Calling convention is now mandatory and the generated IL code includes SetLastError = true and ExactSpelling = true.
  • -
  • Fixed a problem with the ~ operator. VO and Vulcan (and therefore X#) use this operator as unary operator and as binary operator.
    The unary operator does a bitwise negation (Ones complement), and the binary operator does an XOR.
    This is different than C# where the ~ operator is Bitwise Negation and the ^ operator is an XOR (and our Roslyn backend uses the C# syntax of course).
  • -
    - - Changes in 0.2.5 - Visual Studio Integration - -
  • Fixed a problem where the output file name would contain a pipe symbol when building for WPF
  • -
  • Fixed a problem with the Item type for WPF forms, pages and user controls
  • -
  • The installer now has an option to not take away the association for PRG, VH and PPO items from an installed Vulcan project system.
  • -
  • Added support for several new item types in the projects
  • -
  • Added support for nested items
  • -
  • Added several item templates for WPF, RC, ResX, Settings, Bitmap, Cursor etc.
  • -
    - Build System - -
  • Added support for the new /vo15 command line switch.
  • -
  • Added support for compiling native resources.
  • -
    - Compiler - -
  • A reference to VulcanRT and VulcanRTFuncs is now mandatory when compiling in VO/Vulcan dialect
  • -
  • Added support for indexed access for VO/Vulcan Arrays
  • -
  • Added support for VO/Vulcan style Constructor chaining (where SUPER() or SELF() call is not the first call inside the constructor body)
  • -
  • Added support for the &() macro operator in the VO/Vulcan dialect
  • -
  • Added support for the FIELD statement in the VO/Vulcan dialect
  • -
    - - -
  • The statement is recognized by the compiler
  • -
  • Fields listed in the FIELD statement now take precedence over local variables or instance variables with the same name
  • -
    -
    - -
  • Added support for the ALIAS operator (->) in the VO/Vulcan dialect, with the exception of the aliased expressions (AREA->(<Expression>))
  • -
  • Added support for Late bound code (in the VO/Vulcan dialect)
  • -
    - - -
  • Late bound method calls
  • -
  • Late bound property get
  • -
  • Late bound property set
  • -
  • Late bound delegate invocation
  • -
    -
    - -
  • Added a new /vo15 command line option (Allow untyped Locals and return types):
    By default in the VO/Vulcan dialect missing types are allowed and replaced with the USUAL type.
    When you specify /vo15- then untyped locals and return types are not allowed and you must specify them.
    Of course you can also specify them as USUAL
  • -
    - -
  • The ? and ?? statement are now directly mapped to the appropriate VO/Vulcan runtime function when compiling for the VO/Vulcan dialect
  • -
  • We now also support the VulcanClassLibrary attribute and VulcanCompilerVersion attribute for the VO & Vulcan dialect.
    With this support the Vulcan macro compiler and Vulcan Runtime should be able to find our functions and classes
  • -
  • The generated static class name is now more in par with the class name that Vulcan generates in the VO & Vulcan dialect.
  • -
  • Added several implicit conversion operations for the USUAL type.
  • -
  • When accessing certain features in the VO & Vulcan dialect (such as the USUAL type) the compiler now checks to see if VulcanRTFuncs.DLL and/or VulcanRT.DLL are included.
    When not then a meaningful error message is shown.
  • -
  • Added support for the intrinsic function _GetInst()
  • -
  • Fixed a problem with case sensitive namespace comparisons
  • -
  • Fixed a problem with operator methods
  • -
    - -
  • Added preprocessor macros __DIALECT__, __DIALECT_CORE__, __DIALECT_VO__ and __DIALECT_VULCAN__
  • -
  • The _Chr() pseudo function will now be mapped to the Chr() function
  • -
    - -
  • Added support for missing arguments in arguments lists (VO & Vulcan dialect only)
  • -
  • Fixed a crash when calculating the position of tokens in header files
  • -
  • The installer now offers to copy the Vulcan Header files to the XSharp Include folder
  • -
  • Added support for skipping arguments in (VO) literal array constructors
  • -
    - Documentation - -
  • Added the XSharp documentation to the Visual Studio Help collection
  • -
  • Added reference documentation for the Vulcan Runtime
  • -
    - - Changes in 0.2.4 - Visual Studio Integration - -
  • Double clicking errors in the error browser now correctly opens the source file and positions the cursor
  • -
  • Fixed several problems in the project and item templates
  • -
  • The installer now also detects Visual Studio 15 Preview and installs our project system in this environment.
  • -
    - Build System - -
  • Fixed a problem with the /unsafe compiler option
  • -
  • Fixed a problem with the /doc compiler option
  • -
  • Treat warnings as error was always enabled. This has been fixed.
  • -
    - Compiler - -
  • Added support for Lambda expressions with an expression list
  • -
    - LOCAL dfunc AS System.Func<Double,Double> - dfunc := {|x| x := x + 10, x^2} - ? dfunc(2) - -
  • Added support for Lambda expressions with a statement list
  • -
    - LOCAL dfunc AS System.Func<Double,Double> - dfunc :={|x| - ? 'square of', x - RETURN x^2 - } - -
  • Added support for the NAMEOF intrinsic function
  • -
    - FUNCTION Test(cFirstName AS STRING) AS VOID - FUNCTION Test(cFirstName AS STRING) AS VOID - IF String.IsNullOrEmpty(cFirstName) - THROW ArgumentException{"Empty argument", nameof(cFirstName)} - ENDIF - -
  • Added support for creating methods and functions with Clipper calling convention (VO and Vulcan dialect only)
  • -
  • Using Statement now can contain a Variable declaration:
  • -
    - Instead of: -    VAR ms := System.IO.MemoryStream{} -    BEGIN USING ms -         // do the work - - END USING - You can now write - BEGIN USING VAR ms := System.IO.MemoryStream{} - // do the work - END USING - -
  • Added support for /vo10 (Compatible IIF behavior). In the VO and Vulcan dialect the expressions are cast to USUAL. In the core dialect the expressions are cast to OBJECT.
  • -
    - New language features for the VO and Vulcan dialect - -
  • Calling the SELF() or SUPER() constructor is now allowed anywhere inside a constructor (VO and Vulcan dialect only). The Core dialect still requires constructor chaining as the first expression inside the constructor body
  • -
  • Added support for the PCOUNT, _GETFPARAM and _GETMPARAM intrinsic functions
  • -
  • Added support for String2Psz() and Cast2Psz()
  • -
  • Added support for BEGIN SEQUENCE … END
  • -
  • Added support for BREAK
  • -
    - Fixed several problems: - -
  • Nested array initializers
  • -
  • Crash for BREAK statements
  • -
  • Assertion error for generic arguments
  • -
  • Assertion on const implicit reference
  • -
  • Allow ClipperCallingConvention Attribute on Constructors, even when it is marked as ‘for methods only’
  • -
  • Fixed a problem with Global Const declarations
  • -
  • __ENTITY__ preprocessor macro inside indexed properties
  • -
    - - Changes in 0.2.3 - Visual Studio Integration - -
  • We have changed to use the MPF style of Visual Studio Integration.
  • -
  • We have added support for the Windows Forms Editor
  • -
  • We have added support for the WPF Editor
  • -
  • We have added support for the Codedom Provider, which means a parser and code generator that are used by the two editors above
  • -
  • The project property pages have been elaborated. Many more features are available now.
  • -
  • We have added several templates
  • -
    - Build System - -
  • Added support for several new commandline options, such as /dialect
  • -
  • The commandline options were not reset properly when running the shared compiler. This has been fixed.
  • -
    - -
  • The build system will limit the # of errors passed to Visual Studio to max. 500 per project. The commandline compiler will still show all errors.
  • -
    - Compiler - -
  • We have started work on the Bring Your Own Runtime support for Vulcan. See separate heading below.
  • -
  • The __SIG__ and __ENTITY__ macros are now also supported, as well as the __WINDIR__, __SYSDIR__ and __WINDRIVE__ macros
  • -
  • The debugger instructions have been improved. You should have a much better debugging experience with this build
  • -
  • Several errors that indicated that there are visibility differences between types and method arguments, return types or property types have been changed into warnings. Of course you should consider to fix these problems in your code.
  • -
  • The #Error and #warning preprocessor command no longer require the argument to be a string
  • -
  • The SLen() function call is now inlined by the compiler (just like in Vulcan)
  • -
  • The AltD() function will insert a call to "System.Diagnostics.Debugger.Break" within a IF System.Diagnostics.Debugger.IsAttached check
  • -
  • Several compiler crashes have been fixed
  • -
  • Added support for the PARAMS keyword for method and function parameters.
  • -
  • Fixed a problem for the DYNAMIC type.
  • -
    - BYOR - -
  • XBase type names are resolved properly (ARRAY, DATE, SYMBOL, USUAL etc)
  • -
  • Literal values are now resolved properly (ARRAY, DATE, SYMBOL)
  • -
  • NULL_ literals are resolved properly (NULL_STRING follows the /vo2 compiler option, NULL_DATE, NULL_SYMBOL)
  • -
  • The /vo14 compiler option (Float literals) has been implemented
  • -
  • The compiler automatically inserts a "Using Vulcan" and "using static VulcanRtFuncs.Functions" in each program
  • -
  • You MUST add a reference to the VulcanRTFuncs and VulcanRT assembly to your project. This may be a Vulcan 3 and also a Vulcan 4 version of the Runtime. Maybe Vulcan 2 works as well, we have not tested it.
  • -
  • Calling methods with Clipper calling convention works as expected.
  • -
  • Methods/Functions without return type are seen as methods that return a USUAL
  • -
  • If a method/function contains typed and typed parameters then the untyped parameters are seen as USUAL parameters
  • -
  • Methods with only untyped parameters (Clipper calling convention) are not supported yet
  • -
  • The ? command will call AsString() on the arguments
  • -
    - - Changes in 0.2.2 - Visual Studio Integration - -
  • Added more project properties. One new property is the "Use Shared Compiler" option. This will improve compilation speed, but may have a side effect that some compiler (parser) errors are not shown in details.
    If you experience this, then please disable this option.
  • -
  • Added more properties to the Build System. All C# properties should now also be supported for X#, even though some of them are not visible in the property dialogs inside VS.
  • -
  • Added a CreateManifest task to the Build System so you will not get an error anymore for projects that contain managed resources
  • -
  • The performance of the editor should be better with this release.
  • -
  • Marking and unmarking text blocks as comment would not always be reflected in the editor colors. This has been fixed.
  • -
    - Compiler - -
  • We have added a first version of the preprocessor. This preprocessor supports the #define command, #ifdef, #ifndef, #else, #endif, #include, #error and #warning. #command and #translate (to add user defined commands) are not supported yet.
  • -
  • Missing types (in parameter lists, field definitions etc) were sometimes producing unclear error messages. We have changed the compiler to produce a "Missing Type" error message.
  • -
  • We rolled the underlying Roslyn code forward to VS 2015 Update 1. Not that you see much of this from the outside <g>, but several fixes and enhancements have made their way into the compiler.
  • -
  • Added a YIELD EXIT statement (You can also use YIELD BREAK).
  • -
  • Added an (optional) OVERRIDE keyword which can be used as modifier on virtual methods which are overridden in a subclass.
  • -
  • Added a NOP keyword which you can use in code which is intentionally empty (for example the otherwise branch of a case statement. The compiler will no longer warn about an empty block when you insert a NOP keyword there.
  • -
  • The On and Off keywords could cause problems, because they were not positional (these are part of the pragma statement). This has been fixed.
  • -
  • _AND() and _OR() expressions with one argument now throw a compiler error.
  • -
  • The compiler now recognizes the /VO14 (store literals as float) compiler switch (it has not been implemented yet).
  • -
  • Added a ** operator as alias for the ^ (Exponent) operator.
  • -
  • Added an "unsupported" error when using the Minus operator on strings.
  • -
  • Fixed a "Stack overflow" error in the compiler that could occur for very long expressions.
  • -
  • The right shift operator no longer conflicts with two Greater Than operators, which allows you to declare or create generics without having to put a space between them.
    (var x := List<Tuple<int,int>>{}
  • -
    - - Changes in 0.2.1 - Visual Studio Integration - -
  • Added and improved several project properties
  • -
  • Fix a problem with the "Additional Compiler Options"
  • -
  • Improved coloring in the editor for Keywords, Comments etc. You can set the colors from the Tools/Options dialog under General/Fonts & Colors. Look for the entries with the name "XSharp Keyword" etc.
  • -
  • Added Windows Forms Template
  • -
    - Compiler - -
  • Several errors have been demoted to warnings to be more compatible with VO/Vulcan
  • -
  • Added support for Comment lines that start with an asterisk
  • -
  • Added support for the DEFINE statement. For now the DEFINE statement MUST have a type
    DEFINE WM_USER := 0x0400 AS DWORD
  • -
  • Fixed problem with Single Line Properties with GET and SET reversed
  • -
  • Several fixes for Virtual and Non virtual methods in combination with the /VO3 compatibility option
  • -
    - - Changes in 0.1.7 - -
  • The "ns" (add default namespace to classes without namespace) has been implemented
  • -
  • The "vo3" compiler option (to make all methods virtual ) has been implemented
  • -
  • Fixed an issue where the send operator on an expression between parentheses was not compiling properly
  • -
  • Relational operators for strings (>, >=, <, <=) are now supported. They are implemented using the String.Compare() method.
  • -
  • Fixed a problem with local variables declared on the start line from FOR .. NEXT statements
  • -
  • Added first version of the documentation in CHM & PDF format
  • -
  • Added several properties to the Visual Studio Project properties dialog to allow setting the new compiler options
  • -
  • Fixed a problem in the Targets files used by MsBuild because some standard macros such as $(TargetPath) were not working properly
  • -
  • XIDE 0.1.7 is included. This version of XIDE is completely compiled with XSharp !
  • -
  • The name of some of the MsBuild support files have changed. This may lead to problems loading a VS project if you have used the VS support from the previous build. If that is the case then please edit the xsproj file inside Visual Studio and replace all references of "XSharpProject" with "XSharp" . Then safe the xsproj file and try to reload the project again
  • -
  • The WHILE.. ENDDO (a DO WHILE without the leading DO) is now recognized properly
  • -
    - - Changes in 0.1.6 - -
  • This version now comes with an installer
  • -
  • This version includes a first version of the Visual Studio Integration. You can edit, build, run and debug inside Visual Studio. There is no "intellisense" available.
  • -
  • The compiler now uses 1-based arrays and the “az” compiler option has been implemented to switch the compiler to use 0-based arrays.
  • -
  • The "vo2" compiler option (to initialize string variables with String.Empty) has been implemented
  • -
  • Please note that there is no option in the VS project properties dialog yet for the az and vo2 compiler options. You can use the "additional compiler options" option to specify these compiler options.
  • -
  • The text "this" and "base" in error messages has been changed to "SELF" and "SUPER"
  • -
  • Error of type “visibility” (for example public properties that expose private or internal types) have been changed to warnings
  • -
  • Fixed a problem with TRY … ENDTRY statements without CATCH clause
  • -
  • The compiler now has a better resolution for functions that reside in other (X#) assemblies
  • -
  • Fixed a problem which could lead to an "ambiguous operator" message when mixing different numeric types.
  • -
    - - Changes in 0.1.5 - -
  • When an error occurs in the parsing stage, X# no longer enters the following stages of the compiler to prevent crashes. In addition to the errors from the parser also an error 9002 is displayed.
  • -
  • Parser errors now also include the source file name in the error message and have the same format as other error messages. Please note that we are not finished yet with handling these error messages. There will be improvements in the format of these error messages in the upcoming builds.
  • -
  • The compiler will display a “feature not available” (8022) error when a program uses one of the Xbase types (ARRAY, DATE, FLOAT, PSZ, SYMBOL, USUAL).
  • -
  • Fixed an error with VOSTRUCT and UNION types
  • -
  • Fixed a problem with the exclamation mark (!) NOT operator
  • -
    - - Changes in 0.1.4 - -
  • Several changes to allow calculations with integers and enums
  • -
  • Several changes to allow VO compatible _OR, _AND, _NOT an _XOR operations
  • -
  • Fix interface/abstract VO properties
  • -
  • Insert an implicit “USING System” only if not explicitly declared
  • -
  • Error 542 turned to warning (members cannot have the same name as their enclosing type)
  • -
  • Changes in the .XOR. expression definition
  • -
  • Fix double quote in CHAR_CONST lexer rule
  • -
  • Allow namespace declaration in class/struct/etc. name (CLASS Foo.Bar)
  • -
  • Fix access/assign crash where identifier name was a (positional) keword: ACCESS Value
  • -
  • Preprocessor keywords were not recognized after spaces, but only at the start of the line. This has been fixed.
  • -
  • Prevent property GET SET from being parsed as expression body
  • -
  • Fix default visibility for interface event
  • -
  • Unsafe errors become warnings with /unsafe option, PTR is void*
  • -
  • Fix dim array field declaration
  • -
  • Initial support of VO cast and VO Conversion rules (TYPE(_CAST, Expression) and TYPE(Expression)). _CAST is always unchecked (LONG(_CAST, dwValue)) and convert follows the checked/unchecked rules (LONG(dwValue))
  • -
  • Fixed problem with codeblock with empty parameter list
  • -
  • Fixed problems with GlobalAttributes.
  • -
  • An AUTO property without GET SET now automatically adds a GET and SET block
  • -
  • Allow implicit constant double-to-single conversion
  • -
    - - Changes in 0.1.3 - -
  • Change inconsistent field accessibility error to warning and other similar errors
  • -
  • Added commandline support for Vulcan arguments. These arguments no longer result in an error message, but are not really implemented, unless an equivalent argument exists for the Roslyn (C#) compiler. For example: /ovf and /fovf are both mapped to /checked, /wx is mapped to /warnaserror. /w should not be used because that has a different meaning /warning level). /nowarn:nnnn should be used in stead
  • -
  • Fixed problem where the PUBLIC modifier was assigned to Interface Members or Destructors
  • -
  • Prevent expression statements from starting with CONSTRUCTOR() or DESTRUCTOR()
  • -
  • Added support for ? statement without parameters
  • -
  • The default return type for assigns is now VOID when not specified
  • -
  • Added support for “old Style” delegate instantiation
  • -
  • Added support for Enum addition
  • -
  • Added an implicit empty catch block for TRY .. END TRY without catch and finally
  • -
  • Added support for the DESCENDING keyword in LINQ statements
  • -
  • Added support for VIRTUAL and OVERRIDE for Properties and Events
  • -
  • Prevent implied override insertion for abstract interface members
  • -
  • Fixed a problem where System.Void could not be resolved
  • -
  • Fixed problem with Property Generation for ACCESS/ASSIGN
  • -
  • Fixed problem with Abstract method handling
  • -
    - - Changes in 0.1.2.1 - -
  • Added default expression
  • -
  • Fixed problem with events
  • -
  • Fixed some small lexer problems
  • -
  • Fixed problem with _DLL FUNCTION and _DLL PROCEDURE
  • -
    - - Changes in 0.1.2 - -
  • Fixed problem with handling escape sequences in extended strings
  • -
  • Fixed issue in FOR.. NEXT statements
  • -
  • Fixed a problem with SWITCH statements
  • -
  • Fixed a problem with the sizeof() operator
  • -
  • Fixed a problem in the REPEAT .. UNTIL statement
  • -
  • Fixed a problem in TRY .. CATCH .. FINALLY .. END TRY statements.
  • -
  • Fixed issue in Conditional Access Expression ( Expr ? Expr)
  • -
  • Allow bound member access of name with type args
  • -
  • Fixed problem in LOCAL statement with multiple locals
  • -
  • Fixed a problem when compiling with debug info for methods without a body
  • -
  • Optimized the Lexer. This should increase the compile speed a lot
  • -
  • Fixed a problem in the code that reports that a feature is not supported yet
  • -
  • Fixed a problem when defining Generic types with a STRUCTURE constraint
  • -
  • Compiler macros (__ENTITY__, __LINE__ etc) were causing a crash. For now the compiler inserts a literal string with the name of the macro.
  • -
  • Build 0.1.1 did not contain XSC.RSP
  • -
  • Fixed a problem where identifiers were not recognized when they were matching a (new) keyword
  • -
    - +
  • We are now including .Net 8 versions of most of our runtime DLLs.
  • +
  • The Runtime is now delivered in both DLL format as well as Nuget Packages. See the separate topic about the Runtime in this help file for a description of these packages and DLLs
  • +
  • Several functions in the FoxPro Runtime have been added
  • +
    + Bug fixes + Visual Studio Integration
    New Features
    + +
  • We are now supporting SDK style projects. To do so many changes were made all over the Visual Studio support code
  • +
  • We are now fully supporting Visual Studio 2026
  • +
  • We are no longer supporting Visual Studio 2017.
  • +
  • We are still supporting Visual Studio 2019 but no new features will be implemented for this version of VS.
  • +
    + Bug fixes + Tools
    New Features
    + Bug fixes diff --git a/docs/Help/Topics/VersionHistoryXSharp1.xml b/docs/Help/Topics/VersionHistoryXSharp1.xml new file mode 100644 index 0000000000..2a0137ef23 --- /dev/null +++ b/docs/Help/Topics/VersionHistoryXSharp1.xml @@ -0,0 +1,1178 @@ + + + + History XSharp 1 and older + + Changes + Runtime chapter + String Literals + Version History + XSharp 1 + + +
    + History XSharp 1 and older +
    + Changes in 1.2.1 + Compiler + +
  • Fixed a problem where a compilation error resulted in the message "Failed to emit module" without further information
  • +
  • Fixed a problem with ++, -- += and similar operations in aliased expressions (like CUSTOMER->CUSTNO++)
  • +
  • Constructor initializers and Collection initializers were not working after a constructor with parameters. That has been fixed.
  • +
  • Fixed an issue with negative literal values stored in a USUAL when overflow checking was enabled.
  • +
  • For the CATCH clause now both the ID and the TypeName are optional. This means that there are 4 variations.
    You can only have one catch clause without type, since this defaults to the System.Exception type. However, you can have many catch clauses without ID.
  • +
    +   CATCH ID AS ExceptionType
      CATCH ID                  // defaults to Exception type
      CATCH AS ExceptionType  
      CATCH            // defaults to Exception type
    + Visual Studio Integration + +
  • Improved the speed of the background code scanning
  • +
  • Improved the speed of the background parser inside the editor
  • +
  • Fixed a problem in the codedom provider that is used by the windows forms editor
  • +
    + + + Changes in 1.2.0 + Compiler + +
  • You can now pass NULL for parameters declared by reference for compatibility with VO & Vulcan.
    We STRONGLY advise not to do this, unless you make sure that the function expects this and does not assign to the reference parameter without checking for a NULL reference first. This will only work when the /vo7 compiler option is enabled.
  • +
  • We have made some optimizations in the Lexer. The compiler should be a little faster because of that
  • +
  • We fixed a problem with the automatic constructor generation (/vo16) for classes that inherit from classes defined in an external DLL
  • +
  • When compiling with /vo2 any string fields assigned in a child class before the super constructor was called would be overwritten with an empty string. The generated code will now only assign an empty string when the string is NULL.
    Note: we do not recommend to assign parent fields in the child constructor before calling the super constructor. Manually coded default values for parent fields will still overwrite values assigned in the child constructor before the SUPER call
  • +
  • Fixed a problem with CHECKED() and UNCHECKED() syntax in the VO dialect
  • +
  • Fixed a problem with choosing overloads for methods where an overload exists with  a single object parameter and also an overload with an object[] parameter.
  • +
  • Added support to the parser for LOCAL STATIC syntax
  • +
  • Fixed a problem with compiler option /vo9 (Allow missing return values) and procedures or methods that return VOID
  • +
  • Improved debugger sequence point generation. The compiler no longer generates 'hidden' breakpoint information for startup and closedown code in the VO/Vulcan dialects, and for expression statements no longer a double step is necessary.
  • +
  • ACCESS and ASSIGN for partial classes could generate error messages without source file name. This has been solved.
    The compiler now generates slightly different code for these "partial" properties.
    The Access and Assign are implemented as compiler generated methods and the property getter and property setter now call these methods.
  • +
  • The compiler was not recognizing the _WINCALL calling convention. This has been fixed.
  • +
  • The compiler now generates a warning when the #pragma command is used
  • +
    + Visual Studio Integration + +
  • More performance improvements in the editor. Especially large source files with incorrect code could slow down the editor.
  • +
  • The editor parser no longer tries to parse include files repeatedly when these files contain #defines only (like the Vulcan header files)
  • +
  • The source code editor tried to show intellisense for words in a comment region. That has been fixed.
  • +
  • We have started work on Object Browser and Class Browser.
  • +
  • Opening and closing of projects should be slightly faster
  • +
  • The internal code model used by the editors now disposes its loaded information when projects are closed and no projects need this information anymore. This should reduce the memory usage of the X# project system
  • +
  • Matching keywords, such as IF .. ENDIF and FOR .. NEXT should now be highlighted in the editor
  • +
  • If you select an identifier in the editor then that identifier will be highlighted in the current method/function on all places where it is used
  • +
  • We have added several features that you need to enable/disable on the Tools/Options/Text Editor/XSharp/Intellisense dialog:
  • + +
  • The code completion in the editor also supports instance member completion when a dot is pressed.
    Please note that the compiler ONLY accepts this in the Core language, not in the VO & Vulcan dialect. So the option has no effect inside projects with other dialects.
  • +
  • We have added some options to control the sorting of the DropDown comboboxes in the editor, as well as if fields/instance variables should be included in these comboboxes. When you do not sort, then the entries in the dropdown box will be shown in the order in which they are found in the source file.
  • +
  • We have added the option to autocomplete identifiers when typing. This includes locals, parameters, class fields, namespaces, types etc.
  • +
    +
    + +
  • Overridden methods in subclasses with the same signature as the parent methods they override are no longer counted as overloads in completionlists
  • +
  • A missing reference DLL could "kill" the intellisense engine. This no longer happens. Of course the type info from a missing referenced DLL is not included.
  • +
  • Properties and methods in the generated source files for XAML code (the .g.prg files in the OBJ folder) are now also parsed and included in the completion lists in intellisense and in the Class Browser and Object Browser windows.
  • +
    + VOXPorter + +
  • The installer now includes the correct version of VOXPorter <g>
  • +
  • VOXporter now supports the following commandline options:
    /s:<source folder or aef>
  • +
    + /d:<destination folder> + /r:<runtime folder> + /nowarning + + +
  • Some code corrections were added for issues found in the GUI classes
  • +
  • The template files can now also be found when VOXPorter is run from a different working directory
  • +
    + + + Changes in 1.1.2 + Compiler + +
  • Added compiler warning for code that contains a #pragma
  • +
  • Fixed a problem with iif() functions and negative literal values
  • +
    + Visual Studio Integration + +
  • Fixed a slowness in the editor after typing a send (: ) operator
  • +
  • Enum values are now properly decoded in the debugger
  • +
  • Fixed the CodeDom provider for handling literal FALSE values and negative numbers. As a result, more (Vulcan created) winforms should open without problems
  • +
  • Some positional keywords (such as ADD and REMOVE) are no longer colored as keyword in the editor for incomplete code when they appear after a colon ‘:’ or dot ‘.’;
  • +
    + VOXPorter + +
  • Fixes for exporting the VO RDD Classes from the SDK
  • +
    + + + + Changes in 1.1.1 + Compiler + +
  • Fixed a problem with Debugger Breakpoints for DO CASE and OTHERWISE
  • +
  • Fixed a problem with Debugger Breakpoints for sourcecode that is defined in #included files
  • +
  • Added support for the Harbour Global Syntax where the GLOBAL keyword is optional
  • +
  • Fixed a problem with FOR.. NEXT loops with negative step values
  • +
  • In some situations the @@ prefix to avoid keyword conflicts was not removed from workarea names or field names. This has been fixed
  • +
  • In the VO/Vulcan dialect a warning (XS9015) was generated when a default parameterless SUPER constructor call was automatically generated. This error message is now suppressed. However a generated SUPER constructor call with parameters still generates a warning.
  • +
  • Prepared the compiler for Xbase type names and function names in the XSharp Runtime
  • +
    + Preprocessor + +
  • Fixed a crash in the preprocessor
  • +
  • The preprocessor was generating an error "Optional block does not contain a match marker" for blocks without match marker. This is now allowed.
    (for example for the ALL clause in some of the Database UDCs )
  • +
  • When the same include files was used by multiple source files, and different sections of this file were included because of different #ifdef conditions, then the preprocessor would get "confused". This has been fixed.
  • +
  • Debugger file/line number information from source code imported from #include files is not processed correctly.
  • +
    + Visual Studio Integration + +
  • Fixed several issues with the Windows Form Editor
  • +
  • The class declaration generated by the VO compatible editors now included the PARTIAL modifier.
  • +
    + + + Changes in 1.1 + Compiler + +
  • Fixed a problem with Codeblocks used in late bound code after the release of X# 1.0.3
  • +
  • Fixed a problem with overriding properties in a subclass that inherit from a class where only the Assign (Set) or Access (Get) are defined.
  • +
  • The compiler option /vo16: automatically generate VO Clipper constructors has been implemented.
  • +
  • Fixed a crash in the compiler for compiler errors that occur on line 1, column 1 of the source file
  • +
  • Fixed a problem where overflow checking was not following the /ovf compiler option
  • +
  • Fixed problem with public modifier for interface methods
  • +
  • Added proper error message with unreachable fields in external DLLs
  • +
  • Fixed a problem with debugger sequence points (debugger stepping)
  • +
  • X# generated pdb files are now marked with the X# language GUID so they are recognized as X# in the VS debugger
  • +
  • DATETIME (26)  and DECIMAL (27) are added as UsualType to the compiler in preparation of the X# runtime that allows usuals of these types
  • +
  • Compiler options /VO15 and /VO16 now produce an error message when used outside the VO/Vulcan dialect
  • +
  • Methods declared outside a class (VO style code) would declare a private class and not a public class
  • +
  • ASTYPE has been changed to a positional keyword
  • +
  • Fixed a problem with the Chr() and _Chr() functions for literal numbers > 127
  • +
  • Added support for the __CLR2__ and __CLR4__ compiler macros. The version is derived from the folder name of mscorlib.dll and/or system.dll
  • +
  • The Codeblock syntax was not working in the Core dialect.
  • +
  • Some new keywords, such as REPEAT, UNTIL, CATCH, FINALLY,VAR, IMPLIED, NAMESPACE, LOCK, SCOPE, YIELD, SWITCH etc are now also positional and will only be recognized as keyword when at the start of a line or after a matching other keyword.
    This should help prevent cryptic error messages when these keywords are used as function names.
  • +
    + Visual Studio + Source code editor + +
  • Added Goto Definition for Functions and Procedures
  • +
  • Improved Info tips for Functions and Procedures
  • +
  • Improved case synchronization
  • +
  • Added first version of smart indenting
  • +
  • Fixed lookup problems in the intellisense engine that could lock up VS
  • +
  • Compiler Generated types are now suppressed from the completion lists.
  • +
  • Added partial support for intellisense for LOCAL IMPLIED and VAR variables
  • +
  • Added support for Format Document. This also sets the case for identifiers according to the tools defined in the Tools/Options menu
  • +
  • Performance improvements for the background file scanner. This scanner is also paused during the build process to improve the compilation speed.
  • +
    + Project System and MsBuild + +
  • Fixed a problem in the project files with conditioned property groups. Existing projects will be updated automatically
  • +
  • Added support for the /vo16 compiler option in MsBuild and the VS Project Property pages.
  • +
  • Fixed a problem with the /nostddef compiler option which was not working as expected.
  • +
  • Fixed a problem which would occur when entering resources or settings in the project property dialog
  • +
  • Fixed a problem with the /nostdlib compiler option
  • +
  • License.Licx files are now added as "Embedded Resource"
  • +
  • Fixed a problem with the automatic adding of License files
  • +
  • When a project has a "broken reference" and a new reference is added with the correct location, then the broken reference will be deleted and the new references will be added instead.
  • +
  • The MSBuild support DLL was unable to find the location of the compiler and native resource compiler when running inside a 64 bit process
  • +
    + Form Editor + +
  • Improved Windows Form Editor support for types defined in project references. We will now detect the location of the output files for these projects, like the C# and VB project systems.
  • +
  • The Code parser for the Form Editor was having problems with untyped methods. This has been fixed.
  • +
    + VO Window and Menu Editor + +
  • The code generator for the Window and Menu editor will delete old unused defines.
  • +
  • Changed the item template for VO windows to fix a problem when adding an event handler to a window that has not been saved yet
  • +
  • The code generator for the Window editor was not outputting a style for WS_VISIBLE. This has been fixed.
  • +
    + Debugger + This build introduces a first version of the XSharp debugger support + +
  • The Visual Studio debugger now shows the language X# in the callstack window and other places
  • +
  • Functions, Methods and procedures are now displayed in the X# language style in the callstack window
  • +
  • Compiler generated variables are no longer shown in the locals list
  • +
  • The locals list now shows SELF in stead of this
  • +
  • X# predefined types such as WORD, LOGIC etc are shown with their X# type names in the locals window
  • +
    + Testing + +
  • Added support for the Test Explorer window
  • +
  • Added templates for unit testing with XUnit, NUnit and Microsoft Test
  • +
    + Other + +
  • Added warning when Vulcan was (re)installed after XSharp, which could cause a problem in the Visual Studio integration
  • +
  • The VS Parser was marking Interfaces as structure in stead of interface. This has been fixed.
  • +
  • The tool XPorter tools have better names in the VS Tools Menu
  • +
  • The VS Background parser gets suspended while looking up type information to improve the intellisense speed
  • +
  • Several changes were made to the templates that come with X#
  • +
    + XPorter + +
  • Fix problem in propertygroup conditions.
  • +
    + VOXPorter + +
  • Generate clipper constructors is now disabled by default
  • +
  • Fixed a problem in the VS Template files.
  • +
    + + + Changes in 1.0.3 + Compiler + +
  • Fixed a problem with the index calculation for Vulcan Arrays indexed with a usual argument
  • +
  • Fixed a problem with the generation of automatic return values for code that ends with a begin sequence statement or a try statement
  • +
  • Optimized the runtime performance for literal symbols.
    The compiler now generates a symbol table for the literal symbols and each literal symbol used in your app is only created once.
    You may experience a little delay at startup if your app uses a LOT (thousands) of literal symbols. But the runtime performance should be better.
  • +
  • Added a compiler error for code where numerics are casted to an OBJECT with the VO compatible _CAST operator.
    This is no longer allowed:
    LOCAL nValue as LONG
    LOCAL oObject as OBJECT
    nValue := 123
    oObject := OBJECT(_CAST, nValue)
  • +
    + + + Changes in 1.0.2 + Compiler + +
  • Added support for XML doc generation. We support the same tags that the C# compiler and other .Net compiler support.
  • +
  • Improved some parser errors.
  • +
  • Created separate projects for portable and non portable (.Net framework 4.6) for the compiler and scripting
  • +
  • Fixed the code generation for conversion from USUAL to a known type. Now the same error is generated that Vulcan produces when the object type in the usual does not match the type of the target variable
  • +
  • When declaring a type with the same name as the assembly now a compiler error is generated with a suggested work around.
  • +
  • Fixed a strange compiler message when using a PTR() operation on a method call
  • +
  • Indexed access to bytes in a PSZ is now 1 based like in VO when the VO dialect is used. The Vulcan dialect needs 0 based index access like Vulcan.
  • +
  • The error message for compound assignments of FLOAT and USUAL has been removed. The compiler now contains a workaround for the problem in the Vulcan Runtime
  • +
  • For ambiguous code where the compiler has to choose between a Function call and a static method call in any other class, the compiler now chooses the function call over the method call (Vo and Vulcan dialect). The warning will still be generated.
  • +
  • When passing a variable by reference with the @ sign the compiler will now check to see if the declared type of the function/method parameter matches the type of the local variable.
  • +
  • Some compiler warnings for unused variables were being suppressed in the VO/Vulcan dialect. They are activated again.
  • +
    + Scripting + +
  • The scripting was not working in release 1.01
  • +
    + Visual Studio Integration + +
  • QuickInfo could generate a 'hang' in the VS editor. This has been fixed
  • +
  • Added quickinfo for globals and defines
  • +
  • Added completionlists for globals and defines
  • +
  • Added VO Form editor to edit vnfrm/xsfrm files and generate the code and resources
  • +
  • Added VO Menu editor to edit vnmnu/xsmnu files and generate the code and resources
  • +
  • Added VO DbServer editor and VO Fieldspec editor to edit vndbs/xsdbs and vnfs/xsfs files and generate the code and resources
  • +
  • Added keyword and identifier case synchronization.
  • +
  • Fixed a problem where typing SUPER( in the editor could throw an exception
  • +
  • Prebuild and Postbuild entries in the project file are now configuration specific
  • +
  • Added support for XML Doc generation in the project system
  • +
  • Fixed a 'hang' that could occur with Visual Studio 2017 version 15.3 and later
  • +
    + VO Xporter + +
  • Fixed a problem when importing certain VO 2.7 AEF files
  • +
  • Fixed a problem with acceptable characters in the solution folder name
  • +
  • VO Form and menu entities are also included in the xsproj file
  • +
  • Added an option to the INI files to specify the Vulcan Runtime files location ()
  • +
    + + + Changes in General Release (1.0.1.1) + Compiler + +
  • Fixed a problem with VERY old versions of the Vulcan Runtime
  • +
  • Variables declared as DIM Byte[] and similar are now Pinned by the compiler
  • +
  • [Return] attribute was not properly handled by the compiler. This has been fixed
  • +
  • Compound Assignment (u+= f or -=) from USUAL and FLOAT were causing a stackoverflow at runtime caused by a problem in the Vulcan Runtime. These expressions now generate a compiler error with the suggestion to change to a simple assignment ( u := u + f)
  • +
    + Visual Studio Integration + +
  • Project References between XSharp Projects were also loaded as assemblyreference when resolving types. This could lead to speed problems and unnecessary memory usage
  • +
  • Improved the speed of the construction of Completion Lists (such as methods and fields for a type).
  • +
  • We have also added Completion List Tabs, where you can see fields, properties, methods etc. on separate tabs. You can enable/disable this in the Tools/Options/Text Editor/XSharp/Intellisense options page.
  • +
    + VO XPorter + +
  • We have added a check to make sure that the default namespace for a X# project cannot contain a whitespace character
  • +
    + + + Changes in General Release (1.0.1) + New Features + +
  • We have added support for ENUM Basetypes (ENUM Foo AS WORD)
  • +
  • We have added a separate syntax for Lambda Expressions
  • +
  • We have added support for Anonymous Method Expressions
  • +
  • Typed local variables can now also be used for PCALL() calls
  • +
  • Methods with the ExtensionAttribute and Parameters with the ParamArrayAttribute attributes now compile correctly, but with a warning
  • +
    + Compiler + +
  • Fixed a problem with a late bound assign of a literal codeblock
  • +
  • Resolved several name conflicts
  • +
  • Improved several of the error messages
  • +
  • Fixed compilation problem for Properties with only a SET accessor
  • +
  • Fixed a crash in a switch block with an if .. endif statement
  • +
  • Fix problem with virtual instance methods and structures
  • +
  • Fixed name conflict foreach variables used in Array Literals
  • +
  • Changed resolution for Functions and static methods with the same name.
    In the VO/Vulcan dialect functions take precedence over static methods. If you want to call the static method then then you need to prefix the method call with the classname.
  • +
  • There is a separate topic in this documentation now that describes the syntax differences and similarities between Codeblocks, Lambda Expressions and Anonymous Method Expressions.
  • +
  • Fixed incorrect error message for Start() function with wrong prototype.
  • +
  • When an ambiguity is detected between a function and a static method then a warning is displayed
  • +
    + Visual Studio + +
  • Added parameter tips for Functions and methods from "Using Static" classes
  • +
  • Added parameter tips for Clipper Calling Convention functions and methods
  • +
  • Added support for generics in Intellisense
  • +
  • Intellisense will show keywords in stead of native type names (WORD in stead of System.UInt16 for example)
  • +
  • Parameter tips are now shown when a opening '(' or '{' is typed as well as when the user types a comma ','.
  • +
  • Parameter tips will show REF OUT and AS modifiers
  • +
  • Added intellisense for COM references, both for normal COM references as well as for Primary Interop Assemblies. Also members from implemented interfaces are now included in intellisense code completion (this is very common for COM).
  • +
  • Improved intellisense for Project References from other languages, such as C# and VB.
  • +
  • Added intellisense for Functions in referenced projects and referenced Vulcan and/or X# assemblies
  • +
  • Suppress "special type names" in intellisense lists
  • +
  • Added support for "VulcanClassLibrary" attribute to help find types and functions
  • +
  • Errors from the Native Resource compiler are now also included in the error list
  • +
  • Fixed problem with parameter tips for Constructors
  • +
  • Added memberlist support for X# type keywords such as STRING, REAL4 etc.
  • +
  • Fixed several issues with the Windows Form editor in relation to ActiveX controls
  • +
  • Added a menu option to start the VO Xporter tool
  • +
  • Added background scanning for dependent items, to make sure that newly generated code is scanned and available for intellisense.
  • +
  • Several changes to the Windows Forms editor and project system:
  • + +
  • Added support for adding ActiveX controls
  • +
  • Added support for Form Inheritance. Our forms are also visible in the C# Inherited form wizard
  • +
  • Added support to add our Windows Forms Custom Controls to the ToolBox in Visual Studio
  • +
  • Some performance enhancements in the Codedom Parser that is used by the Windows Form Editor. You should notice this for larger forms.
  • +
    +
    + +
  • Fixed several crashes reported by users
  • +
  • Native Resource files (.rc) now open in the Source code editor
  • +
  • Improved background parsing speed
  • +
  • Improved keyword colorization speed
  • +
  • Improved handling of Type and Member dropdowns in the editor
  • +
    + Tools + +
  • Added a first version of the VO Xporter tool
  • +
  • The installer now registers .xsproj files, .prg, .ppo. .vh, .xh and .xs files so they will be opened with Visual Studio
  • +
    + Documentation + +
  • We have added some chapters on how to convert your VO AEF and/or PRG files to a XIDE project and/or a Visual Studio solution.
  • +
    + + + Changes in 0.2.12 + Scripting + +
  • We have added the ability to use X# scripts. Some documentation about how this works can be found here. You can also find scripting examples in the
    c:\Users\Public\Documents\XSharp\Scripting folder
  • +
    + Compiler + All dialects + +
  • The compiler is now based on the Roslyn source code for C# 7.
  • +
  • Accesses and Assigns with the same name for the same (partial) class in separate source files are now merged into one property. This will slow down the compiler somewhat. We recommend that you define the ACCESS and ASSIGN in the same source file.
  • +
  • Added support for repeated result markers in the preprocessor
  • +
  • We have added the compiler macro __DIALECT_HARBOUR__
  • +
  • Fixed the name resolution between types, namespaces, fields, properties, methods, globals etc. The core dialect is very close to the C# rules, the other dialect follows the VO rules.
  • +
  • Some warnings for ambiguous code have been added
  • +
  • _Chr() with untyped numeric values would crash. This has been fixed.
  • +
  • We made some changes to the character literal rules. For the VO and Harbour dialect there are now other rules then for Core and Vulcan. See the help topic for more information
  • +
    + VO and Vulcan Dialect + +
  • Several VO compatibility issues have been fixed
  • +
  • The QUIT, ACCEPT, WAIT, DEFAULT TO and STORE command are now removed from the compiler and defined in our standard header file "XSharpDefs.xh" which is located in the \Program Files(x86)\XSharp\Include folder. These commands are not compiled in the core dialect
  • +
  • Added support for CONSTRUCTOR() CLASS MyClass and DESTRUCTOR CLASS MyClass (in other words, outside the CLASS .. ENDCLASS construct
  • +
    + +
  • The # (not equal) operator is now recognized when used without space before the keywords NIL, NULL_STRING, NULL_OBJECT etc. so #NIL is not seen as the symbol NIL but as Not Equal To NIL
  • +
  • SizeOf and _TypeOf were special tokens in VO and could not be abbreviated. We have changed the X# behavior to match this. This prevents name conflicts with variables such as _type.
  • +
  • We have added support for DLL entrypoints with embedded @ signs, such as "CAVOADAM.AdamCleanupProtoType@12"
  • +
  • (DWORD) (-1) would require the unchecked operator. This is now compatible with Vulcan and generates a DWORD with the value System.Uint32.MaxValue.
  • +
  • STATIC VOSTRUCT now gets compiled as INTERNAL VOSTRUCT. This means that you cannot have the same structure twice in your app. Why would you want to do that ?
  • +
  • Fixed several cases of "incorrect" code that would be compiled by VO, such as a codeblock that looks like:
    cb := { |x|, x[1] == 1 }
    Note the extra comma.
    This now compiled into the same codeblock as:
  • +
    + cb := { |x| x[1] == 1 } + +
  • The /vo16 compiler option has been disabled for now (does not do anything) because it had too many side effects.
  • +
    + Visual Studio Integration + +
  • Deleted files and folders are moved them to the Trash can.
  • +
  • Fixed an intellisense problem in the XAML editor
  • +
  • Added support for Code Completion between different X# projects
  • +
  • Added support for Code Completion and other intellisense features for source code in VB and C# projects
  • +
  • Added support for parameter info
  • +
    + Documentation + +
  • We have added (generated) topics for all undocumented compiler errors. Some topics only contain the text that is shown by the compiler. More documentation will follow. Also some documentation for the X# Scripting has been added.
  • +
    + + + Changes in 0.2.11 + Compiler + All dialects + +
  • Improved some error messages, such as for unterminated strings
  • +
  • Added support for the /s (Syntax Check only) command line option
  • +
  • Added support for the /parseonly command line option which is used by the intellisense parser
  • +
    + +
  • Added some compiler errors and warnings for invalid code
  • +
  • The preprocessor did not properly handle 4 letter abbreviations for #command and #translate. This has been fixed
  • +
  • Fixed some problems found with the preprocessor
  • +
  • We switched to a new Antlr parser runtime. This should result in slightly better performance.
  • +
  • Changed the way literal characters and strings are defined:
  • + +
  • In the Vulcan dialect a literal string that is enclosed with single quotes is a char literal. Double quotes are string literals
  • +
  • In the Core and VO dialect a literal string that is enclosed with single quotes is a string literal. Double quotes are also string literals.
    To specify a char literal in Core and VO you need to prefix the literal with a 'c':
  • +
    +
    + +      LOCAL cChar as CHAR
         cChar := c'A'
    + +
  • Changed the way literal characters and strings are defined:
  • +
  • sizeof() and _sizeof() no longer generate a warning that they require 'unsafe' code, when compiling for x86 or x64. When compiling for AnyCpu the warning is still produced.
  • +
  • When the includedir environment variable was not set then the XSharp\Include folder would also not be found automatically.
  • +
    + VO/Vulcan Compatibility + +
  • Added /vo16 compiler option to automatically generate constructors with Clipper calling convention for classes without constructor
  • +
    + Harbour Compatibilty + +
  • Started work on the Harbour dialect. This is identical with the VO/Vulcan dialect. The only difference so far is that the IIF() expressions are optional
  • +
    + Visual Studio + New features / changed behavior: + +
  • Added Brace Matching
  • +
  • Added Peek definition (Alt-F12)
  • +
  • All keywords are not automatically part of the Completionlist
  • +
  • Fixed a member lookup problem with Functions and Procedures inside a Namespace
  • +
  • Increased background parser speed for large projects
  • +
  • Fixed type lookup for fields and properties from parent classes
  • +
  • Fixed problem where CSharp projects could not find the output of a XSharp project reference
  • +
  • The Intellisense parser now properly used all current projects compiler options.
  • +
  • Prevent crashes when the X# language buffer is fed with "garbage" such as C# code
  • +
    + Installer + +
  • The local template cache and components cache for VS2017 was not cleared properly this has been fixed.
  • +
  • Added code to properly unregister an existing CodeDomProvider when installing
  • +
    + Documentation + +
  • Several empty chapters are now hidden.
  • +
  • Added description of the templates
  • +
    + + + Changes in 0.2.10 + This build focuses on the last remaining issues in the VO and Vulcan compatibility and adds a lot of new features to the Visual Studio integration. + Compiler + VO/Vulcan Compatibility + +
  • We have completed support for the DEFINE keyword. The type clause is now optional. The compiler will figure out the type of the define when no type is specified.
    The DEFINEs will be compiled to a Constant field of the Functions class, or a Readonly Static field, when the expression cannot be determined at compile time (such as for Literal dates or symbols).
  • +
  • We have extended the preprocessor . It now has support for #command, #translate, #xcommand and #xtranslate. Also "Pseudo function" defines are supported, such as :

    #define MAX(x,y) IIF((x) > (y), (x), (y))

    This works just like a #xtranslate, with the exception that the define is case sensitive (unless you have enabled the "VO compatible preprocessor" option (/vo8).
    The only thing that is not working in the preprocessor is the repeated result marker.
  • +
  • In VO/Vulcan mode the compiler now accepts "garbage" between keywords such as ENDIF and NEXT and the end of the statement, just like the VO compiler.
    So you no longer have to remove "comment" tokens after a NEXT or ENDIF. This will compile without changes in the VO and Vulcan dialect:

      IF X == Y
          DoSomething()
      ENDIF X == Y
    or
      FOR I := 1 to 10
         DoSomething()
      NEXT I
    We do not recommend this coding style, but this kind of code is very common...
  • +
  • Fixed an issue with recognition of single quoted strings. These were always recognized as CHAR_CONST when the length of the string was 1. Now they are treated as STRING_CONST and the compiler backend has been adjusted to convert the STRING literals to CHAR literals when needed.
  • +
  • In VO and Vulcan dialect when the compiler option /vo1 is used then RETURN statements without value or with a return value of SELF are allowed for the Init() and Axit() methods. Other return values will trigger a compiler warning and will be ignored.
  • +
    + New features / changed behavior: + +
  • The compiler now produces an error when a source file ends with an unterminated multi line comment
  • +
  • Added ASTYPE expression, similar to the AS construct in other languages. This will assign a value of the correct type or NULL when the expression is not of the correct type:
  • +
    + VAR someVariable := <AnExpression> ASTYPE <SomeType>
    + +
  • The Chr() and _Chr() functions are now converted to a string or character literal when the parameter is a compile time constant
  • +
  • Compilation speed for assemblies with larger numbers of functions, procedures, defines, globals or _dll functions has been improved.
  • +
  • _DLL FUNCTIONS now automatically are marked with CharSet.Auto
  • +
  • Fixed some inconsistencies between Colon (:) and Point (.) interoperability and the super keyword
  • +
  • Fixed several compiler issues reported by FOX subscribers and other users.
  • +
    + Visual Studio + New features / changed behavior: + +
  • Tested and works with the release version of Visual Studio 2017
  • +
    + +
  • We have added support for regions inside the VS editor. At this moment most "entities" are collapsible as well as statement blocks, regions and lists of usings, #includes and comments.
  • +
  • We have added support for member and type drop downs in the VS Editor
  • +
  • We have added support for Code completion in the VS editor
  • +
  • We have added support for Goto definition in the VS Editor
  • +
  • Errors detected by the intellisense scanner are now also included in the VS error list.
  • +
  • We have added help links to the errors in the VS error list. The help links will bring you to the appropriate page on the X# website. Not all the help pages are complete yet, but at least the infrastructure is working.
  • +
  • We have added support for snippets and included several code snippets in the installer
  • +
  • We have made several changes to the project properties dialogs
  • + +
  • The pre and post build events are now on a separate page for the Project Properties. These are now also not defined per configuration but are shared between the various configurations.
    If you want to copy output results to different folders for  different configurations you should use the $(Configuration) and $(Platform) variables
  • +
  • We have  moved the Platform and Prefer32Bits properties to the Build page to make them configuration dependent
  • +
  • Fixed a problem with casing of the AnyCPU platform which would result in duplicate items in the VS Platform combobox
  • +
  • Added support for ARM and Itanium platform types
  • +
  • Some properties were saved in project file groups without a platform identifier. This has been fixed
  • +
  • We have added a project property to control how Managed file resources are included:  Use Vulcan Compatible Managed Resources
    When 'True' then resources files are included in the assembly without namespace prefix. When 'False' then the resource files are prefixed with the namespace of the app, just like in other .Net languages, such as C#
  • +
    +
    + +
  • We have fixed some code generation problems
  • +
  • The parser that is used in the Windows Forms editor now also properly handles background images. Both images in the resx for the form and also background images in the shared project resources
  • +
  • We have added Nuget support for our project system.
  • +
  • We have made several changes to fix problems in project files
  • + +
  • The project system now silently fixes problems with duplicate items
  • +
  • Fixed a problem with dependencies between xaml files and their dependent designer.prg files and other dependent files
  • +
  • Fixed a problem with dependent items in sub folders or in a folder tree that includes a dot in a folder name.
  • +
  • Fixed a problem in the WPF template
  • +
    +
    + +
  • Fixed a refresh problem when deleting a references node
  • +
  • Added implementation of the OAProject.Imports property, which is used by JetBrains
  • +
    + XPorter + +
  • Fixed a problem converting WPF style projects
  • +
    + + + Changes in 0.2.9 + Compiler + With this build you can compile the Vulcan SDK without changes, except for some obvious errors in the Vulcan SDK that Vulcan did not find!
    We consider the Vulcan Compatibility of the compiler finished with the current state of the compiler. All Vulcan code should compile without proble now.
    + VO/Vulcan Compatibility + New features / changed behavior: + +
  • All Init procedures are now properly called at startup. So not only the init procedures in the VOSDK libraries but also init procedures in other libraries and the main exe
  • +
  • Changed the method and type resolution code:
  • + +
  • A method with a single object parameter is now preferred over a method with an Object[] parameter
  • +
  • When both a function (static method) exists and an instance method we will now call the static method in code inside methods that does not have a SELF: or SUPER: prefix.
  • +
  • In situations where the @ operator is used to pass variables by reference.
  • +
  • To make it more compatible with Vulcan for overloads with different numeric types.
  • +
  • To prefer a method with specific parameters over a method with usual parameters
  • +
  • To avoid problems with Types and Namespaces with the same name.
  • +
  • To prefer a method with an OBJECT parameter over the one with OBJECT[] parameters when only 1 argument is passed
  • +
  • When 2 identical functions or types are detected in referenced assemblies we now choose the one in the first referenced assembly like Vulcan does, and generate warning 9043
  • +
    +
    + +
  • The sizeof operator now returns a DWORD to be compatible with VO and Vulcan.
  • +
  • Added support for EXIT PROCEDURES (PROCEDURE MyProcedure EXIT). These procedures will automatically be called during program shutdown, just before all the global variables are cleared.
    The compiler now generates an $Exit function for each assembly in which the exit procedures will be called and the reference globals in an assembly will be cleared. In the main app a $AppExit() function is created that will call the $Exit functions in all references X# assemblies. When a Vulcan compiled assembly is referenced, then all the public reference globals will be cleared from the $AppExit() function.
  • +
  • Added support for PCALL and PCALLNATIVE
  • +
  • Added support for several Vulcan compatible compiler options:
  • + +
  • /vo1 Allow Init() and Axit() for constructor and destruction
  • +
  • /vo6 Allow (global) function pointers. DotNet does not "know" these. They are compiled to IntPtr. The function information is preserved so you can use these pointer in a PCALL()
  • +
  • /ppo. Save the preprocessed compiler output to a file
  • +
  • /Showdefs Show a list of the defines and their values on the console
  • +
  • /showincludes Show a list of the included header files on the console
  • +
  • /verbose Shows includes, source file names, defines and more. on the console
  • +
  • DEFAULT TO command
  • +
  • ACCEPT command
  • +
  • WAIT command
  • +
    +
    + +
  • Several code generation changes:
  • + +
  • Changed the code generation for DIM elements inside VOStruct arrays because the Vulcan compiler depends on a specific naming scheme and did not recognize our names.
  • +
  • Improved the code generation inside methods with CLIPPER calling convention.
  • +
    +
    + Bug fixes + +
  • Implicit namespaces are now only used when the /ins compiler option is enabled. In Vulcan dialect the namespace Vulcan is always included.
  • +
  • Fixed several problems with the @ operator and VOSTRUCT types
  • +
  • Fixed a problem with DIM arrays of VOSTRUCT types
  • +
  • Fixed a problem with LOGIC values inside VOSTRUCT and UNION types
  • +
  • Fixed several problems with the VOStyle _CAST and Conversion operators.
  • +
  • Fixed several numeric conversion problems
  • +
  • Fixed several problems when mixing NULL, NULL_PTR and NULL_PSZ
  • +
  • Fixed several problems with the _CAST operator
  • +
  • Fixed several problems with PSZ Comparisons. X# now works just like Vulcan and VO and produces the same (sometimes useless) results
  • +
  • Fixed a problem with USUAL array indexes for multi dimensional XBase Arrays
  • +
  • Fixed codeblock problems for codeblocks where the last expression was VOID
  • +
  • Changed code generation for NULL_SYMBOL
  • +
  • Preprocessor #defines were sometimes conflicting with class or namespace names. For example when /vo8 was selected the method System.Diagnostics.Debug.WriteLine() could not be called because the DEBUG define was removing the  classname. We have changed the preprocessor so it will no longer replace words immediately before or after a DOT or COLON operator.
  • +
  • Fixed a compiler crash when calling static methods in the System.Object class when Late Binding was enabled
  • +
  • Fixed String2Psz() problem inside PROPERTY GET and PROPERTY SET
  • +
  • And many more changes.
  • +
    + All dialects + New features / changed behavior: + +
  • Several code generation changes:
  • + +
  • The code generation for ACCESS and ASSIGN has changed. There are no longer separate methods in the class, but the content of these methods is now inlined in the generated Get and Set methods for the generated property.
  • +
  • Optimized the code generation for IIF statements.
  • +
  • The debugger/step information has been improved. The debugger should now also stop on IF statements, FOR statements, CASE statements etc.
  • +
    +
    + +
  • Indexed access to properties defined with the SELF keyword can now also use the "Index" property name
  • +
  • Functions and Procedures inside classes are not allowed (for now)
  • +
  • RETURN <LiteralValue> inside an ASSIGN method will no longer allocate a variable and produce an warning
  • +
  • Several keywords are now also allowed as Identifier (and will no longer have to be prefixed with @@ ):
    Delegate, Enum, Event, Field, Func, Instance, Interface, Operator, Proc, Property, Structure, Union, VOStruct and many more
    As a result the following is now valid code (but not recommended):

    FUNCTION Start AS VOID
      LOCAL INTERFACE AS STRING
      LOCAL OPERATOR AS LONG
      ? INTERFACE, OPERATOR
      RETURN
  • +
    + You can see that the Visual Studio language support also recognizes that INTERFACE and OPERATOR are not used as keywords in this context + Bug fixes + +
  • Fixed a problem with the REPEAT UNTIL statement
  • +
  • Fixed a crash for code with a DO CASE without a matching END CASE
  • +
  • Fixed several issues for the code generation for _DLL FUNCTIONs and _DLL PROCEDUREs
  • +
  • Fixed a problem (in the Roslyn code) with embedding Native Resources in the Assembly.
  • +
  • Fixed a problem with the _OR() and _AND() operators with more than 2 arguments.
  • +
  • Added support for Pointer dereferencing using the VO/Vulcan Syntax : DWORD(p) => p[1]
  • +
  • Fixed several problems with the @ operator
  • +
  • When two partial classes had the same name and a different casing the compiler would not properly merge the class definitions.
  • +
  • Fixed a crash when a #define in code was the same as a define passed on the commandline
  • +
  • Indexed pointer access was not respecting the /AZ compiler option (and always assumed 0 based arrays). This has been fixed
  • +
  • Fixed a problem with the caching of preprocessed files, especially files that contain #ifdef constructs.
  • +
  • Fixed a problem which could occur when 2 partial classes had the same name but a different case
  • +
  • Fixed a compiler crash when a referenced assembly had duplicate namespaces that were only different in Case
  • +
  • Fixed problems with Functions that have a [DllImport] attribute.
  • +
  • Error messages for ACCESS/ASSIGN methods would sometimes point to a strange location in the source file. This has been fixed.
  • +
  • Fixed a problem with Init Procedures that had a STATIC modifier
  • +
  • Fixed a problem in the preprocessor when detecting the codepage for a header file. This could cause problems reading header files with special characters (such as the copyright sign ©)
  • +
  • And many more changes.
  • +
    + Visual Studio Integration + +
  • Added support for all compiler options in the UI and the build system
  • +
  • Fixed problems with dependent file items in subfolders
  • +
  • The Optimize compiler option was not working
  • +
  • The 'Clean' build option now also cleans the error list
  • +
  • Under certain conditions the error list would remain empty even though there were messages in the output pane. This has been fixed.
  • +
  • The <Documentationfile> property inside the xsproj file would cause a rebuild from the project even when the source was not changed
  • +
  • Earlier versions of XPorter could create xsproj files that would not build properly. The project system now fixes this automatically
  • +
  • Fixed a problem with the build system and certain kind of embedded managed resources
  • +
    + + Documentation + +
  • We have added many descriptions to the commandline options
  • +
  • We have added a list of the most common compiler errors and warnings.
  • +
    + + + Changes in 0.2.8 + Compiler + VO/Vulcan Compatibility + +
  • Default Parameters are now handled like VO and Vulcan do. This means that you can also have date constants, symbolic constants etc as default parameter
  • +
  • String Single Equals rules are now 100% identical with Visual Objects. We found one case where Vulcan does not return the same result as Visual Objects. We have chosen to be compatible with VO.
  • +
  • When compiling in VO/Vulcan mode then the init procedures in the VO SDK libraries are automatically called. You do not have to call these in your code anymore
    Also Init procedures in the main assembly are called at startup.
  • +
  • The /vo7 compiler option (Implicit casts and conversions) has been implemented. This also includes support to use the @ sign for REF parameters
  • +
  • You can now use the DOT operator to access members in VOSTRUCT variables
  • +
  • We have fixed several USUAL - Other type conversion problems that required casts in previous builds
  • +
  • The compiler now correctly parses VO code that contains DECLARE METHOD, DECLARE ACCESS and DECLARE ASSIGN statements and ignores these
  • +
  • The compiler now parses "VO Style" compiler pragma's (~"keyword" as white-space and ignores these.
  • +
  • Fixed a problem where arrays declared with the "LOCAL aSomething[10] AS ARRAY" syntax would not be initialized with the proper number of elements
  • +
  • Fixed a problem when calling Clipper Calling Convention constructors with a single USUAL parameter
  • +
  • Attributes on _DLL entities would not be properly compiled. These are recognized for now but ignored.
  • +
  • Fixed several numeric conversion problems
  • +
    + New features + +
  • We have added support for Collection Initializers and Object Initializers
  • +
  • Anonymous type members no longer have to be named. If you select a property as an anonymous type member then the same property name will be used for the anonymous type as well.
  • +
  • Missing closing keywords (such as NEXT, ENDIF, ENDCASE and ENDDO) now produce better error messages
  • +
  • IIF() Expressions are now also allowed as Expression statement. The generated code will be the same as if an IF statement was used
  • +
    + FUNCTION IsEven(nValue as LONG) AS LOGIC
      LOCAL lEven as LOGIC
      IIF( nValue %2 == 0, lEven := TRUE, lEven := FALSE)
    RETURN lEven
    + We really do not encourage to hide assignments like this, but in case you have used this coding style,it works now <g>. + +
  • AS VOID is now allowed as (the only) type specification for PROCEDUREs
  • +
  • We have added a .config file to the exe for the shared compiler that should make it faster
  • +
  • The XSharpStdDefs.xh file in the XSharp is now automatically included when compiling. This file declares the CRLF constant for now.
  • +
  • Include files are now cached by the compiler. This should increase the compilation speed for projects that depend on large included files, such as the Win32APILibrary header file from Vulcan
  • +
  • When a function is found in an external assembly and a function with the same name and arguments is found in the current assembly, then the function in the current assembly is used by the compiler
  • +
  • Compiler error messages for missing closing symbols should have been improved
  • +
  • Compiler error messages for unexpected tokens have been improved
  • +
    + Bug fixes + +
  • Several command-line options with a minus sign were not properly handled by the compiler
  • +
  • Fixed several crashes related to assigning NULL_OBJECT or NULL to late bound properties have been fixed
  • +
  • Partial class no longer are required to specify the parent type on every source code location. When specified, the parent type must be the same of course. Parent interfaces implemented by a class can also be spread over multiple locations
  • +
  • We have fixed a crash that could happen with errors/warnings in large include files
  • +
  • Abstract methods no longer get a Virtual Modifier with /vo3
  • +
  • Fixed a problem with virtual methods in child classes that would hide parent class methods
  • +
  • Automatic return value generation was also generating return values for ASSIGN methods. This has been fixed.
  • +
  • We fixed a problem with the Join Clauses for LINQ Expressions that would cause a compiler exception
  • +
  • The /vo10 (compatible iif) compiler option no longer adds casts in the Core dialect. It only does that for the VO/Vulcan dialect
  • +
    + Visual Studio Integration + We have changed the way the error list and output window are updated. In previous version some lines could be missing on the output window, and the error code column was empty. This should work as expected now. + +
  • We have merged some code from some other MPF based project systems, such as WIX (called Votive), NodeJS and Python (PTVS) to help extend our project system. As a result:
  • + +
  • Our project system now has support for Linked files
  • +
  • Our project system now has support for 'Show All Files' and you can now Include and Exclude files. This setting is persisted in a .user file, so you can exclude this from SCC if you want.
  • +
  • We have made some changes to support better 'Drag and Drop'
  • +
    +
    + +
  • We have fixed several issues with regard to dependent items
  • +
  • When you include a file that contains a form or user control, this is now recognized and the appropriate subtype is set in the project file, so you can open the windows forms editor
  • +
  • We are now supporting source code generation for code behind files for .Settings and .Resx files
  • +
  • The combobox in the Managed Resource editor and Managed Settings tool to choose between internal code and public code is now enabled. Selecting a different value in the combobox will change the tool in the files properties.
  • +
  • The last response file for the compiler and native resource compiler are now saved in the users Temp folder to aid in debugging problems.
  • +
    + +
  • The response file now has each compiler option to a new line to make it easier to read and debug when this is necessary.
  • +
  • The code generation now preserves comments between entities (methods)
  • +
  • We fixed several minor issues in the templates
  • +
  • When the # of errors and warnings is larger than the built-in limit of 500, then a message will be shown that the error list was truncated
  • +
  • At the end of the build process a line will be written to the output window with the total # of warnings and errors found
  • +
  • The colors in the Source Code Editor are now shared with the source code editors for standard languages such as C# and VB
  • +
  • When you have an inactive code section in your source code, embedded in an #ifdef that evaluates to FALSE then that section will be visibly colored gray and there will be no keyword highlighting. The source code parser for the editor picks up the include files and respects the path settings. Defines in the application properties dialog and the active configuration are not respected yet. That will follow in the next build.
  • +
    + + + Changes in 0.2.7.1 + Compiler + +
  • The compiler was not accepting wildcard strings for the AssemblyFileVersion Attribute and the AssemblyInformationVersion attribute. This has been fixed
  • +
  • The #Pragma commands #Pragma Warnings(Push) and #Pragma Warnings(Pop) were not recognized. This has been fixed.
  • +
  • The compiler was not recognizing expressions like global::System.String.Compare(..). This has been fixed
  • +
    + Visual Studio Integration + +
  • Dependent items in subfolders of a project were not recognized properly and could produce an error when opening a project
  • +
  • Fixed a problem in the VulcanApp Template
  • +
  • The Windows Forms Editor would not open forms in a file without begin namespace .. end namespace. This has been fixed
  • +
  • Source code comments between 'entities' in a source file is now properly saved and restored when the source is regenerated by the form editor
  • +
  • Unnecessary blank lines in the generate source code are being suppressed
  • +
  • The XPorter tool is now part of the Installation
  • +
  • Comments after a line continuation character were not properly colored
  • +
  • Changed the XSharp VS Editor Color scheme to make certain items easier to read
  • +
  • New managed resource files would not be marked with the proper item type. As a result the resources would not be available at runtime. This has been fixed.
  • +
  • Added 'Copy to Output Directory' property to the properties window
  • +
    + Setup + +
  • The installer, exe files and documentation are now signed with a certificate
  • +
    + + + Changes in 0.2.7 + Compiler + New features: + +
  • Added support for the VOSTRUCT and UNION types
  • +
  • Added support for Types as Numeric values, such as in the construct
    IF UsualType(uValue) == LONG
  • +
  • Added a FIXED statement and FIXED modifier for variables
  • +
  • Added support for Interpolated Strings
  • +
  • Empty switch labels inside SWITCH statements are now allowed. They can share the implementation with the next label.
    Error 9024 (EXIT inside SWITCH statement not allowed) has been added and will be thrown if you try to exit out of a loop around the switch statement.
    This is not allowed.
  • +
  • Added support for several /vo compiler options:
    - vo8 (Compatible preprocessor behavior). This makes the preprocessor defines case insensitive. Also a define with the value FALSE or 0 is seen as 'undefined'
    - vo9 (Allow missing return statements) compiler option. Missing return values are also allowed when /vo9 is used.  
    Warnings 9025 (Missing RETURN statement) and 9026 (Missing RETURN value) have been added.
    - vo12 (Clipper Integer divisions)
  • +
  • The preprocessor now automatically defines the macros __VO1__ until __VO15__ with a value of TRUE or FALSE depending on the setting of the compiler option
  • +
  • The FOX version of the compiler is now distributed in Release mode and much faster. A debug version of the compiler is also installed in case it is needed to aid in finding compiler problems.
  • +
    + Changed behavior + +
  • The compiler generated Globals class for the Core dialect is now called Functions and no longer Xs$Globals.
  • +
  • Overriding functions in VulcanRTFuncs can now be done without specifying the namespace:
    When the compiler finds two candidate functions and one of them is inside VulcanRTFuncs then the function that is not in VulcanRTFuncs is chosen.
  • +
  • Warning 9001 (unsafe modifier implied) is now suppressed for the VO/Vulcan dialect. You MUST pass the /unsafe compiler option if you are compiling unsafe code though!
  • +
  • Improved the error messages for the Release mode of the compiler
  • +
    + Bug fixes + +
  • RETURN and THROW statements inside a Switch statement would generate an 'unreachable code' warning. This has been fixed
  • +
  • Fixed several problems with mixing signed and unsigned Array Indexes
  • +
  • Fixed several problems with the FOR .. NEXT statement. The "To" expression will now be evaluated for every iteration of the loop, just like in VO and Vulcan.
  • +
  • Fixed several compiler crashes
  • +
  • Fixed a problem with implicit code generation for constructors
  • +
  • Fixed a visibility problem with static variables inside static functions
  • +
    + Visual Studio Integration + +
  • Fixed a problem that the wrong Language Service was selected when XSharp and Vulcan.NET were used in the same Visual Studio and when files were opened from the output window or the Find Results window
  • +
  • Fixed some problems with 'abnormal' line endings in generated code
  • +
  • Fixed a problem in the Class Library template
  • +
  • Fixed a problem with non standard command lines to Start the debugger
  • +
    + + Changes in 0.2.6 + Compiler + +
  • Added alternative syntax for event definition. See EVENT keyword in the documentation
  • +
  • Added Code Block Support
  • +
  • Implemented /vo13 (VO compatible string comparisons)
  • +
  • Added support for /vo4 (VO compatible implicit numeric conversions)
  • +
  • Aliased expressions are now fully supported
  • +
  • Fixed a problem with the &= operator
  • +
  • Fixed several crashes for incorrect source code.
  • +
  • Fixed several problems related to implicit conversions from/to usual, float and date
  • +
  • Indexed properties (such as String:Chars) can now be used by name
  • +
  • Indexed properties can now have overloads with different parameter types
  • +
  • Added support for indexed ACCESS and ASSIGN
  • +
  • Fixed a problem when calling Clipper Calling Convention functions and/or methods with a single parameter
  • +
  • Fixed a crash with defines in the preprocessor
  • +
  • _CODEBLOCK is now an alias for the CODEBLOCK type
  • +
  • Fixed a crash for properties defined with parentheses or square brackets, but without actual parameters
  • +
    + Visual Studio Integration + +
  • Completed support for .designer.prg for Windows.Forms
  • +
  • Fixed an issue in the CodeDom generator for generating wrappers for Services
  • +
  • The XSharp Language service will no longer be used for Vulcan PRG files in a Side by Side installation
  • +
  • Editor performance for large source files has been improved.
  • +
  • All generated files are now stored in UTF, to make sure that special characters are stored correctly. If you are seeing warnings about code page conversions when generating code, then save files as UTF by choosing "File - Advanced Save Options", and select a Unicode file format, from the Visual Studio Menu.
  • +
    + + Changes in 0.2.51 + Visual Studio Integration & Build System + +
  • The Native Resource compiler now "finds" header files, such as "VOWin32APILibrary.vh" in the Vulcan.NET include folder. Also the output of the resource compiler is now less verbose when running in "normal" message mode. When running in "detailed" or "diagnostics" mode the output now also includes the verbose output of the resource compiler.
  • +
    + Compiler + +
  • Fixed a problem that would make PDB files unusable
  • +
  • The error "Duplicate define with different value" (9012) has been changed to warning, because our preprocessor does a textual comparison and does not "see" that "10" and "(10)" are equal as well as "0xA" and "0xa". It is your responsibility of course to make sure that the values are indeed the same.
  • +
  • Exponential REAL constants were only working with a lower case 'e'. This is now case insensitive
  • +
  • Made several changes to the _DLL FUNCTION and _DLL PROCEDURE rules for the parser. Now we correctly recognize the "DLL Hints " (#123) and also allow extensions in these definitions. Ordinals are parsed correctly as well, but produce an error (9018) because the .Net runtime does not support these anymore. Also the Calling convention is now mandatory and the generated IL code includes SetLastError = true and ExactSpelling = true.
  • +
  • Fixed a problem with the ~ operator. VO and Vulcan (and therefore X#) use this operator as unary operator and as binary operator.
    The unary operator does a bitwise negation (Ones complement), and the binary operator does an XOR.
    This is different than C# where the ~ operator is Bitwise Negation and the ^ operator is an XOR (and our Roslyn backend uses the C# syntax of course).
  • +
    + + Changes in 0.2.5 + Visual Studio Integration + +
  • Fixed a problem where the output file name would contain a pipe symbol when building for WPF
  • +
  • Fixed a problem with the Item type for WPF forms, pages and user controls
  • +
  • The installer now has an option to not take away the association for PRG, VH and PPO items from an installed Vulcan project system.
  • +
  • Added support for several new item types in the projects
  • +
  • Added support for nested items
  • +
  • Added several item templates for WPF, RC, ResX, Settings, Bitmap, Cursor etc.
  • +
    + Build System + +
  • Added support for the new /vo15 command line switch.
  • +
  • Added support for compiling native resources.
  • +
    + Compiler + +
  • A reference to VulcanRT and VulcanRTFuncs is now mandatory when compiling in VO/Vulcan dialect
  • +
  • Added support for indexed access for VO/Vulcan Arrays
  • +
  • Added support for VO/Vulcan style Constructor chaining (where SUPER() or SELF() call is not the first call inside the constructor body)
  • +
  • Added support for the &() macro operator in the VO/Vulcan dialect
  • +
  • Added support for the FIELD statement in the VO/Vulcan dialect
  • +
    + + +
  • The statement is recognized by the compiler
  • +
  • Fields listed in the FIELD statement now take precedence over local variables or instance variables with the same name
  • +
    +
    + +
  • Added support for the ALIAS operator (->) in the VO/Vulcan dialect, with the exception of the aliased expressions (AREA->(<Expression>))
  • +
  • Added support for Late bound code (in the VO/Vulcan dialect)
  • +
    + + +
  • Late bound method calls
  • +
  • Late bound property get
  • +
  • Late bound property set
  • +
  • Late bound delegate invocation
  • +
    +
    + +
  • Added a new /vo15 command line option (Allow untyped Locals and return types):
    By default in the VO/Vulcan dialect missing types are allowed and replaced with the USUAL type.
    When you specify /vo15- then untyped locals and return types are not allowed and you must specify them.
    Of course you can also specify them as USUAL
  • +
    + +
  • The ? and ?? statement are now directly mapped to the appropriate VO/Vulcan runtime function when compiling for the VO/Vulcan dialect
  • +
  • We now also support the VulcanClassLibrary attribute and VulcanCompilerVersion attribute for the VO & Vulcan dialect.
    With this support the Vulcan macro compiler and Vulcan Runtime should be able to find our functions and classes
  • +
  • The generated static class name is now more in par with the class name that Vulcan generates in the VO & Vulcan dialect.
  • +
  • Added several implicit conversion operations for the USUAL type.
  • +
  • When accessing certain features in the VO & Vulcan dialect (such as the USUAL type) the compiler now checks to see if VulcanRTFuncs.DLL and/or VulcanRT.DLL are included.
    When not then a meaningful error message is shown.
  • +
  • Added support for the intrinsic function _GetInst()
  • +
  • Fixed a problem with case sensitive namespace comparisons
  • +
  • Fixed a problem with operator methods
  • +
    + +
  • Added preprocessor macros __DIALECT__, __DIALECT_CORE__, __DIALECT_VO__ and __DIALECT_VULCAN__
  • +
  • The _Chr() pseudo function will now be mapped to the Chr() function
  • +
    + +
  • Added support for missing arguments in arguments lists (VO & Vulcan dialect only)
  • +
  • Fixed a crash when calculating the position of tokens in header files
  • +
  • The installer now offers to copy the Vulcan Header files to the XSharp Include folder
  • +
  • Added support for skipping arguments in (VO) literal array constructors
  • +
    + Documentation + +
  • Added the XSharp documentation to the Visual Studio Help collection
  • +
  • Added reference documentation for the Vulcan Runtime
  • +
    + + Changes in 0.2.4 + Visual Studio Integration + +
  • Double clicking errors in the error browser now correctly opens the source file and positions the cursor
  • +
  • Fixed several problems in the project and item templates
  • +
  • The installer now also detects Visual Studio 15 Preview and installs our project system in this environment.
  • +
    + Build System + +
  • Fixed a problem with the /unsafe compiler option
  • +
  • Fixed a problem with the /doc compiler option
  • +
  • Treat warnings as error was always enabled. This has been fixed.
  • +
    + Compiler + +
  • Added support for Lambda expressions with an expression list
  • +
    + LOCAL dfunc AS System.Func<Double,Double> + dfunc := {|x| x := x + 10, x^2} + ? dfunc(2) + +
  • Added support for Lambda expressions with a statement list
  • +
    + LOCAL dfunc AS System.Func<Double,Double> + dfunc :={|x| + ? 'square of', x + RETURN x^2 + } + +
  • Added support for the NAMEOF intrinsic function
  • +
    + FUNCTION Test(cFirstName AS STRING) AS VOID + FUNCTION Test(cFirstName AS STRING) AS VOID + IF String.IsNullOrEmpty(cFirstName) + THROW ArgumentException{"Empty argument", nameof(cFirstName)} + ENDIF + +
  • Added support for creating methods and functions with Clipper calling convention (VO and Vulcan dialect only)
  • +
  • Using Statement now can contain a Variable declaration:
  • +
    + Instead of: +    VAR ms := System.IO.MemoryStream{} +    BEGIN USING ms +         // do the work + + END USING + You can now write + BEGIN USING VAR ms := System.IO.MemoryStream{} + // do the work + END USING + +
  • Added support for /vo10 (Compatible IIF behavior). In the VO and Vulcan dialect the expressions are cast to USUAL. In the core dialect the expressions are cast to OBJECT.
  • +
    + New language features for the VO and Vulcan dialect + +
  • Calling the SELF() or SUPER() constructor is now allowed anywhere inside a constructor (VO and Vulcan dialect only). The Core dialect still requires constructor chaining as the first expression inside the constructor body
  • +
  • Added support for the PCOUNT, _GETFPARAM and _GETMPARAM intrinsic functions
  • +
  • Added support for String2Psz() and Cast2Psz()
  • +
  • Added support for BEGIN SEQUENCE … END
  • +
  • Added support for BREAK
  • +
    + Fixed several problems: + +
  • Nested array initializers
  • +
  • Crash for BREAK statements
  • +
  • Assertion error for generic arguments
  • +
  • Assertion on const implicit reference
  • +
  • Allow ClipperCallingConvention Attribute on Constructors, even when it is marked as ‘for methods only’
  • +
  • Fixed a problem with Global Const declarations
  • +
  • __ENTITY__ preprocessor macro inside indexed properties
  • +
    + + Changes in 0.2.3 + Visual Studio Integration + +
  • We have changed to use the MPF style of Visual Studio Integration.
  • +
  • We have added support for the Windows Forms Editor
  • +
  • We have added support for the WPF Editor
  • +
  • We have added support for the Codedom Provider, which means a parser and code generator that are used by the two editors above
  • +
  • The project property pages have been elaborated. Many more features are available now.
  • +
  • We have added several templates
  • +
    + Build System + +
  • Added support for several new commandline options, such as /dialect
  • +
  • The commandline options were not reset properly when running the shared compiler. This has been fixed.
  • +
    + +
  • The build system will limit the # of errors passed to Visual Studio to max. 500 per project. The commandline compiler will still show all errors.
  • +
    + Compiler + +
  • We have started work on the Bring Your Own Runtime support for Vulcan. See separate heading below.
  • +
  • The __SIG__ and __ENTITY__ macros are now also supported, as well as the __WINDIR__, __SYSDIR__ and __WINDRIVE__ macros
  • +
  • The debugger instructions have been improved. You should have a much better debugging experience with this build
  • +
  • Several errors that indicated that there are visibility differences between types and method arguments, return types or property types have been changed into warnings. Of course you should consider to fix these problems in your code.
  • +
  • The #Error and #warning preprocessor command no longer require the argument to be a string
  • +
  • The SLen() function call is now inlined by the compiler (just like in Vulcan)
  • +
  • The AltD() function will insert a call to "System.Diagnostics.Debugger.Break" within a IF System.Diagnostics.Debugger.IsAttached check
  • +
  • Several compiler crashes have been fixed
  • +
  • Added support for the PARAMS keyword for method and function parameters.
  • +
  • Fixed a problem for the DYNAMIC type.
  • +
    + BYOR + +
  • XBase type names are resolved properly (ARRAY, DATE, SYMBOL, USUAL etc)
  • +
  • Literal values are now resolved properly (ARRAY, DATE, SYMBOL)
  • +
  • NULL_ literals are resolved properly (NULL_STRING follows the /vo2 compiler option, NULL_DATE, NULL_SYMBOL)
  • +
  • The /vo14 compiler option (Float literals) has been implemented
  • +
  • The compiler automatically inserts a "Using Vulcan" and "using static VulcanRtFuncs.Functions" in each program
  • +
  • You MUST add a reference to the VulcanRTFuncs and VulcanRT assembly to your project. This may be a Vulcan 3 and also a Vulcan 4 version of the Runtime. Maybe Vulcan 2 works as well, we have not tested it.
  • +
  • Calling methods with Clipper calling convention works as expected.
  • +
  • Methods/Functions without return type are seen as methods that return a USUAL
  • +
  • If a method/function contains typed and typed parameters then the untyped parameters are seen as USUAL parameters
  • +
  • Methods with only untyped parameters (Clipper calling convention) are not supported yet
  • +
  • The ? command will call AsString() on the arguments
  • +
    + + Changes in 0.2.2 + Visual Studio Integration + +
  • Added more project properties. One new property is the "Use Shared Compiler" option. This will improve compilation speed, but may have a side effect that some compiler (parser) errors are not shown in details.
    If you experience this, then please disable this option.
  • +
  • Added more properties to the Build System. All C# properties should now also be supported for X#, even though some of them are not visible in the property dialogs inside VS.
  • +
  • Added a CreateManifest task to the Build System so you will not get an error anymore for projects that contain managed resources
  • +
  • The performance of the editor should be better with this release.
  • +
  • Marking and unmarking text blocks as comment would not always be reflected in the editor colors. This has been fixed.
  • +
    + Compiler + +
  • We have added a first version of the preprocessor. This preprocessor supports the #define command, #ifdef, #ifndef, #else, #endif, #include, #error and #warning. #command and #translate (to add user defined commands) are not supported yet.
  • +
  • Missing types (in parameter lists, field definitions etc) were sometimes producing unclear error messages. We have changed the compiler to produce a "Missing Type" error message.
  • +
  • We rolled the underlying Roslyn code forward to VS 2015 Update 1. Not that you see much of this from the outside <g>, but several fixes and enhancements have made their way into the compiler.
  • +
  • Added a YIELD EXIT statement (You can also use YIELD BREAK).
  • +
  • Added an (optional) OVERRIDE keyword which can be used as modifier on virtual methods which are overridden in a subclass.
  • +
  • Added a NOP keyword which you can use in code which is intentionally empty (for example the otherwise branch of a case statement. The compiler will no longer warn about an empty block when you insert a NOP keyword there.
  • +
  • The On and Off keywords could cause problems, because they were not positional (these are part of the pragma statement). This has been fixed.
  • +
  • _AND() and _OR() expressions with one argument now throw a compiler error.
  • +
  • The compiler now recognizes the /VO14 (store literals as float) compiler switch (it has not been implemented yet).
  • +
  • Added a ** operator as alias for the ^ (Exponent) operator.
  • +
  • Added an "unsupported" error when using the Minus operator on strings.
  • +
  • Fixed a "Stack overflow" error in the compiler that could occur for very long expressions.
  • +
  • The right shift operator no longer conflicts with two Greater Than operators, which allows you to declare or create generics without having to put a space between them.
    (var x := List<Tuple<int,int>>{}
  • +
    + + Changes in 0.2.1 + Visual Studio Integration + +
  • Added and improved several project properties
  • +
  • Fix a problem with the "Additional Compiler Options"
  • +
  • Improved coloring in the editor for Keywords, Comments etc. You can set the colors from the Tools/Options dialog under General/Fonts & Colors. Look for the entries with the name "XSharp Keyword" etc.
  • +
  • Added Windows Forms Template
  • +
    + Compiler + +
  • Several errors have been demoted to warnings to be more compatible with VO/Vulcan
  • +
  • Added support for Comment lines that start with an asterisk
  • +
  • Added support for the DEFINE statement. For now the DEFINE statement MUST have a type
    DEFINE WM_USER := 0x0400 AS DWORD
  • +
  • Fixed problem with Single Line Properties with GET and SET reversed
  • +
  • Several fixes for Virtual and Non virtual methods in combination with the /VO3 compatibility option
  • +
    + + Changes in 0.1.7 + +
  • The "ns" (add default namespace to classes without namespace) has been implemented
  • +
  • The "vo3" compiler option (to make all methods virtual ) has been implemented
  • +
  • Fixed an issue where the send operator on an expression between parentheses was not compiling properly
  • +
  • Relational operators for strings (>, >=, <, <=) are now supported. They are implemented using the String.Compare() method.
  • +
  • Fixed a problem with local variables declared on the start line from FOR .. NEXT statements
  • +
  • Added first version of the documentation in CHM & PDF format
  • +
  • Added several properties to the Visual Studio Project properties dialog to allow setting the new compiler options
  • +
  • Fixed a problem in the Targets files used by MsBuild because some standard macros such as $(TargetPath) were not working properly
  • +
  • XIDE 0.1.7 is included. This version of XIDE is completely compiled with XSharp !
  • +
  • The name of some of the MsBuild support files have changed. This may lead to problems loading a VS project if you have used the VS support from the previous build. If that is the case then please edit the xsproj file inside Visual Studio and replace all references of "XSharpProject" with "XSharp" . Then safe the xsproj file and try to reload the project again
  • +
  • The WHILE.. ENDDO (a DO WHILE without the leading DO) is now recognized properly
  • +
    + + Changes in 0.1.6 + +
  • This version now comes with an installer
  • +
  • This version includes a first version of the Visual Studio Integration. You can edit, build, run and debug inside Visual Studio. There is no "intellisense" available.
  • +
  • The compiler now uses 1-based arrays and the “az” compiler option has been implemented to switch the compiler to use 0-based arrays.
  • +
  • The "vo2" compiler option (to initialize string variables with String.Empty) has been implemented
  • +
  • Please note that there is no option in the VS project properties dialog yet for the az and vo2 compiler options. You can use the "additional compiler options" option to specify these compiler options.
  • +
  • The text "this" and "base" in error messages has been changed to "SELF" and "SUPER"
  • +
  • Error of type “visibility” (for example public properties that expose private or internal types) have been changed to warnings
  • +
  • Fixed a problem with TRY … ENDTRY statements without CATCH clause
  • +
  • The compiler now has a better resolution for functions that reside in other (X#) assemblies
  • +
  • Fixed a problem which could lead to an "ambiguous operator" message when mixing different numeric types.
  • +
    + + Changes in 0.1.5 + +
  • When an error occurs in the parsing stage, X# no longer enters the following stages of the compiler to prevent crashes. In addition to the errors from the parser also an error 9002 is displayed.
  • +
  • Parser errors now also include the source file name in the error message and have the same format as other error messages. Please note that we are not finished yet with handling these error messages. There will be improvements in the format of these error messages in the upcoming builds.
  • +
  • The compiler will display a “feature not available” (8022) error when a program uses one of the Xbase types (ARRAY, DATE, FLOAT, PSZ, SYMBOL, USUAL).
  • +
  • Fixed an error with VOSTRUCT and UNION types
  • +
  • Fixed a problem with the exclamation mark (!) NOT operator
  • +
    + + Changes in 0.1.4 + +
  • Several changes to allow calculations with integers and enums
  • +
  • Several changes to allow VO compatible _OR, _AND, _NOT an _XOR operations
  • +
  • Fix interface/abstract VO properties
  • +
  • Insert an implicit “USING System” only if not explicitly declared
  • +
  • Error 542 turned to warning (members cannot have the same name as their enclosing type)
  • +
  • Changes in the .XOR. expression definition
  • +
  • Fix double quote in CHAR_CONST lexer rule
  • +
  • Allow namespace declaration in class/struct/etc. name (CLASS Foo.Bar)
  • +
  • Fix access/assign crash where identifier name was a (positional) keword: ACCESS Value
  • +
  • Preprocessor keywords were not recognized after spaces, but only at the start of the line. This has been fixed.
  • +
  • Prevent property GET SET from being parsed as expression body
  • +
  • Fix default visibility for interface event
  • +
  • Unsafe errors become warnings with /unsafe option, PTR is void*
  • +
  • Fix dim array field declaration
  • +
  • Initial support of VO cast and VO Conversion rules (TYPE(_CAST, Expression) and TYPE(Expression)). _CAST is always unchecked (LONG(_CAST, dwValue)) and convert follows the checked/unchecked rules (LONG(dwValue))
  • +
  • Fixed problem with codeblock with empty parameter list
  • +
  • Fixed problems with GlobalAttributes.
  • +
  • An AUTO property without GET SET now automatically adds a GET and SET block
  • +
  • Allow implicit constant double-to-single conversion
  • +
    + + Changes in 0.1.3 + +
  • Change inconsistent field accessibility error to warning and other similar errors
  • +
  • Added commandline support for Vulcan arguments. These arguments no longer result in an error message, but are not really implemented, unless an equivalent argument exists for the Roslyn (C#) compiler. For example: /ovf and /fovf are both mapped to /checked, /wx is mapped to /warnaserror. /w should not be used because that has a different meaning /warning level). /nowarn:nnnn should be used in stead
  • +
  • Fixed problem where the PUBLIC modifier was assigned to Interface Members or Destructors
  • +
  • Prevent expression statements from starting with CONSTRUCTOR() or DESTRUCTOR()
  • +
  • Added support for ? statement without parameters
  • +
  • The default return type for assigns is now VOID when not specified
  • +
  • Added support for “old Style” delegate instantiation
  • +
  • Added support for Enum addition
  • +
  • Added an implicit empty catch block for TRY .. END TRY without catch and finally
  • +
  • Added support for the DESCENDING keyword in LINQ statements
  • +
  • Added support for VIRTUAL and OVERRIDE for Properties and Events
  • +
  • Prevent implied override insertion for abstract interface members
  • +
  • Fixed a problem where System.Void could not be resolved
  • +
  • Fixed problem with Property Generation for ACCESS/ASSIGN
  • +
  • Fixed problem with Abstract method handling
  • +
    + + Changes in 0.1.2.1 + +
  • Added default expression
  • +
  • Fixed problem with events
  • +
  • Fixed some small lexer problems
  • +
  • Fixed problem with _DLL FUNCTION and _DLL PROCEDURE
  • +
    + + Changes in 0.1.2 + +
  • Fixed problem with handling escape sequences in extended strings
  • +
  • Fixed issue in FOR.. NEXT statements
  • +
  • Fixed a problem with SWITCH statements
  • +
  • Fixed a problem with the sizeof() operator
  • +
  • Fixed a problem in the REPEAT .. UNTIL statement
  • +
  • Fixed a problem in TRY .. CATCH .. FINALLY .. END TRY statements.
  • +
  • Fixed issue in Conditional Access Expression ( Expr ? Expr)
  • +
  • Allow bound member access of name with type args
  • +
  • Fixed problem in LOCAL statement with multiple locals
  • +
  • Fixed a problem when compiling with debug info for methods without a body
  • +
  • Optimized the Lexer. This should increase the compile speed a lot
  • +
  • Fixed a problem in the code that reports that a feature is not supported yet
  • +
  • Fixed a problem when defining Generic types with a STRUCTURE constraint
  • +
  • Compiler macros (__ENTITY__, __LINE__ etc) were causing a crash. For now the compiler inserts a literal string with the name of the macro.
  • +
  • Build 0.1.1 did not contain XSC.RSP
  • +
  • Fixed a problem where identifiers were not recognized when they were matching a (new) keyword
  • +
    + + +
    diff --git a/docs/Help/Topics/VersionHistoryXSharp2.xml b/docs/Help/Topics/VersionHistoryXSharp2.xml new file mode 100644 index 0000000000..237a0c1f2f --- /dev/null +++ b/docs/Help/Topics/VersionHistoryXSharp2.xml @@ -0,0 +1,4440 @@ + + + + History XSharp 2 + + Changes + Runtime chapter + String Literals + Version History + XSharp 2 + + +
    + History XSharp 2 +
    + Changes in 2.24.0.1 + Compiler
    Bug fixes
    + +
  • Documentation generation for VFP classes for members without visibility modifier was not working (#1664)
  • +
  • Fixed an issue with default parameter values, where the type of the default did not match the type of the parameter. For example using a LONG default value for a Decimal parameter (#1733)
  • +
    + Build System
    Bug fixes
    + +
  • The WriteCodeFragment task now properly supports the _Parameter1, _Parameter2 etc parameters, just like the C# build system does.
  • +
    + Runtime
    Bug fixes
    + +
  • Fixed an issue with late bound calls to overloaded methods (#1696)
  • +
  • Fixed problem with ambiguous call error on the GoMonth() function (VFP dialect) (#1724)
  • +
  • Fixed problem with the COPY TO command when using the VIA clause (#1726)
  • +
    + Visual Studio integration
    Bug fixes
    + +
  • When a file was deleted from a project, then the file would not be deleted from the intellisense database. This has been fixed.
  • +
  • Goto definition no longer includes source from prg files with buildaction None (#1630)
  • +
  • Intellisense was not showing field in VFP classes for fields without visibility modifier (#1725)
  • +
  • The ToggleLineComment and ToggleBlockComment functions were not properly maintaining leading whitespace (#1728)
  • +
  • Fixed an issue with Code Generation for AssemblyCustomAttributes
  • +
  • Fixed a problem with the Debugger Expression Evaluator in VS 2017 and VS 2019
  • +
    + New Features + +
  • Added context menu option to generate Windows Forms Form from an existing VO Form (#1366)
  • +
  • The code generator now automatically generates END CONSTRUCTOR, END METHOD etc.
  • +
    + VOXporter + New features + +
  • Add special tags "VXP-NOCHANGE", "{VOXP:NOCHANGE}" that instruct VOXporter to not modify at all the code from a module/prg file  (#1723)
  • +
    + XIDE + General + +
  • Added View->Hide Side Panes (SHIFT+F4) option to quickly show/hide the left/right panes in the IDE
  • +
  • Enabled the Debug->View DB Workareas debug window
  • +
  • Fixed problem with new applications defaulting to CLR2 when no gallery template is used
  • +
  • Added folder button for "App to run" option in th application properties window
  • +
  • Added several "Tip of the day" items
  • +
  • Added Preferences/Highlight active file caption option
  • +
  • Added Preferences/Paint file captions per application option
  • +
  • Added keyboard shortcut information to the File->Navigate menu items
  • +
  • Added "Dock To Pane" options to tab page context menu of toolwindows
  • +
  • Added Detach/Attach to main IDE window context menu options for editor files
  • +
  • Added regular context menu options also for files in floating windows
  • +
  • Toolwindows can now be closed also with middle mouse button click
  • +
    + Changes in 2.23.0.2 + Compiler + New features + +
  • Added a compiler warning when assigning a constant "NIL" to a non-usual var (#1688)
  • +
    + Bug fixes + +
  • Fixed a problem with XML documentation generation for class properties in the VFP dialect (#1664)
  • +
  • Fixed compiler crash with syntax errors in interpolated strings (#1672)
  • +
  • Fixed problems with static entities when an app has prg files with similar names (#1677)
  • +
  • Fixed conflict between same named access and field in a parent class (#1679)
  • +
  • Fixed problem with the star (*) comment line marker when used with a semi-colon (;) in the VFP dialect (#1685)
  • +
    + Build System + +
  • Moved suppressed warnings from the DisabledWarnings property to NoWarn (#1697)
  • +
    + Runtime + New features + +
  • Added additional sort functions ASortFunc() and ASortEx() for arrays allowing .Net style sorting (#1683)
  • +
  • Added untyped overloads for VFP functions GoMonth(), Quarter(), Week(), DMY() and MDY() (#1724)
  • +
  • Implemented the Seek() function in the VFP runtime library (#1718)
  • +
  • Allow to register special error handler that is called for errors during macro compilation (#1686)
    To use this, declare a function or method with the following prototype:

    DELEGATE CodeblockErrorHandler(cMacro as STRING, oException as Exception) AS ICodeBlock
  • +
    +
    And register it as the codeblock error handler like this:
    RuntimeState.CodeBlockErrorHandler := CodeBlockErrorHandler
    When the function / method returns NULL then an exception is thrown.
    When the function/ error handler returns a Codeblock then this codeblock is used to evaluate the macro. For example:

    FUNCTION CodeBlockErrorHandler(cMacro AS STRING, oEx AS Exception) AS ICodeblock
      ? Mmacro
      ? oEx:Message
      // Visual Objects returns NIL when an error like this happens
    RETURN {|| NIL }

    FUNCTION Start() AS VOID STRICT
      RuntimeState.MacroCompilerErrorHandler := CodeBlockErrorHandler
      ? &("'aaa'bbb'")    // uneven # of single quotes, an error.
                          // Returns NIL because the ErrorHandler returns a codeblock with NIL
    + Bug fixes + +
  • Fixed problem with COPY TO ARRAY / DbCopyToArray() with fields of type "G" (#1530)
  • +
  • Fixed problem with ASort() returning inconsistent results when using the .Net Framework 4.5 sorting routines (#1653)
  • +
  • Fixed problem with Integer() function depending on the SetFloatDelta() setting (#1676)
  • +
  • Fixed several problems with default method parameters in late bound calls (#1684)
  • +
  • Fixed problem with IVarGetInfo() with overrided ASSIGN methods with different casing (#1692)
  • +
  • Fixed problem with ENUM parameters in alte bound calls (#1696)
  • +
  • Fixed (handled) exception inside FindMethod() in late bound code with similar named method and assign (#1702)
  • +
  • Fixed problem with ProcName(x) returning incorrect results (#1704)
  • +
  • Fixed problem with calling class access method through object instance in the XBase++ dialect (#1705)
  • +
  • Fixed problem with File() function not finding files after changing the current directory with DirChange() (#1706)
  • +
  • Fixed several compatibility issues with the Directory() function (#1707 and #1708)
  • +
    + Macro compiler + +
  • Integer divisions in macros now return a float result instead of INT (#1641)
  • +
  • Allowed the macro compiler to access protected and private members in the FoxPro dialect (#1662)
  • +
  • Fixed macro compiler problem with IN parameters (#1675)
  • +
  • Fixed various problems with scripting and ExecScript() (#1646, #1682)
  • +
  • Fixed problem with failing to find overload with explicit cast to interface (#1720)
  • +
    + RDD System + +
  • Fixed problem with opening dbf files with no extension (#1671)
  • +
  • Fixed problem with DbServer:OrderScope() always returning NIL without a new value and setting the scope to NIL (#1694)
  • +
    + Typed VO SDK + +
  • Fixed problem with MouseMove( oMev) not being called for a FixedText (#1680)
  • +
  • Added a property EnableDispatch to the Window class. When set to TRUE then the Dispatch() method is called. (#1721)
  • +
    + Visual Studio integration + Bug fixes + +
  • Fixed editor problem with incorrectly displaying region markers for multiline statements with comments (#1667)
  • +
  • Fixed incorrect code highlight of the "is not null" code pattern (#1699)
  • +
    + New Features + +
  • Added support for the editor commands Edit.ToggleLineComment and Edit.ToggleBlockComment
  • +
    + XIDE + General + +
  • Added toolbar button to collapse all nodes in the Project window
  • +
  • Added support for selecting the editor color for escaped literals in the Preferences window and through the plugin system
  • +
  • Added context menu option to copy all contents/only code in the Find results window
  • +
  • The control order window now support moving items (tab order) with the keyboard, by using CTRL or SHIFT + Up/Down
  • +
  • Fixed a problem with incorrectly highlighting Func<T> as a keyword
  • +
  • Project/application export now includes also native resource files (.rc)
  • +
  • Some improvements to the TipOfTheDay window
  • +
  • Messages in the Errors tool window can now be sorted by file, application etc., by clicking on their respective column header
  • +
  • Improved functionality of the Remove/Remove All toolbar button in the Breakpoints, Bookmarks and Watch tool windows
  • +
  • Fixed modifying values of local variables in the debugger (still can't modify object members though)
  • +
  • A lot of improvements to the Edit->Sort Entities command
  • +
    + Plugin System + +
  • Added callback method Plugin:OnProjectItemSelected() that gets called when any item is selected in the Project tool window
  • +
  • Added method PluginService:GetPropertiesPad() AS PropertiesPad for retrieving the Properties tool window
  • +
  • Added support for handling (through PluginService:GetSelectedProjectItem()) many more item types in the Project tool window: ReferenceGroup, Reference, Resource files etc
  • +
  • Fixed a problem (crash) with manipulating hidden editor files
  • +
    + Documentation + Bug fixes + +
  • Fixed documentation problems for the topics CONSTRUCTOR, DESTRUCTOR, ENUM, EVENT, FUNCTION, METHOD OPERATOR, PROPERTY, STRUCTURE (#1655)
  • +
    + Changes in 2.22.0.1 + Compiler + Bug fixes + +
  • Fixed problem with incorrect error line for unknown var in RECOVER USING statement (#1567)
  • +
  • Fixed a compiler crash with default values in parameters (#1647)
  • +
  • Fixed problem with text in the VOWED ToolBox window appearing mangled when font scaling is used in the OS (#1650)
  • +
  • Fixed error when adding COM references to a project (#1654)
  • +
    + Build System + +
  • Some project files that were converted from Vulcan could cause problems locating errors from the error list. This has been fixed: the property GenerateFullPaths  is now always set to TRUE when building inside Visual Studio.
  • +
  • The files LastXSharpResponseFile.Rsp and LastXSharpNativeResourceResponseFile are now always created in the temp folder, and not in the MSBuildTemp subfolder in the temp folder.
  • +
    + Runtime + Bug fixes + +
  • ExecScript() now calls the scripting code in the new macro compiler (#1646)
  • +
    + New features + +
  • Marked SetCPU() and SetMath() as obsolete
  • +
  • Bin2Ptr() and Ptr2Bin() now also work in X64 mode. The strings returned or expected are 8 characters long.
  • +
    + RDD System + +
  • Fixed problem with DbOrderInfo() returning wrong key count when using a bottom scope higher that the highest index value (#1652)
  • +
    + VOSDK + +
  • Fixed problem with DataDialog:ToolBar returning always NULL, even if a toolbar object is assigned (#1660)
  • +
    + VOXporter + New features + +
  • Now binaries and support files for visual editors are being generated also when importing from .mef  (#1661)
  • +
    + Visual Studio integration + Bug fixes + +
  • Fixed IntelliSense problem with user extensions methods (#1421)
  • +
  • Fixed problem in Format Document with DEFINEs (#1642)
  • +
  • Fixed problem with reading Assembly info when assembly does not exist (#1645)
  • +
  • Fixed problem in the VFP Class project template with the DEFINE CLASS syntax (#1648)
  • +
  • Fix for issue with the font size on the toolbox for the Window Editor (#1650)
  • +
  • Fix for issue adding a COM reference to a project (#1654)
  • +
    + XIDE + General + +
  • Implemented "Tip of the Day" feature
  • +
  • Increased the time Project window searcher tip appears visible from 2 to 5 seconds
  • +
  • Added functionality in the Project window to repeat last search with F3
  • +
  • Added vertical scrollbar to the Locals details edit box
  • +
    + Editor + +
  • Fixed problem with recognizing some positional keywords like CONSTRUCTOR
  • +
  • Fixed intellisense problems with X# specific data types (USUAL, FLOAT, DATE etc)
  • +
  • Fixed intellisense problem reading functions from X# assemblies with special characters in their names
  • +
    + Designers + +
  • Fixed a problem with unlocking controls in the Forms designer
  • +
    + Plugin System + +
  • Added method ProjectItemBase:SelectNodeInProjectPad() (applies to all project item types)
  • +
  • Added properties Editor:LineHeight, Editor:LineCount and Editor:FirstVisibleLine
  • +
  • Added methods PluginService:GetEditorColor(eColor AS EditorColor) and PluginService:SetEditorColor(eColor AS EditorColor, oColor AS Color)
  • +
    + Documentation + Bug fixes + +
  • The [View Source] link was pointing to a feature branch on Github. It now points to the main branch.
  • +
  • Updated the help topic about Interpolated strings.
  • +
    + Changes in 2.21.0.5 + Possibly breaking changes in 2.21.0.5 + All dialects + Until now, the compiler had several built-in defaults for command line options based on the dialect. + That meant that when a command line option was NOT present and a certain dialect was chosen, then that option would be automatically enabled. We are talking about the following options: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Dialect + + Option +
    + Core + + AllowNamedArgs +
    + Core + + AllowDot +
    + FoxPro + + AllowDot +
    + FoxPro + + AllowOldStyleAssignments +
    + FoxPro + + Vo9 +
    + FoxPro + + Vo15 +
    + FoxPro + + InitLocals +
    + Other + + Vo15 +
    + + This was confusing for some of you (and also for us). For example, you would have to explicitly add the command line option /initlocals- when compiling in the FoxPro dialect if you wanted to disable the option. + + On top of that, the MsBuild system also did not pass command line arguments to the compiler, if a certain property that matched that compiler option was not present in the project file. So, if the project file did not contain the <AllowDot> node, then the command line option /allowdot would be enabled if the project was compiled in the Core dialect, but disabled when the project was compiled in the VO or Xbase++ dialect. Very confusing! + + To fix this, we have done the following + +
  • The defaults are removed from the compiler.
  • +
  • The Build system will generate command line options with a '-' flag for options that are not defined in the project file. This will happen for X# specific commandline options only. Compiler options that we have "inherited" from Roslyn, such as /debug, /optimize etc. will remain working like before.
  • +
  • When opening a project file inside Visual Studio, we will check for the dialect and the options that are listed above. If an option is missing from the projectfile then we will add that option with the value "true". We will also remove options that are not relevant to the dialect. For example: for the core dialect, the foxpro and xpp specific settings will be removed.
  • +
    + + This should normally result in the same compilation as before. The only difference that you may see is that project files are automatically updated when you open them with this build. + FoxPro dialect + Until now the DEFINE CLASS syntax could be used to create classes that inherit from the FoxPro Compatible Custom class, but also from other .Net classes. That has proven to be a bit complicated. + There also was a /fox1 compiler option that makes the AS ParentClass clause from the DEFINE CLASS command optional. Classes without AS ParentClass will then automatically inherit from Custom. + + We have made the following changes: + +
  • The AS BaseType clause will be mandatory like in Visual FoxPro
  • +
  • The ParentType must be Custom, or a class derived from Custom.
  • +
  • The /fox1 compiler is now obsolete
  • +
    + + If you want to inherit from a class outside the VFP class hierarchy (a standard .Net class) then you will have to use the CLASS ... END CLASS syntax. + Compiler + Bug fixes + +
  • Fixed Internal Compiler Error with duplicate declaration of fields/memvars (#1475)
  • +
  • Fixed a bogus warning when calling a function with in VFP dialect with /fox2 enabled (#1476)
  • +
  • Fixed problem with Min/Max IEnumerable extension methods of FLOAT type (#1482)
  • +
  • Fixed a StackOverflowException on access/assign method in the XBase++ dialect (#1483)
  • +
  • Fixed problem reading clipper/harbour .prg files with end of file marker (#1485)
  • +
  • Fixed problem with the extended expression match marker in the preprocessor (#1487)
  • +
  • Fixed problem passing array reference or ivar by reference in the XBase++ dialect (#1492)
  • +
  • Fixed AmbiguousMatchException in Evaluate() function for methods included in an interface (#1494)
  • +
  • Fixed problem with /fox1 switch being ignored in some cases (#1496)
  • +
  • The Build System now automatically adds a TargetFramework Attribute to assemblies compiled with X# (#1507)
  • +
  • Fixed an ambiguity problem with identical names in namespace and property, and several issues encountered when the /allowdot option is disabled (#1515)
  • +
  • Fixed problem in TEXT TO/ENDTEXT with TEXTMERGE clause (#1517)
  • +
  • Fixed misleading line number reported in the compiler error about requiring the /memvar option (#1531)
  • +
  • Fixed some issues with defining indexed properties (#1543)
  • +
  • Fixed several issues with the /vo9 (handle missing RETURN statements and return values) compiler option (#1544)
  • +
  • Fixed parser problem with END DEFINE, END PROCEDURE and END FUNCTION in the VFP dialect (#1564)
  • +
  • Fixed problem with using attributes in CLASS Statement in the FoxPro dialect (#1566)
  • +
  • Fixed macro compiler problem with compiling strongly typed codeblocks (#1591)
  • +
  • Fixed problem with Attributes being ignored for properties defined with the DEFINE CLASS syntax in the VFP dialect (#1612)
  • +
  • The compiler could crash when building a solution that has a .editorconfig file
  • +
  • Fixed an issue with generating the property output for attributes on Members inside a FoxPro style class definition
  • +
  • Fixed typo in error message about defining a class without an AS clause in the VFP dialect (#1611)
  • +
  • Added support for generic types without type parameters, like in typeof(List< >) and typeof(Dictionary<,>) (#1623)
  • +
  • Changes to the FoxPro compatible DEFINE CLASS (see above)
  • +
  • Changes to the way how missing commandline arguments are handled (see above)
  • +
  • We have added the double colon (::) separator for interpolated strings to separate the expression from the format specifier. C# uses the single colon (:) but that character is also used as member access operator in X#.See the String Literals topic for more information.
  • +
    + Build System + +
  • We have fixed an issue in the build system that would sometimes lead to a recompilation, even when nothing was changed.
  • +
    + +
  • Fixed an issue where the language in the machine.config did not match the language defines in the built system
  • +
  • Fixed a problem that caused the .xml doc files to be written to the wrong folder
  • +
  • Changes on how missing project file properties are translated to command line arguments (see above)
  • +
    + Runtime + Bug fixes + +
  • Fixed some DBSetFilter() incompatibilities with VO (#1489)
  • +
  • Fixed problem with DBSetFilter() with no matching records causing subsequent calls to DBSetFilter() or DBClearFilter() to fail (#1493)
  • +
  • Fixed problem (missing implementation) with the WITH CDX clause in the FoxPro COPY command (#1497)
  • +
  • Fixed problem with SCATTER/GATHER MEMO MEMVAR (#1510, #1534)
  • +
  • Fixed a problem with the Collection class not increasing the Count property when adding an item (FoxPro dialect) (#1528)
  • +
  • Fixed problem with the APPEND FROM command with a FOR clause (#1529)
  • +
  • Fixed macro compiler problem with using Str() in the FoxPro dialect (which was causing problems in the INDEX ON command) (#1535)
  • +
  • Fixed a macro compiler problem with some language keywords (like REF, FIELD, DEFAULT) used as identifiers (#1557)
  • +
  • Fixed problems with the REPLACE, DELETE and UPDATE commands in the VFP dialect (#1574, #1575, #1576, #1577)
  • +
  • Fixed an issue in the USUAL type where CompareTo for Float values was not correctly implemented (#1616)
  • +
  • Fixed an issue in the USUAL type where the ! operator was not producing the correct results compared with the (LOGIC) cast.
  • +
  • We have fixed several issues in the XSharp.VFP.UI library
  • +
    + RDD System + +
  • Fixed a problem in DbZap() with DBFNTX (#1509)
  • +
  • Fixed problem with DBSetOrder(0) always returning FALSE in DBFNTX (#1520)
  • +
  • Suppressed runtime error when using FieldPut() when workarea is at EOF, for compatibility with VO (#1542)
  • +
  • Fixed problem in OrderDescend() with the AXDBFCDX driver (#1608)
  • +
  • Fixed problems with reading variable-length fields in DBF files stored using MultiByte encoding.
  • +
  • Fixed a problem where DBFs encoded with Simplified Chinese were interpreted as Cantonese.
  • +
  • Fixed an issue in the DBF RDD where the currentbuffer was not reloaded after a record or file lock was acquired.
  • +
  • We have fixed an issue with DBF files larger than 2 Gb (0x7FFFFFFF bytes)
  • +
  • Creating UNIQUE indexes in the DBFCDX driver would exclude the first record from the DBF file
  • +
    + VOSDK + +
  • Fixed typo in Window:__CommandFromEvent that was causing commands from SEUIXP to throw a runtime error.
  • +
    + Visual Studio integration + Bug fixes + +
  • Fixed problem with saving/reading the OldStyleAssignment compiler option project setting (#1495, #1582)
  • +
  • Fixed an issue in VS2022 where several features in the editor were no longer working due to a change in VS (#1545)
  • +
  • Fixed editor indentation problem with SCAN...END SCAN (#1549)
  • +
  • Fixed a problem with putting the .resx file for windows forms user controls in an incorrect location in the Solution Explorer (#1560)
  • +
  • Fixed problem with editor snippets no longer working in VS 2022 version 17.11 (#1564)
  • +
  • Fixed problem with the parameter list auto-showing tooltip when using <Enter> to accept a method from the member completion list (#1570)
  • +
  • Fixed a problem with indenting lines with end keywords, such as NEXT and ENDDO, when these keywords were following by 'garbage'.
  • +
  • Opening a form in the VS Form designer could fail when one of the include files declared entities, such as USING SomeNameSpace (#1595, #1596)
  • +
  • Fixed an issue in the debugger where identifiers that start with a '$' character, such as "$exception" in the exception dialog were not properly evaluated (#1602)
  • +
  • Fixed a problem with the indentation of VFP Style classes declared with DEFINE CLASS  ... ENDDEFINE (#1609)
  • +
    + New features + +
  • The TargetFramework attribute is now automatically added to the assembly when building any project type in VS. (#1507)
  • +
  • Added support for the GotoBrace command.This works for normal braces, but also for keyword pairs such as IF .. ENDIF. (#1522)
  • +
  • The editor now has a combobox on the top left that shows the project in which the file is defined.
  • +
  • When a file is present in multiple projects (as Linked file), the project's combobox will show the names of all projects that use the file.
  • +
  • When selecting a different project from this combobox, the buffer will be repainted, because conditional compilation symbols may differ for each of the projects.
  • +
  • When you use intellisense in the editor, the lookup engine will use the project selected. So, if a file is used in 2 projects, the references and source files of the selected project will be used to find reference data.
  • +
  • Added support for correct indentation with FoxPro variations of closing keywords, such as ENDFOR and ENDWITH.
  • +
  • We have moved several X# language related features from the Project System to the Language Service to prepare for the new Project System for SDK projects.
  • +
  • We have added support for Snippets in the CompletionLists at "file" level.
  • +
  • We no longer create an X# intellisense database for solutions that do not have any X# projects.
  • +
  • We have made several changes to the X# intellisense database structure. When you open a solution with an existing database, the database will be deleted and all source files will be rescanned (only once).
  • +
  • The X# source code editor now has an extra combobox on the top, listing the projects where a file is included. When a file is included in more than one project, all these projects can be seen. Switching to a new project will change the 'evaluation context'. Conditional compiles (#ifdef) will reflect the change in the editor.
  • +
  • We have added support for the commands Edit.NextMethod and Edit.PreviousMethod in the editor. There usually is no shortcut for these commands, but you can assign them with the "Customize" option on the Toolbar in Visual Studio. You could assign Ctrl-DownArrow and Ctl-UpArrow for example.
  • +
  • Improved the Clone Window selection dialog in the VOWED (#1508)
  • +
  • When selecting multiple controls in the VOWED, now that lastly selected control becomes the "active" one for the Properties window
  • +
  • When pasting a control in the VOWED, it now goes to the bottom of the control order list
  • +
    + +
  • Added option in the VOWED Control Order dialog to start adjusting the control order of controls after the currently selected one when using "Use Mouse"
  • +
  • The VO binary editors now preserve the SEALED modifier when generating code. Also PROTECT fields of sealed classes become PRIVATE (#1628)
  • +
    + +
  • Updated the Mono.Cecil library to 0.11.6
  • +
  • Project files are adjusted when properties that were "implicit" before are missing (see above)
  • +
    + XIDE + General + +
  • Replaced System.Reflection with Mono.Cecil in intellisense for improved performance and stability.
  • +
  • The Toolbox Editor also now uses Mono.Cecil for reading controls from dlls.
  • +
  • When closing a file directly after opening it (without first activating another file), focus now goes back to the previously active file just before opening the new one.
  • +
  • Improved support for standalone files, added options in their properties window for dialect, references etc.
  • +
  • Changed default names of various XIDE support files to "xi" instead of "vi" (.xiaef, xiapp etc).
  • +
  • Fixed problem with accidentally calling older versions of the XIDE resource compiler and toolbox editor.
  • +
  • Added "%OUTPUTEXT% (extension of output assembly) macro in build events.
  • +
  • Added support for the /allowdot compiler option in the application properties, enabled by default in all applications.
  • +
  • Fixed problem with not properly saving the compiler options /initlocals, /modernsyntax, /allowoldstyleassignments and /namedargs.
  • +
  • The Clipboard item in the main XIDE window statusbar now shows the current clipboard contents in a tooltip.
  • +
  • The Clipboard selection context menu now also displays the contents of every virtual clipboard.
  • +
  • Added Open Bin Folder context menu option for the project node in the Project tool window.
  • +
  • Added option to the windows resource editor to include strings and text files.
  • +
  • Added application templates for FoxPro, XBase++, and Harbour dialects.
  • +
  • Application templates shown in the New Application dialog are now sorted by the GalleryIndex setting of each gallery file template.
  • +
  • Implemented new menu options View|Load/Save/Reset Layout, for switching between different layouts for the IDE window and tool windows
  • +
  • Added some new templates (code snippets) in template.cfg
  • +
  • Added project support for the /vo15 compiler option
  • +
  • Added standalone files default setting for the allowdot compiler option (Preferences/Compiler)
  • +
  • Added option to set the console location when running console apps (Preferences/Advanced)
  • +
  • Included several "hidden" commands in the main menu (File/Navigate and Edit/Advanced)
  • +
  • Improved deletion of items in the Watch tool window
  • +
  • Improved the About XIDE dialog.
  • +
    + Editor + +
  • Improved Recognition of positional keywords in the code.
  • +
  • Fixed recognition of two-letter long functions in code.
  • +
  • Fixed problem with intellisense on functions defined in core dialect apps.
  • +
  • Added intellisense support for FOREACH VAR.
  • +
  • Fixed crash with VAR locals in the editor.
  • +
  • Fixed several issues with LOCAL IMPLIED.
  • +
  • Fixed problem with parsing modified classes in namespaces.
  • +
  • Improved editor support for the FoxPro, Harbour, and XBase++ dialects.
  • +
  • Added editor support for a lot of FoxPro keywords.
  • +
  • Added editor support for FoxPro functions.
  • +
  • The editor now recognizes && for line comments marker in FoxPro dialect.
  • +
  • Added intellisense support for Nullable types specified with the ? postfix (for example, INT?).
  • +
  • Added intellisense support for the ?: operator.
  • +
  • Added intellisense support for IF <identifier> IS <type> VAR <local>
  • +
  • Added option (Preferences/Editor/Edit) to automatically adjust numeric literals containing underscores
  • +
  • Added context menu Surround with options for REPEAT..UNTIL and BEGIN SCOPE...END
  • +
  • Added (experimental) option to sort entities in the editor (Edit->Sort Entities)
  • +
    + + Designers + +
  • Items in the properties window of the VOWED are now sorted by name.
  • +
  • Controls in the WED can now be resized through the keyboard, using SHIFT+ Arrow keys.
  • +
  • When loading a WindowsForms form in the designer, all TabControls now have their first TabPage selected initially.
  • +
  • Auto-generated eventhandler method names now include an underscore between the control- and event-part of the name
  • +
  • Added option (Preferences/Designers) to add an END (METHOD, CONSTRUCTOR, etc.) statement in generated code.
  • +
  • Added option (Preferences/Designers) to enter current OS scaling setting (fixes problem with showing lasso lines at the wrong place when creating/moving controls in non-default settings).
  • +
  • Added toolbar button to Lock/Unlock controls in the Windows.Forms and VO Window editors.
  • +
  • Locked state of controls is now preserved in the Windows.Forms designer (needs a Save Form to apply).
  • +
  • Fixed problem with setting the Text property of strip items to empty.
  • +
  • Added option in the VOWED Control Order dialog to start adjusting the control order of controls after the currently selected one when using "Use Mouse".
  • +
  • Added components SaveFileDialog, OpenFileDialog and FolderBrowserDialog in the Windows.Forms toolbox
  • +
    + + Debugger + +
  • Exception dialog while debugging now properly shows the exception message.
  • +
  • Fixed a problem with incorrectly breaking on excluded handled exceptions.
  • +
  • Fixed a common crash that could happen in the debugger.
  • +
    + + Plugin System + +
  • Some small corrections to the Plugin System (you may need to recompile your plugins)
  • +
  • Added Plugin:OnAfterCompileApplication(oApp AS Application, eResult AS CompileResult) callback method
  • +
  • Added Editor:SetSelection() method to select text in the editor
  • +
  • Entity objects returned from the plugin system no longer include END CLASS and END NAMESPACE statements
  • +
    + Documentation + Bug fixes + +
  • Made many corrections to the documentation (#1504, #1506, #1514).
  • +
    + New Features + +
  • Several updates on the Chinese documentation.
  • +
  • Added missing SCAN...ENDSCAN documentation (#1548).
  • +
  • Added missing available constants for DBOrderInfo() function topic (#1565).
  • +
  • Fixed incorrect text in documentation about the -memvar option (#1621)
  • +
    + + Changes in 2.20.0.3 + Compiler + Bug fixes + +
  • Fixed problem with the USE command with an AGAIN clause in the FoxPro dialect (#235).
  • +
  • Fixed problem with calling typed array constructors with named parameters when compiling with the /namedargs compiler option enabled (#1430).
  • +
  • Fixed inconsistency with the INSTANCE keyword and the use inside the class (#1432).
  • +
  • Fixed problem with the REPLACE UDC that could prevent the use of a variable named "replace" (#1443).
  • +
  • Fixed problem with the /vo9 (handle missing RETURN statements) compiler option with ACCESSes in PARTIAL classes (#1450).
  • +
  • Fixed problem with the Lexer recognizing line continuation characters inside a string in the FoxPro dialect (#1453).
  • +
  • Fixed problem with the memvar pragma option (#1454).
  • +
  • Fixed a problem with the /xpp compiler option. (#1243, #1458).
  • +
  • Fixed a problem with accessing Hidden class members in a method from the class where the member was defined, when the object involved was untyped (#1335, #1457).
  • +
  • Fixed an internal compiler error with a line of code containing a single comma (#1462).
  • +
  • Fixed a problem with the USE command when the filename was specified as a bracketed string (#1468).
  • +
    + New Features + +
  • You can now use the NULL() and DEFAULT() expression to initialize any variable with a default value. This is the equivalent of the default keyword in C#.
  • +
  • We have added a new compiler option /modernsyntax (#1394). This disables certain legacy features:
  • + +
  • && for line comments;
  • +
  • * at the start of a line for a comment line;
  • +
  • Bracketed strings;
  • +
  • Parenthesized expression lists (making it easier to recognize tuples).
  • +
    +
    + +
  • Added support for IS NULL and IS NOT NULL pattern (#1422).
  • +
  • Added support for file wide FIELD statements in the Harbour dialect (#1436).
  • +
    + Runtime + Bug fixes + +
  • Fixed runtime error in Transform() with PTR argument (#1428).
  • +
  • Fixed problem with several String runtime functions throwing a runtime error when passed a PSZ argument (#1429).
  • +
  • Fixed problem with OrdKeyVal() and ADS/ADT files in the ADS RDD (#1434).
  • +
  • Fixed incompatibilities with various xBase dialects with creating and using orders with long names (#1438).
  • +
  • Fixed VO incompatibility in OrderKeyNo() with the ADS RDD when the setting Ax_SetExactKeyPos() is TRUE (#1444).
  • +
  • Fixed a problem in the macro compiler with passing more than two arguments by reference (#1445).
  • +
  • Fixed problem with DBSetIndex() seting the record pointer at eof (#1448).
  • +
  • Fixed problem reading fields from OEM dbfs (#1449).
  • +
    + New Features + +
  • Implemented the DBFMEMO driver (#604).
  • +
  • Implemented the DBFBLOB driver (#605).
  • +
  • Added missing SetColor() function overload with no parameters (#1440).
  • +
    + +
  • This version includes the new XSharp.VFP.UI.DLL that is used by forms exported from Visual FoxPro with the VFP Exporter.
  • +
    + Visual Studio integration + Bug fixes + +
  • Fixed a problem with "Jump to File" command in VS 2019 (#1146).
  • +
  • Fixed problem with "Go to definition" not working for local function (#1415).
  • +
  • Fixed problem with the Class navigation box showing the wrong current entry in some cases (#1426).
  • +
  • Fixed problem with setting the "enable named arguments" project option (#1431).
  • +
  • Fixed problem with the code generator for types in external assemblies not generating parameters for Indexed properties (#1442).
  • +
  • Fixed problem with the VODBServer editor not saving access/assigns and other entities of the [DBSERVER] section in CAVOFED.TPL (#1452).
  • +
  • Fixed problem with loading supplemental files provided in the cavowed.inf file for the VO Window Editor with absolute or relative paths (#1470).
  • +
  • Fixed some indentation issues in the editor (#1541).
  • +
  • Fixed a problem in the VS2022 Debugger when different DLLs contained the same namespace but different casing.
  • +
  • Fixed an issue where the entity parser inside the editor did not correctly determine the end of an entity containing a local function or procedure.
  • +
  • Fixed a problem where the entity parser inside the editor failed to handle a param token at the start of a line when the /memvars compiler option was NOT enabled.
  • +
    + New features + +
  • We have added a menu entry to the Help menu for the Chinese version of the documentation.
  • +
    + VOXporter + Bug fixes + +
  • Fixed problem with incorrectly converting attributes to string literals (#1404).
  • +
    + New Features + +
  • It is now possible to define special TEXTBLOCK entities in the VO code in any module with name "VXP-TOP" or "{VOXP:TOP}", and VOXporter will automatically insert the contents of the text block in the beginning of the exported X# .prg file for the module. This is particularly helpful for specifying top level commands like #using statements (#1425).
  • +
    + VFPXporter + +
  • This version of X# includes the VFP Exporter. This tool takes a Visual FoxPro project file and converts that into a Visual Studio solution
  • +
    + XIDE + +
  • Added option when trying to debug a 32/64bit app in the wrong XIDE version, to automatically open the alternative version.
  • +
  • Fixed coloring of several positional keywords in the editor.
  • +
  • Improved editor support for TEXT...END TEXT.
  • +
  • Added editor support for the NOT NULL code pattern.
  • +
  • Added project support for the compiler options /namedargs, /initlocals, /modernsyntax and /allowoldstyleassignments.
  • +
  • When pressing the SHIFT key on startup, the layout of the IDE is now reset to default positions (rather than saved on exit).
  • +
  • Added menu command View->Save Current Layout.
  • +
  • Fixed a problem with toggling case (CTR+U) of text selected in a column selection.
  • +
  • Fixed several issues with incorrectly identifying a line with identifiers like PROC or FUNC as entity definitions.
  • +
    + Documentation + Bug fixes + +
  • Fixed typo in the /namedargs compiler option topic.
  • +
    + New Features + +
  • We have added several chapters about modifiers.
  • +
  • We have added a (partially) translated help file in (Simplified) Chinese.
  • +
    + Changes in 2.19.0.2 + Compiler + Bug fixes + +
  • Now the compiler properly reports an error when duplicate field names are defined in a type (#1385)
  • +
  • Fixed problem with defining multiple type constraints in a generic type (#1389)
  • +
  • Fixed problem with global MEMVARs hiding local variables or parameters with the same name (#1294)
  • +
  • Bogus compiler error messages with not found type (#1396)
  • +
  • Fixed compiler crash with missing reference to XSharp.VFP in the FoxPro dialect (#1405)
  • +
  • Fixed problem with /initlocals compiler option incorrectly also initializing class fields (#1408)
  • +
  • Fixed a problem in the preprocessor where an extended match symbol would not properly match an expression that started with a string literal
  • +
    + New features + +
  • We added support for dimensioning (FoxPro) class properties, such as in

    DIMENSION this.Field(10)
  • +
  • We have added support for FOREACH AWAIT, like in the following example. (Works in .Net Core, .Net 5 and later)
  • +
    +
    FOREACH AWAIT VAR data IN GenerateNumbersAsync(number)
         SELF:oListView1:Items:Add(data)
      NEXT
    + +
  • We have added support for "Coalescing Member Access, such as in the following example where FirstName and LastName are both properties of the oPerson object:
  • +
    + + ? oPerson:(FirstName+" "+LastName) +   + +
  • The WITH command now also recognizes the AS DataType clause
  • +
    + +
  • XBase++ Class declarations now also allow “END CLASS” as closing token.
  • +
    + +
  • Now the compiler reports an error when attempting to convert from Lambda Expression to usual (#1343)
  • +
    + +
  • We have added support for TUPLE datatypes. This includes declaring local variables, parameters, return value etc.
    We also support decomposition of a tuple return value into multiple locals. See the TUPLE help topic for more information.
  • +
    + Runtime + Bug fixes + +
  • Fixed problem calling DoEvents() from the macro compiler (#872 )
  • +
  • Fixed problem with __Mem2StringRaw() (undocumented) function (#1302)
  • +
  • Fixed problem opening DBFCDX index file with incorrect collation information in the header #1360
  • +
  • Fixed problem with OrdSetFocus() resetting the current order when called without arguments (#1362)
  • +
  • Fixed problems with some index files after a DBPack() (#1367)
  • +
  • Fixed problem with Deleted() returning TRUE on a table with all records deleted (#1370)
  • +
  • Fixed problem with opening and writing to a file with FWrite() etc functions when opened in exclusive and write only mode (#1382)
  • +
  • Fixed several problems (VO incompatibilities) with the SplitPath() function (#1384)
  • +
  • Now when there is no codepage found in a dbf header, then the DOS codepage from the RuntimeState is used and no longer the hardcoded codepage 437 (#1386)
  • +
  • Replaced the Dictionary<,> class used in some areas of the runtime with ConcurrentDictionary<,> to avoid issues in multi threaded apps (#1391)
  • +
  • Fixed problem with NoIVarget when using IDynamicProperties (FoxPro dialect) (#1401)
  • +
  • Fixed problem with Hex2C() giving different results with lower case letters than with upper case.
    Note that this bug existed also in VO, so now the behavior of Hex2C() with lower case hex letters in X# with is different to VO (#1402)
  • +
    + +
  • Accessing properties on a closed DbServer object that was opened with the Advantage RDD could cause problems in the debugger. The DbServer class now returns empty values when the server is closed.
  • +
    + New features + +
  • Implemented CREATE CURSOR command [FoxPro] (#247). Also implemented CREATE TABLE and ALTER TABLE (FoxPro dialect)
  • +
  • Implemented INSERT INTO commands (FoxPro dialect for inserting variables from values, arrays, objects and memory variables. INSERT INTO from a SQL query does not work yet.  (FoxPro dialect)
  • +
    + +
  • Implemented new FoxPro-compatible version of Str() function in XSharp.VFP (#386)
  • +
  • Now an error is thrown when opening an index file fails (#1358)
  • +
  • Added AscA() function and made Asc() dependent on the SetAnsi() setting in the runtime (#1376)
  • +
    + Header files + Bug fixes + +
  • Implemented several missing commands (#1407)
  • +
  • Fixed typo in the SET DECIMALS TO command (#1406)
  • +
  • Added missing clauses NAME and MEMVAR for the GATHER command (FoxPro) (#1409)
  • +
  • Updated several commands to make some tokens optional and more compatible to various dialects (#1410, #1412)
  • +
  • Fixed various incompatibilities with COMMIT command in various dialects (#1411)
  • +
    + Visual Studio Integration + Bug fixes + +
  • Fixed problem with looking up public static field in type referenced by static using (#1307)
  • +
  • Fixed intellisense problem with locals defined inside block statements (#1345)
  • +
  • Fixed problem with intellisense incorrectly resolving type specified in code with full name to another from the usings list (#1363)
  • +
  • Fixed problem with member completion incorrectly showing static methods after typing a colon (#1379)
  • +
  • Fixed editor freezing with specific code (#1380)
  • +
  • Fixed problem with Class Navigation bar not showing the method name in certain cases (#1381)
  • +
    + New features + +
  • Added support for IEnumerable and DataTable Debugger visualizers (#1373).
    Please note that when browsing X# arrays the results in the visualizer are really ugly because the visualizer ignores attributes to hide properties and fields for our USUAL class.
  • +
  • Adjusted the Globals, Workareas etc debugger windows to respect the global theme selected in VS (#1375). Also added status panel to the Workarea window, so you can see the workarea status or field names/values
  • +
  • Added intellisense support for locals declared with USING VAR or USING (LOCAL) IMPLIED (#1390)
  • +
  • Now the intellisense database uses an SQLite package that has ARM support, so the it will work also on a Mac and other platforms (#1397)
  • +
    + VOXporter + Fixes + +
  • Fixed problem with VOXporter incorrectly modifying previously commented code with {VOXP:UNC} tags (#1404)
  • +
    + Documentation + Bug Fixes + +
  • The documentation of functions in the runtime help was describing functions incorrectly.
    For example the topic title for the "Left" function was "Functions.Left Method" This has been changed to "Left Function"
  • +
  • The "SingleLineEdit" class in the documentation was called "Real4LineEdit". This has been fixed.
  • +
    + New Features + +
  • We have added additional documentation to the X# Programming guide about several subjects.
  • +
    + Changes in 2.18.0.4 + Compiler + Bug fixes + +
  • Fixed some preprocessor issues with XBase++ related commands (#1213, #1288, #1337)
  • +
  • Fixed problem with implicit access to static class members (XBase++ dialect) (#1215)
  • +
  • Fixed a parser error with the DIMENSION command (VFP dialect) (#1267)
  • +
  • Fixed preprocessor problem with UDCs in code spanning in multiple lines (#1298)
  • +
  • Now each "unused variable" warning is reported at the exact location of a variable definition, instread of always at the first one (#1310)
  • +
  • Fixed bogus "unreachable code" warning in the SET RELATION command (#1312)
  • +
  • Fixed a problem in generating XML documentation for the compiler generated <Module>.$AppInit and <Module>.$AppExit methods (#1316)
  • +
  • Fixed problem with accessing hidden fields of another object (XBase++ dialect) (#1335)
  • +
  • Fixed problem with calling parent methods with an explicit class indication (Xbase++ dialect) (#1338)
  • +
  • Fixed problem with incorrectly calling function twice, in code like "SLen(c := SomeFunction())" (#1339)
  • +
  • Fixed problem with parent Сlass methods not being visible in derived classes (Xbase++ dialect) (#1349)
  • +
  • Fixed problem with ::new() not working properly in class methods (Xbase++ dialect) (#1350)
  • +
  • Fixed an exception when an error occurred for a token that was defined in a header file
  • +
  • Fixed a compiler error when returning super:Init() from a XBase++ method (#1357)
  • +
  • Fixed a problem with STATIC DEFINEs in same named .prg files (#1361)
  • +
    + New features + +
  • Introduced warning for not specifying the OUT keyword for OUT parameters (#1295)
  • +
  • The parser rules for method and constructor calls without parameters have been updated. This may result in a bit faster compilation.
  • +
  • SLen() is no longer "inlined" by the compiler. If you reference XSharp.Core in your app, SLen() now gets resolved to the SLen() function inside X# Core.
    If you compile without X# runtime, or compile against the Vulcan Runtime you now need to add a SLen() function to your code.
    This is the code inside X# Core that you can use as a template
    FUNCTION SLen(cString AS STRING) AS DWORD
      LOCAL len := 0 AS DWORD
      IF cString != NULL
         len := (DWORD) cString:Length
      ENDIF
      RETURN len
  • +
  • Added support for preprocessor commands #ycommand and #ytranslate that are also supported by Harbour. They work the same as #xcommand and #xtranslate, but the tokens are compared in case sensitive mode (#1314)
  • +
  • Code generation for some of the Xbase++ specific features has changed.
  • +
  • We have added several more UDCs with the IN <cursor> clause
  • +
    + +
  • We have added UDC support for the FoxPro CAST expression
  • +
  • Several more SET commands now also support the & operator
  • +
  • The compiler now supports "Late bound names" in more locations, such as in the REPLACE command, With command etc. This now compiles without problems:
  • +
    + cVar := "FirstName"
    WITH oCustomer
      .&cVar := "John"
    END WITH
    and this too

    cVar := "FirstName"
    REPLACE &cVar with "John"
    + Runtime + Bug fixes + +
  • Fixed problem with incorrectly closing dbf file before relations are cleared (#1237)
  • +
  • Fixed incorrect index scope visibility immediately after file creation (#1238)
  • +
  • Fixed problem in FFirst()/FNext() not finding all files specified by filter (#1315)
  • +
  • Fixed problem with DBSetIndex()/VoDbOrdListAdd() always reseting the controlling order to 1 (#1341)
  • +
  • Fixed problem with updating index keys in the DBFCDX driver when the key expression was of type DATE.
  • +
  • Fixed a problem when Str() and StrZero() had a built-in maximum string length of 30.(#1352)
  • +
  • The RegisteredRDD Class now uses a ConcurrentDictionary.
  • +
  • Fixed a bug in the RDD TransRec() method when a field is missing in the target table (#1372)
  • +
  • Fixed a problem in the Advantage RDD to prevent ADS functions from being called when the table is closed
  • +
  • Fixed a problem in the Advantage RDD that could occur when an field with an incorrect name was read
  • +
  • Fixed a problem in the CurDir() function when the current directory is a UNCPath (\\Server\Share\SomeDir) (#1378)
  • +
    + New features + +
  • Added support for accessing indexers in the USUAL type (#1296 )
  • +
  • We have added a DbCurrency type that is returned from the RDD when a currency field is read.
  • +
  • Implemented the TEXT TO FILE command (#1304)
  • +
  • Now the RDD reports an error (dialog) when tagname > maximum length when creating an index order (#1305)
  • +
  • Added a function _CreateInstance() that accepts a System.Type parameter
  • +
  • The late binding code now detects from where Send(), IVarGet() and IVarPut() are called and allow access to private/hidden fields when the calling code is of the same type as the type where the class members were declared. This is used in some of the XBase++ related changes.
  • +
  • The classes in the XBase++ have been restructured a bit.
  • +
  • The mapping of several DBF / Workarea / Cursor related UDCs has been changed to be more FoxPro compatible.
  • +
  • We have added runtime support for the FoxPro CAST expression
  • +
  • We have done some small code optimizations w.r.t. dictionaries(#1371)
  • +
  • Several DbServer properties no longer call into the RDD when the server is closed, but return blank values instead.
  • +
    + Typed SDK classes + +
  • Added a DbServer:Append() overload without parametrs (#1320)
  • +
  • Added missing DataServer:LockcurrentRecord() method (#1321)
  • +
  • Fixed runtime error when creating a DataWindow with a ShellWindow as owner (#1324)
  • +
  • Changed DataWindow:Show() method to CLIPPER for compatibility with existing code (#1325)
  • +
  • Fixed exception when using a ComboBox on a VO Window (#1328)
  • +
  • Fixed error when opening a datawindow with an assigned server (#1332)
  • +
  • Fixed runtime error when instantiating a DBServer object with an untyped FileSpec object as first argument (#1348)
  • +
  • Fixed problem with displaying items in Comboboxes and Listboxes (#1347)
  • +
  • Several DbServer properties no longer call into the RDD when the server is closed, but return blank values instead.
  • +
    + Visual Studio Integration + Bug fixes + +
  • Fixed problem with the "allow dot" setting in the project file (#1192)
  • +
  • Several macros such as $CALLSTACK were not returning values in expected format. This has been fixed (#1236)
  • +
  • Fixed build problem when there is a block comment in the first line of form.prg (#1334)
  • +
  • Fixed probelm with block commenting a code snippet in a single line (#1336)
  • +
  • Fixed failing project build when the project file contains a property <GenerateAssemblyInfo>True</GenerateAssemblyInfo> (#1344)
  • +
  • Fixed a problem in the Parser that was causing errors parsing DebuggerDisplay attributes in the expression evaluator.
  • +
  • The new debugger windows were not following the current windows theme. This is now partially fixed. (#1375)
  • +
    + VO Compatible Editors + +
  • Fixed design time display issue with CheckBox and RadioButton captions with specific fonts in the VOWED (#796)
  • +
  • Fixed problem with the VOWED editor changing all existing classes in the prg to PARTIAL (#814)
  • +
  • Fixed problem with incorrectly adding constructor code to instantiate the DataBrowser in the VOWED, even when there are no (non-deleted) data columns (#1365)
  • +
  • Fixed several problems in the VOMED with menu item define names in source code and resource files (#1374)
  • +
    + VOXporter + New features + +
  • Introduced options (inline in existing code) to comment, uncomment and delete lines from the original VO code (#1303)
  • +
    + - {VOXP:COM} // comment out line + - {VOXP:UNC} // uncomment line + - {VOXP:DEL} and // {VOXP:REM} // remove line + Installer + New features + +
  • The installer now detects if the required Visual Studio components "Core Editor" and ".Net Desktop Development" are installed.
    When it finds one or more VS installations but none of these installations has both the required components then a warning is shown.
  • +
    + Changes in 2.17.0.3 + Compiler + Bug fixes + +
  • Fixed several incompatibilities with XBase++ regarding using class members (#1215) UNCONFIRMED
  • +
  • Fixed /vo3 option not working correctly in XBase++ dialect. Also added support for modifiers final, introduce and override (#1244)
  • +
  • Fixed problem with using the NEW modifier on class fields (#1246)
  • +
  • Fixed several preprocessor issues with XPP dialect UDCs (#1247, #1250)
  • +
  • Fixed VO incompatibility with special handling of INSTANCE fields in methods and properties (#1253)
  • +
  • Fixed problem with the debugger erratically stepping to incorrect lines (#1254, #1264)
  • +
  • Fixed problem with showing the wrong error line number in some cases with nested statements (#1268)
  • +
  • Fixed problem where a DO CASE statement without CASE lines was producing an internal error in the compiler (#1281)
  • +
  • Fixed a couple preprocessor issues (#1284, #1289)
  • +
  • Fixed missing compiler error on calling with SUPER a method that does not exist, when late binding is enabled (#1285)
  • +
  • Fixed a Failed to emit Module error with CONST class field missing value assignment (#1293)
  • +
  • Fixed a problem with repeated match markers (such as in the SET INDEX TO command) in the preprocessor.
  • +
  • Fixed a problem that an property definition with an explicit interface prefix could lead to a compiler crash when the interface was "unknown" at compile time and/or the property name was not "Item" (#1306)
  • +
    + New features + +
  • Added support for "classic" INIT PROCEDURE and EXIT PROCEDURE (#1290)
  • +
  • Added warnings when statement list inside case blocks, if blocks and other blocks are empty. To suppress the warning you can add a NOP statement in your code.
  • +
  • We have made some changes to the lexer and parser in the compiler. This may result in a bit smaller memory footprint and faster compilation speed for code with many nested blocks.
  • +
    + Runtime + Bug fixes + +
  • Fixed several problems (incompatibilities with VO) in CToD() (#1275)
  • +
  • Added support for 3rd parameter in AAdd() for specifying where to insert the new element (#1287)
  • +
  • The Default() function now no longer updates usuals that have a value of NULL_OBJECT to be compatible with Visual Objects.(#1119)
  • +
  • We have added support for parameters for the AdsSQLServer class (#1282)
  • +
    + Visual Studio integration + New Features + +
  • We have added debugger pane windows for the following items:
  • + +
  • Global variables
  • +
  • Dynamic memory variables (Privates and Publics)
  • +
  • Workareas
  • +
  • Settings
  • +
    +
    + +
  • You can open these windows from the Debug/XSharp menu during debugging. There is also a special "X# Debugger Toolbar" which is also only shown during debugging.
  • +
  • These windows will only show information when the app being debugged uses the X# runtime (so they will not work in combination with the Vulcan Runtime).
    If you are debugging an application written in another language that uses the X# runtime then these windows will also show information.
    We have planned to add more features to these windows in future builds, like the properties of the current selected area and the field/values in the current selected workarea
  • +
  • We have added support for "FileCodeModel" for X# files. This is used by the WPF designer and XAML editor.
    This now also fixes the Goto definition in the XAML editor (#1026)
  • +
  • Several properties of X# projects are now cached. This should result in slightly faster performance.
  • +
  • We have added support for "Goto Definition" for User Defined commands. For example choosing "Goto definition" on the USE keyword from the USE command will bring you to its definition in our standard header file.
  • +
    + Bug fixes + +
  • Fixed member completion issue with Type[,] arrays (#980)
  • +
  • Fixed missing member completion in class inside namespace when same named class exists without namespace (#1204)
  • +
  • Fixed an auto indent problem when an entity has an attribute in the precessing line (#1210)
  • +
  • Fixed intellisense problems with static members in some cases (#1212)
  • +
  • Fixed some intellisense issues with code or declarations spanning in multiple lines (#1221, #1260)
  • +
  • Fixed intellisense problem with nested classes inside a namespace (#1222)
  • +
  • Fixed incorrect resolving of VAR local type, when using a type cast (#1224)
  • +
  • Fixed several problems with collapsing/expanding code in the editor (#1233)
  • +
  • Fixed showing of bogus member completion list with unknown types (#1255)
  • +
  • Fixed some problems with auto typing text with Ctrl + Space (complete Word) (#1256)
  • +
  • Fixed coloring of Text .. EndText statements (#1257)
  • +
  • Fixed several issues with tooltip hints with generic types (#1258, #1259, #1273)
  • +
  • Fixed problem with delegate signature not showing in intellisense tooltips (#1265)
  • +
  • Fixed invalid coloring of code with multiline comments (#1269)
  • +
  • Fixed invalid entries in member completion after typing "self." (#1270)
  • +
  • Fixed problem with calling the disassembler when path specified (in option X# Custom Editors\Other Editors\Disassembler) with spaces (#1271)
  • +
  • Fixed editor coloring completely stopping when using some UDC calls (#1272)
  • +
  • Fixed problem with hint not showing on CONSTANT locals in FOR statements (#1274)
  • +
  • Fixed auto indent problem when code contains a LOOP or EXIT keyword (#1278)
  • +
  • Fixed an exception in the editor when typing a parenthesis under specific circumstances (#1279)
  • +
  • Fixed problem with incorrectly trying to open in design mode files with filenames starting with an opening bracket (#1292 )
  • +
  • The "XSharp Website" menu option inside VS was broken (#1297)
  • +
  • Fixed problem with the Match Identical Identifiers functionality that could slow down Visual Studio
  • +
  • Fixed a VS lock up that could happen when a file was opened during debugging.
  • +
  • Parameter tips for classes with a static constructor and a normal constructor were not processed correctly. This has been fixed.
  • +
    + +
  • When a project was opened where the dependency between a dependent item (like a .resx file or a .designer.prg file) and its parent was missing, then an exception could occur, which prevented the project from opening. This has been fixed.
  • +
  • When 2 compiler errors occurred on the same line with the same error code they were sometimes shown in the VS output window but not in the Error List. This has been fixed (#1308)
  • +
    + VOXporter + New Features + +
  • Added support for special tags {VOXP:COM}, {VOXP:UNC} and {VOXP:DEL} / {VOXP:REM} to comment out, uncomment and remove lines from the original VO code (#1303)
  • +
    + Changes in 2.16.0.5 + Compiler + New Features Xbase++ dialect + We have made several changes in the way how Xbase++ class definitions are generated. Please check your code extensively with this new build ! + +
  • We now generate a class function for all classes. This returns the same object as the ClassObject() method for Xbase++ classes.
    This class function is generated, regardless of the /xpp1 compiler option.
    The Class function depends on the function __GetXppClassObject and the XSharp.XPP.StaticClassObject class that both can be found in the XSharp.XPP assembly(#1235).
    From the Class function you can access class variables and class methods.
  • +
  • In Xbase++ you can have fields (VAR) and properties (ACCESS / ASSIGN METHOD) with the same name, even with same visibility. Previously this was not supported.
    The compiler now automatically makes the field protected (or private for FINAL classes) and marks it with the [IsInstance] attribute.
    Inside the code of the class the compiler will now resolve the name to the field. In code outside of the class the compiler will resolve the name to the property.
  • +
  • For derived classes the compiler now automatically generates a property with the name of the parentclass, that is declared as the parent class and returns the equivalent to SUPER.
  • +
  • We have fixed an issue with the FINAL, INTRODUCE and OVERRIDE keywords for Xbase++ methods (#1244)
  • +
  • We have fixed some issues with accessing static class members in the XBase++ dialect (#1215)
  • +
  • You can now use the "::" prefix to access class variables and class methods inside class methods.
  • +
  • When a class is declared as subclass from another class then the compiler generates a (typed) property in the subclass to access the parent class, like Xbase++ does. This property returns the value "super".
  • +
  • We are now supporting the READONLY clause for Vars and Class Vars. This means that the variable must be assigned in the Init() method (instance variables) or InitClass() method (Class vars)
  • +
    + + New Features other dialects + +
  • Inside Visual Objects you could declare fields with the INSTANCE keyword and add ACCESS/ASSIGN methods with the same name as the INSTANCE field.
    In previous builds of X# this was not supported.
    The compiler now handles this correctly and resolves the name to the field in code inside methods/properties of the class and resolves the name to the property in code outside of the class.
  • +
  • The PPO file now contains the original white space from user defined commands and translates.
  • +
    + Bug fixes + +
  • Fixed some method overload resolution issues in the VO dialect (#1211).
  • +
  • Fixed internal compiler error (insufficient stack) with huge DO CASE statements and huge IF ELSEIF statements (#1214).
  • +
  • Fixed a problem with the Interpolated/Extended string syntax (#1218).
  • +
  • Fixed some issues with incorrectly allowing accessing static class members with the colon operator or instance members with the dot operator (#1219,#1220).
  • +
  • Fixed Incorrect visibility of MEMVARs created with MemVarPut() (#1223).
  • +
  • Fixed problem with _DLL FUNCTION with name in Quotes not working correctly (#1225).
  • +
  • If the preprocessor generated date and/or datetime literals, then these were not recognized. This has been fixed (#1232).
  • +
  • Fixed a problem with the preprocessor matching of the last optional token (#1241)
  • +
  • Fixed a problem with recognizing the ENDSEQUENCE keyword in the Xbase++ dialect (#1242).
  • +
  • Using a default parameter value of NIL is now only supported for parameters of type USUAL. Using NIL for other parameter types will generate a (new) warning XS9117 .
    Also assigning NIL to a Symbol or using NIL as parameter to a function/method call that expects a SYMBOL will now also generate that warning (#1231).
  • +
  • Fixed a problem in the preprocessor where two adjacent tokens were not merged into one token in the result stream. (#1247).
  • +
  • Fixed a problem in the preprocessor where the preprocessor was not detecting an optional element when the element started with a Left parenthesis (#1250)
  • +
  • Fixed a problem with interpolated strings that contained literal double quotes like in i"SomeText""{iNum}"" "
  • +
  • Fixed a problem that was introduced in an earlier build of 2.16 with local functions / procedures.
  • +
  • A warning generated at parse time could lead to another warning about a preprocessor define even when that is not needed. This has been fixed.
  • +
  • Fixed issue with default parameter values for parameters declared as "a := NIL,b := NIL as USUAL" introduced in an earlier build of  2.16
  • +
  • Fixed issue with erratic debugger behavior introduced in an earlier build of  2.16.
  • +
  • When you are referring to a type in an external assembly that depends on another external assembly, but you did not have a reference to that other external assembly, then compilation could fail without proper explanation. Now we are producing the normal error that you need to add a reference to that other assembly.
  • +
  • Omitting the type for a parameter for a function or method  that does not have the CLIPPER calling convention is allowed. These parameters are assumed to be of type USUAL.
    This now produces a new warning XS9118.
  • +
    + Breaking changes + If you are using our parser to parse source code, please check your code. We have made some changes to the language definition for the handling of if ... else statements as well as for the case statements (a new condBlock rule that is shared by both rules). This removes some recursion in the language. Also some of the Xbase++ specific rules have been changed. Please check the language definition online + Runtime + New Features + +
  • Added the DOY() function.
  • +
  • Addeding missing ADS_LONG and ADS_LONGLONG defines.
  • +
    + +
  • Improved the speed of CDX skip operations on network drives (#1165).
  • +
    + Bug fixes + +
  • Fixed a problem with DbSetRelation() and RLock() (#1226).
  • +
  • Adjusted implicit conversion from NULL_PSZ to string to now return NULL instead of an empty string.
  • +
  • Some initialization code is now moved from _INIT procedures to the static constructor of the SQLConnection Class, in order to make it easier to use this class from non-X# apps.
  • +
  • Fixed an issue with the visibility of dynamic memory variables that were created with the MemVarPut function (#1223).
  • +
  • Fixed a problem with the DbServer class in exclusive mode (#1230).
  • +
  • Implicit conversions from NULL_PSZ to string were returning an empty string and not NULL (#1234).
  • +
  • Fixed a problem in the CTOD() function when the day, month or year were prefixed with spaces.
  • +
  • Fixed an issue with OrderListAdd() in the ADS RDD. When the index is already open, then the RDD no longer returns an error.
  • +
  • Fixed an issue with MemRealloc where the second call on the same pointer would return NULL_PTR (#1248).
  • +
    + VOSDK + +
  • Global arrays in the SDK classes are now initialized from the class constructor of the SQLConnection class to fix problems when the main app does not include a link to the SQL Classes assembly.
  • +
    + Visual Studio integration + Debugger + +
  • The debugger expression evaluator now also evaluates late bound properties and fields (if that compiler option is enabled inside your project).
    If this causes negative side effects then you can disable that in the "Tools/Options Debugging/X# Debugger options screen".
  • +
  • The debugger expression evaluator now is initialized with the compiler options from your main application (if that application is an X# project).
    The settings on the Debugger Options dialog are now only used when debugging DLLs that are loaded by a non X# startup project.
  • +
  • The debugger expression evaluator now always accepts a '.' character for instance fields, properties and methods, regardless of the setting in the project options.
    This is needed because several windows in the VS debugger automatically insert '.' characters when adding expressions to the watch window or when changing values for properties or fields.
  • +
    + New Features + +
  • Added support for importing Indexes in the DbServer editor.
  • +
  • The X# project system now remembers which Windows were opened in the Windows editor in design mode and reopens them correctly when a solution is reopened.
  • +
  • We have added templates for a Harbour console application and Harbour class library.
  • +
  • We have added item templates for FoxPro syntax classes and Xbase++ syntax classes.
  • +
  • The Class templates for the FoxPro and XBase++ dialect now include a class definition in that dialect.
  • +
  • We have improved the support for PPO files in the VS Editor.
  • +
  • We have updated some of the project templates.
  • +
    + Bug fixes + +
  • Fixed a problem with incorrectly showing member list in the editor for the ":=" operator (#1061).
  • +
  • Fixed VOMED generation of menu item DEFINE names that were different to the ones generated by VO (#1208).
  • +
  • Fixed VOWED incorrect order of generated lines of code in some cases (#1217).
  • +
  • Switched back to our own version of Mono.Cecil to avoid issues on computers that have the Xamarin (MAUI) workload in Visual Studio.
  • +
  • Fixed a problem opening a form in the Form Designer that contains fields that are initialized with a function call (#1251).
  • +
  • Windows that were in [Design] mode when a solution is closed, are now properly opened in [Design] mode when the solution is reopened.
  • +
    + Changes in 2.15.0.3 + Compiler + New Features + +
  • Implemented the STACKALLOC syntax for allocating a block of memory on the stack (instead of the heap) (#1084)
  • +
  • Added ASYNC support to XBase++ methods (#1183)
  • +
    + Bug fixes + +
  • Fixed missing compiler error in a few specific cases when using the dot for accessing instance members, when /allowdot is disabled (#1109)
  • +
  • Fixed some issues with passing parameters by reference (#1166)
  • +
  • Fixed some issues with interpolated strings (#1184)
  • +
  • Fixed a problem with the macro compiler not detecting an error with incorrectly accessing static/instance members (#1186)
  • +
  • Fixed incorrect line number reported for error messages on ELSEIF and UNTIL statements (#1187)
  • +
  • Fixed problem with using an iVar named "Value" inside a property setter, when option /cs is enabled (#1189)
  • +
  • Fixed incorrect file/line info reported in error message when the Start() function is missing (#1190)
  • +
  • Fixed bogus warning about ambiguous methods in some cases (#1191)
  • +
  • Fixed a preprocessor problem with nested square brackets (in SUM and REPLACE commands) (#1194)
  • +
  • Fixed incorrect method overload resolution in some cases in the VO dialect (#1195)
  • +
  • Fixed incorrect ambiguous call error with OBJECT/IntPtr parameters (#1197)
  • +
  • Fixed erratic debugging while stepping over code in some cases (#1200, #1202)
  • +
  • Fixed a problem where a missing "end keyword", such as ENDIF, NEXT, ENDDO was not reported when the code between the start and end contained a compiler warning (#1203)
  • +
  • Fixed a problem in the build system where sometimes an error message about an incorrect "RuntimeIdentifier" was shown
  • +
    + Runtime + Bug fixes + +
  • Fixed runtime error in DBSort() (#1196)
  • +
  • Fixed error in the ConvertFromCodePageToCodePage function
  • +
  • A change in the startup code for the XSharp.RuntimeState could lead to incorrect codepages
  • +
    + Visual Studio integration + New Features + +
  • Added VS option for the WED to manually adjust the x/y positions/sizes in the generated resource with multipliers (#1199)
  • +
  • Added new options page to control where the editor looks for identifiers on the Complete Word (Ctrl+Space) command.
  • +
  • A lot of improvements to the debugger expression evaluator (#1050). Please note that this debugger expression evaluator is only available in Visual Studio 2019 and later
  • +
  • Added a debugger options page that controls how expression are parsed by the new debugger expression evaluator.
    You can also change the setting here that disallows editing while debugging.
  • +
  • We have added context help to the Visual Studio source code editor. When you press F1 on a symbol then we inspect the symbol. If it comes from X# then the relevant page in the help file is opened. When it comes from Microsoft then we open the relevant page from the Microsoft Documentation online.
    In a next build we will probably add an option for 3rd parties to register their help collections too.
  • +
  • When a keyword is selected in the editor that is part of a block, such as CASE, OTHERWISE, ELSE, ELSEIF then the editor will now highlight all keywords from that block.
  • +
  • The Jump Keywords EXIT and LOOP are now also highlighted as part of the repeat block that they belong to.
  • +
  • When a RETURN keyword is selected in the editor, then the matching "Entity" keyword, such as FUNCTION, METHOD will be highlighted too.
  • +
  • Added a warning to the Application project options page, when switching the target framework.
  • +
    + Bug fixes + +
  • Fixed previously broken automatic case synchronization, when using the cursor keys to move to a different line in the editor (#722)
  • +
  • Fixed some issues with using Control+Space for code completion (#1044, #1140)
  • +
  • Fixed an intellisense problem with typing ":" in some cases (#1061)
  • +
  • Fixed parameter tooltips in a multiline expressions (method/function calls) (#1135)
  • +
  • Fixed problem with Format Document and the PUBLIC modifier (#1137)
  • +
  • Fixed a problem with Go to definition not working correctly with multiple partial classes defined in the same file (#1141)
  • +
  • Fixed some issues with auto-indenting (#1142, #1143)
  • +
  • Fixed a problem with not showing values for identifiers in the beginning of a new line when debugging (#1157)
  • +
  • Fixed Intellisense problem with LOGICs in some cases (#1185)
  • +
  • Fixed an issue where the completionlist could contain methods that were not visible from the spot where the completionlist was shown (#1188)
  • +
  • Fixed an issue with the display of nested types in the editor (#1198)
  • +
  • Cleaned up several X# project templates, fixing problems with incorrect placement of Debug/Output folders (#1201)
  • +
  • Undoing a case synchronization in the VS editor was not working, because the editor would immediately synchronize the case again (#1205)
  • +
  • Rebuilding the intellisense database no longer restarts Visual Studio (#1206)
  • +
  • Now the VO Menu Editor uses the same menu item DEFINE values, as those used in the original VO app (re-porting of the app is necessary for this to work) (#1207)
  • +
  • A Change to our project system and language service could lead to broken "Find in Files" functionality in some versions of Visual Studio.  This has been fixed.
  • +
  • Fixed an issue where goto definition was not working for protected or private members
  • +
  • Fixed an issue where for certain files the Dropdown combo boxes on top of the editor were not correctly synchronized.
  • +
    + Documentation + Changes + +
  • Some methods in the typed SDK were documented as Function. They are now properly documented as Method
  • +
  • Property Lists and Method lists for classes now include references to methods that are inherited from parent classes. Methods that are inherited from .Net classes, such as ToString() from System.Object are NOT included.
  • +
    + Changes in 2.14.0.2, 3 & 4 + Visual Studio Integration + Bug fixes + +
  • Fixed an exception in the X# Editor when opening a PRG file in VS 2017
  • +
  • Selecting a member from a completion list with the Enter key on a line immediately after an entry that has an XML comment could lead to extra triple slash (///) characters to be inserted in the editor
  • +
  • The triple slash command to insert XML comments was not working. This has been fixed.
  • +
  • Fixed a problem with entity separators not shown on the right line for entities with leading XML comments
  • +
  • Fixed a peek definition problem with types in source code that do not have a constructor
  • +
  • Fixed a problem with the Implement Interface action when the keyword case was not upper case
  • +
  • Fixed a problem that the keyword case was prematurely synchronized in the current line.
  • +
  • Fixed a problem with indenting after keywords such as IF, DO WHILE etc
  • +
  • Fixed a problem with selecting words at the end of a line when debugging
  • +
  • Fixed a problem where Format Document could lock up VS
  • +
  • Fixed a problem that accessors such as GET and SET were not indented inside the property block
  • +
  • Fixed a problem that Format Document was not working for some documents
  • +
  • Changed the priority of the background scanner that is responsible for keyword colorization and derived tasks inside VS.
  • +
    + Changes in 2.14.0.1 + Compiler + Bug fixes + +
  • Fixed a problem with date literals resulting in a message about an unknown alias "gloal" (#1178)
  • +
  • Fixed a problem that leading 0 characters in AssemblyFileVersion and AssemblyInformationalVersion were lost. If the attribute does not have the wildcard '*' then these leading zeros are preserved (#1179)
  • +
    + Runtime + Bug fixes + +
  • The runtime DLLs for 2.14.0.0 were marked with the TargetFramework Attribute. This caused problems. The attribute is no longer set on the runtime DLLs (#1177)
  • +
    + Changes in 2.14.0.0 + Compiler + Bug fixes + +
  • Fixed a problem resolving methods when a type  and a local have the same name (#922)
  • +
  • Improved XML doc messages for methods implicitly generated by the compiler (INITs, implicit constructors) (#1128)
  • +
  • Fixed an internal compiler error with DELEGATEs with default parameter values (#1129)
  • +
  • Fixed a problem with incorrect calculation of the memory address offset when obtaining a pointer to a structure element (#1132)
  • +
  • Fixed problematic behavior of #pragma warning directive unintentionally enabling/.disabling other warnings (#1133)
  • +
  • Fixed a problem with marking the complete current executing line of code while debugging (#1136)
  • +
  • Fixed incompatible to VO behavior with value initialization when declaring global MEMVAR (#1144)
  • +
  • Fixed problem with compiler rule for DO not recognizing the "&" operator (#1147 )
  • +
  • Fixed inconsistent behavior of the ^ operator regarding narrowing conversion warnings (#1160)
  • +
  • Fixed several issues with CLOSE and INDEX UDC commands (#1162, #1163)
  • +
  • Fixed incorrect error line reported for error XS0161: not all code paths return a value (#1164)
  • +
  • Fixed bogus filename reported in error message when the Start() function is missing (#1167)
  • +
  • The PDB information for a command defined in a UDC now highlights the entire row and not just the first keyword
  • +
  • Fixed a problem in the CLOSE ALL and CLOSE DATABASES UDC.
  • +
    + Runtime + New Features + +
  • Added 2 new values to the DbNotificationType enum: BeforeRecordDeleted and BeforeRecordRecalled. Also added AfterRecordDeleted and AfterRecordRecalled which are aliases for the already existent RecordDeleted and RecordRecalled (#1174)
  • +
    + Bug fixes + +
  • Added/updated several defines in the Win32API SDK library (#696)
  • +
  • Fixed a problem with "SkipUnique" not working correctly (#1117)
  • +
  • Fixed an RDD scope problem when the bottom scope is larger than the highest available key value (#1121)
  • +
  • Fixed signature of LookupAccountSid() function in the Win32API SDK library (#1125)
  • +
  • Improved exception error message when attempting to use functions like Trim() (which alter the key string length) in index expressions (#1148)
  • +
  • Fixed a Macro Compiler runtime exception when there is an assignment in an IIF statement (#1149)
  • +
  • Fixed a problem with resolving the correct overloaded method in late bound calls (#1158)
  • +
  • Fixed a problem with parametrized SQLExec() statements in the FoxPro Dialect
  • +
  • Fixed a problem in the Days() function where the incorrect number of seconds in a day was used.
  • +
  • Fixed a problem in the Advantage RDD when a FieldGet returned fields with trailing 0 characters. These are now replaced with a space.
  • +
  • Fixed a problem with DBI_LUPDATE in the ADS RDDs
  • +
  • Fixed the Debugger display of the USUAL type.
  • +
    + Visual Studio integration + New Features + +
  • Now using the "Reference Manager" instead of the "Add Reference Dialog Box" for adding References (#21, #1005)
  • +
  • Added an option to the Solution Explorer context menu to split a Windows Form in a form.prg and form.designer.prg (#33)
  • +
  • We have added an options page to the Tools / Options TextEditor/X# settings that allows you to enable/disable certain features in the X# source code editor, such as "Highlight Word", "Brace Matching" etc. The option to backup the source code for the Windows Forms Editor has been moved from the Texteditor options page to the Custom Editor options page. Search for 'Backup" in the Tools/Options dialog to find the setting.
  • +
  • Tooltips for all source code items now contain the Location (file name and the line/column).
  • +
  • We have added "search keywords" to all of our option page. you may be able to find a page by typing the keyword that you are looking for in the search control.
  • +
    + Bug fixes + +
  • Fixed  a problem renaming files when a solution is under SCC with Team Foundation Server (#49)
  • +
  • The WinForms designer now ignores differences in the namespaces specified in the form.prg and designer.prg files (the one from form.prg is used) (#464)
  • +
  • Fixed incorrect mouse tooltip for a class in some cases (#871)
  • +
  • Fixed a code completion issue on enum types with extension methods (#1027)
  • +
  • Fixed some intellisense problems with enums (#1064)
  • +
  • Fixed a problem with Nuget packages in VS 2022 causing first attempts to build projects to fail (#1114)
  • +
  • Fixed a formatting problem in XML documentation tooltips (#1127)
  • +
  • Fixed a problem with including bogus extra static members in the code completion list in the editor (#1130)
  • +
  • Fixed problem with Extension methods not included in Goto Definition, Peek definition, QuickInfo tips and Parameter Tips (#1131)
  • +
  • Fixed a problem in determining the correct parameter number for parameter tips when a compiler pseudo function such as IIF() was used inside the parameter list (#1134)
  • +
  • Fixed a problem with selecting words with mouse double-click in the editor with underscores while debugging (#1138)
  • +
  • Fixed a problem with evaluating values of identifiers with underscores in their names while debugging (#1139)
  • +
  • Fixed identifier highlighting causing the VS Editor to hang in certain situations (#1145)
  • +
  • Fixed indenting of generated event handler methods in the WinForms designer (#1152)
  • +
  • Fixed a problem with the WinForms designer duplicating fields when adding new controls (#1154)
  • +
  • Fixed a problem with the WinForms designer removing #region directives (#1155)
  • +
  • Fixed a problem with the WinForms designer removing PROPERTY declarations (#1156)
  • +
  • Fixed a problem that the type lookup for locals was failing in some cases (#1168)
  • +
  • Fixed a problem where the existence of extension methods in code was causing a problem filling the member list (#1170)
  • +
  • Fixed a problem when completing the member completion list without selecting an item (#1171)
  • +
  • Fixed a problem with showing member completion on types of static members of a class (#1172)
  • +
  • Fixed a problem with the indentation after single line entities, such as GLOBAL, DEFINE, EXPORT etc. (#1173)
  • +
  • Fixed a problem with parameter tips for extension methods (#1175)
  • +
  • Fixed a problem with tooltips for namespaces and nested classes (#1176)
  • +
  • Optional tokens in UDCs were not colored as Keyword in the source code editor
  • +
  • Fixed a problem in the CodeDom provider that failed to load on a Build Server because of  a dependency to Microsoft.VisualStudio.Shell.Design version 15.0 when generating code for WPF projects.
  • +
    + Changes in 2.13.2.2 + Compiler + Bug fixes + +
  • Class members declared with only the INSTANCE modifier were generated as public. This has been changed to protected, just like in Visual Objects (#1115)
  • +
    + Runtime + Bug fixes + +
  • IVarGetInfo() returned incorrect values for PROTECTED and INSTANCE members. This has been fixed.(#1116)
  • +
  • The Default() function was changing usual variables initialized with NULL_OBJECT to the new value. This was not compatible with Visual Objects (#1119)
  • +
    + Visual Studio integration + New Features + +
  • The Rebuild Intellisense Database menu option now asks for confirmation before restarting Visual Studio (#1120)
  • +
  • The "Include Files" node in the solution explorer can now be hidden (Tools/ Options X# Custom Editors/Other Editors)
  • +
    + Bug fixes + +
  • The type information for variables declared in a CATCH clause was not available. This has been fixed (#1118)
  • +
  • Fixed several issues with parameter tips (#1098, #1065)
  • +
  • Fixed a performance issue when the cursor was on a undeclared identifier in a "global" entity such as a function or procedure in VERY large projects
  • +
  • The "Include Files" node could contain duplicate references when the source code for an #include statement contained relative paths, such as
    #include "..\GlobalDefines.vh"
  • +
    + +
  • Suppressed the expansion of the "Include Files" node in the Solution Explorer when a solution is opened.
  • +
  • Single character words (like i, j, k) were not highlighted with the 'highlight word' feature
  • +
  • The type 'ptr' was not marked in the keyword color in quickinfo tooltips
  • +
  • The nameof, typeof and sizeof keywords were not synchronized in the keyword case
  • +
    + Changes in 2.13.2.1 + Compiler + New Features + +
  • The parser now recognizes AS <type> clause for PUBLIC and PRIVATE memory variable declarations but ignores these with a warning
  • +
  • We have added support for AS <type> for locals declared with LPARAMETERS. The function/procedure is still clipper calling convention, but the local variable is of the declared type.
  • +
    + Bug fixes + +
  • The PUBLIC and PRIVATE keywords are sometimes misinterpreted as memvar declarations when the /memvar compiler option is not even selected. We have added parser rules to prevent this from happening: when /memvar is not selected then PUBLIC and PRIVATE are only used as visibility modifiers
  • +
  • Fix to an issue with selecting function and method overloads (#1096, #1101)
  • +
  • Build 2.13.2.0 introduced a problem that could cause a big performance problem for VERY large source files. This has been fixed in 2.13.2.1.
  • +
    + + Runtime + Bug fixes + +
  • When the runtime cannot resolve a late bound call to an overloaded method it produces an error message that includes a list of all relevant overloads (#875, #1096).
  • +
  • The .NULL. related behavior that was added for the FoxPro dialect was breaking existing code that involves usuals. In the FoxPro dialect DBNull.Value is now seen as .NULL. but in the other dialects as a NULL_OBJECT / NIL
  • +
  • Several internal members of the PropertyContainer class in the VFP library are now public
  • +
    + Visual Studio integration + Bug fixes + +
  • The lookup code for Peek definition, Goto definition etc. was filtering out instance methods and only returning static methods. This has been fixed (#1111, #1100)
  • +
  • Several changes to fix issues with indentation while typing (#1094)
  • +
  • Fixed several problems with parameter tips (#1098, #1066, #1110)
  • +
  • A recent change to support the wizard that converts packages.config to package references has had a negative impact on nuget restore operations during builds inside Visual Studio. This was fixed. (#1113 and #1114)
  • +
  • Fixed recognition of variables in lines such as CATCH, ELSEIF, FOR, FOREACH etc (#1118)
  • +
  • Fixed recognition of types in the default namespace (#1122)
  • +
    + Changes in 2.13.1 + Compiler + New Features + +
  • The PUBLIC and PRIVATE statements in the FoxPro dialect now support inline assignments, such as in
    PUBLIC MyVar := 42
    Without initialization the value of the PUBLIC will be FALSE, with the exception of the variable with the name "FOXPRO" and "FOX". These will be initialized with TRUE in the FoxPro dialect
  • +
    + Bug fixes + +
  • Fixed a problem with initialization of File Wide publics in the foxpro dialect
  • +
  • Column numbers for error messages were not always correct for complex expressions. This has been fixed (#1088)
  • +
  • Corrected an issue in the lexer where line numbers were incorrect when the source contains statements that span multiple lines (by using a semicolon as line continuation character) (#1105)
  • +
  • Fixed a problem in the overload resolution when one or more overloads have a Nullable parameter(#1106), such as in
      class Dummy    
         method Test (param as usual) as int
         .
         method Test(param as Int? as int
         .
      end class
  • +
  • Fixed a problem with the code generation for late bound method calls and/or array access in the FoxPro dialect with the /fox2 compiler compiler option ("compatible array handling") for variables of unknown type (#1108).
    An expression such as  

      undefinedVariable.MemberName(1)

    was interpreted as an array access but it could also be a method call.
    The compiler now generates code that calls a runtime function that checks at runtime if "MemberName" is either a method or a property.
    If it is a property then the runtime will assume that it is an array and access the first element.
    Code with more than 2 parameters or with non-numeric parameters, such as

      undefinedVariable.DoSomething("somestring")

    was not affected, since "somestring"  cannot be an array index.
    TIP: We recommend however, to always declare variables and specify their type. This helps to find problems at compile time and will generate MUCH faster code.
  • +
    + + Runtime + New Features + +
  • Added functions to resolve method calls or array access at runtime  (#1108)
  • +
  • Added GoTo record number functionality to the WorkareasWindow in the XSharp.RT.Debugger library
  • +
    + Visual Studio Integration + New Features + +
  • Now the VS Project tree shows (in a special node) include files that are used by a project (#906).
    This includes include files inside the project itself but also include files in the XSharp folder or Vulcan folder (when applicable).
  • +
  • We are using the built-in images of Visual Studio in the project tree and on several other locations when possible.
  • +
  • Our background parser inside VS is now paused during the built process to interfere less with the build.
  • +
  • We have added a setting to the indentation options so you can control the indentation for class fields and properties separately from methods.
    So you can choose to indent the fields and properties and to not indent the methods. This has also been added to the .editorconfig file
  • +
    + Bug Fixes + +
  • Fixed problems with Peek Definition and Goto Definition
  • +
  • When looking up Functions we were (accidentally) sometimes also including static methods in other classes.
  • +
  • When parsing tokens for QuickInfo and Peek Definition then a method name would not be found if there was a space following the name and before the open parenthesis.
  • +
  • Fixed a problem where project wide resources and settings (added from the project properties page) did not get the code behind file when saving
  • +
  • Quick Info and Goto definition on a line that calls a constructor will now show / goto the first constructor of the type and no longer to the type declaration
  • +
  • When the build process of a project was failing due to missing resources or other resource related problems, then the error list was not properly updated. This has been fixed (#1102)
  • +
  • The XSharpDebugger.DLL was not installed properly into VS2017 and VS2019.
  • +
    + Changes in 2.13 + Compiler + New Features + +
  • We have implemented a new compiler option /allowoldstyleassignments, which allows using the "=" operator instead of ":=" for assignments.
    This option is enabled by default in the VFP dialect and disabled by default in all other dialects.
  • +
    + +
  • We have revised the behavior of the /vo4 and /vo11 command line options that are related to numeric conversions.
    Before /vo4 only was related to conversions between integral numbers. It has now been extended to also include conversions between fractional numbers (such as float, real8, decimal and currency) and integral numbers.
    In the original languages (VO, FoxPro) you can assign a fractional number to a variable with integral value without problems.
    In .Net you can't do that but you will have to add a cast to the assignment:
  • +
    + LOCAL integerValue as INT
    LOCAL floatValue := 1.5 as FLOAT
    integerValue := floatValue          // no conversion: this will not compile in .Net without conversion
    integerValue := (INT) floatValue    // explicit conversion: this does compile in .Net
    ? integerValue

    If you enable the compiler option /vo4 then the assignment without the cast will also work.
    The /vo4 compiler option adds an implicit conversion
    In both cases the compiler will produce a warning:
    warning XS9020: Narrowing conversion from 'float' to 'int' may lead to loss of data or overflow errors
    The value of the integer integerValue above is controlled by the /vo11 compiler option:
    By default in .Net conversions from a fractional value to an integer value will round towards zero, so the value will then be 1.
    If you enable the compiler option /vo11 then the fractional number will be rounded to the nearest even integral value, so the value of integerValue in the example will be 2.
    This is not new.
    We have made a change in build 2.13, to make sure that this difference is no longer determined at runtime for the X# numeric types but at compile time.
    In earlier builds this was handled inside conversion operators from the FLOAT and CURRENCY types in the runtime.
    These classes choose the rounding method based on the /vo11 setting from the main program which is stored in the RuntimeState object.
    However that could lead to unwanted side effects when an assembly was compiled with /vo11 but the main program was not.
    This could happen for example with ReportPro or bBrowser.
    If the author of such a library now chooses to compile with /vo11 then he can be certain that all these conversions in his code will follow rounding to zero or rounding to the nearest even integer, depending on his choice.
    + +
  • The DebuggerDisplay attribute for Compile Time Codeblocks has changed. You now see the source code for compile time codeblocks in the debugger.
  • +
    + Bug fixes + +
  • Fixed a code generation issue with ASYNC/AWAIT (#1049)
  • +
  • Fixed an Internal compiler error with Evaluate() in CODEBLOCK in VFP dialect (#1043)
  • +
  • Fixed an Internal compiler error with UDCs incorrectly inserted after an END FUNCTION statement
  • +
  • Fixed a problem in the preprocessor with #region and #endregion in nested include files (#1046)
  • +
  • Fixed some problems with evaluating DEFINEs based on the order they appear (#866, #1057)
  • +
  • Fixed a compiler error with nested BEGIN SEQUENCE .. END SEQUENCE statements (#1055)
  • +
  • Fixed some problems with codeblocks containing complex expressions (#1056)
  • +
  • Fixed problem assigning function to delegate, when /undeclared+ is enabled (#1051)
  • +
  • Fixed a bogus warning when defining a LOCAL FUNCTION in the Fox dialect (#1017)
  • +
  • Fixed a problem with the Linq Operation Sum on FLOAT values (#965)
  • +
  • Fixed a problem with using SELF in an anonymous method/lamda expression (#1058)
  • +
  • Fixed an InvalidCastException when casting a Usual to a Enum defined as DWord (#1069)
  • +
  • Fixed incorrect emitted code when calling AScan() with param nStart supplied and similar functions (#1062, #1063)
  • +
  • Fixed a problem with resolving the correct one form overloads of the same function that span across different assemblies (#1079)
  • +
  • Fixed unexpected behavior of the preprocessor with #translate for specific XBase++ code (#1073)
  • +
  • Fixed a problem with unexpected behavior of "ARRAY OF" (#885)
  • +
  • Fixed some issues with calling specific overloads of functions accepting an ARRAY as a first argument (#1074)
  • +
  • Fixed a bogus XS0460 error when using the PUBLIC keyword on a method (#1072)
  • +
  • Fixed incorrect behavior when enabling Named Arguments option (#1071)
  • +
  • Fixed Access violation when calling a function/method with DECIMAL argument with default value (#1075)
  • +
  • Fixed some issues with #xtranslate not recognizing the Regular match marker in the preprocessor. Also fixed an issue with recognizing the double colon (::) inside expression tokens in the preprocessor. (#1077)
  • +
  • Fixed some issues with declaring arrays in the VFP dialect (#848)
  • +
    + + Runtime + Bug fixes + +
  • Fixed some incompatibilities with VO in the Mod() function
  • +
  • Fixed an exception with Copy to array in the VFP dialect when dimensions do not match (#993)
  • +
  • Fixed a seeking problem with SetDeleted(TRUE) and DESCEND order (#986)
  • +
  • Fixed a problem with DataListView incorrectly showing (empty) deleted records with SetDeleted(TRUE) (#1009)
  • +
  • Fixed problem with SetOrder() failing with SYMBOL argument (#1070)
  • +
  • Reverted a previous incorrect change in the SDK in DBServer:FieldGetFormatted() (#1076)
  • +
  • Fixed several issues with StrEvaluate(), including not recognizing MEMVARs with underscores in their names (#1078)
  • +
  • Fix for a problem with InList() and string values (#1095)
  • +
  • The Empty() function now returns false for the values .NULL. and DBNull.Value to be compatible with FoxPro
  • +
  • Fixed a problem with GetDefault()/ SetDefault() to make them compatible with Visual Objects (#1099)
  • +
    + + New Features + +
  • Enhancements for Unicode AnyCpu SQL classes (#1006):
  • +
  • Added a property to open a Sqlselect in readonly mode. This should prevent Append(), Delete() and FieldPut()
  • +
  • Implemented delay creating InsertCmd, DeleteCmd, UpdateCmd until really needed
  • +
  • Added callback mechanism so customers can override the commandtext for these command (and for example route them to stored Procedures)
  • +
  • When a late bound method call cannot be resolved because the method is overloaded then a better error message is now generated that also includes the prototypes of the methods found (#1096)
  • +
    + + + FoxPro dialect + +
  • Added ADatabases() function
  • +
    + Visual Studio Integration + New features + +
  • You can now control how indenting is done through the Tools/Options Text Editor/X# option pages. We have added several options that control indenting of your source code. You can also set these from an .editorconfig file if you want to enforce indenting rules inside your company.
  • +
  • We have now added extensive code formatting options to the source code editor. See Tools/Options/Text Editor/X#/Indentation for available options (#430)
  • +
  • We have implemented the option "Identifier Case Synchronization". This works as follows: The editor picks up the first occurrence of an Identifier (class name, variable name etc) in a source file and make sure that all other occurrences of that identifier in the same source file use the same case. This does NOT enforce casing across source files (that would be way too slow)
  • +
  • We have added color settings to the VS Color dialog for Matched braces, Matched keyword and Matched identifiers. Open the Tools/Options dialog, Choose Environment/Fonts and Colors and look for the colors in the listbox that start with the word "X#". You can customize these to your liking.
  • +
  • X# projects that use the Vulcan Runtime now have a context menu item that allows you to convert them to the X# runtime. Standard Vulcan assemblies will be replaced with the equivalent X# runtime assemblies. If you are using 3rd party components such as bBrowser or ReportPro then you need to replace the references to these components yourself.(#32)
  • +
  • We have added an option to the language page of the project properties to set the new /allowoldstyleassignments commandline option for the compiler
  • +
    + + Bug fixes + +
  • Fixed a problem with Get Latest Version for solution that is under TFS (#1045)
  • +
  • Fixed WinForm designer changing formatting in main-prg file (#806)
  • +
  • Fixed some problems with code generation in the WinForms designer (#1042, #1052)
  • +
  • Fixed a problem with formatting of DO WHILE (#923)
  • +
  • Fixed problem with Light Bulb "Generate default constructor" feature (#1034)
  • +
  • Fixed problem with ToolTips in the Debugger. We now parse the complete expression from the first token until the cursor location. (#1015)
  • +
  • Fixed some remaining intellisense issues with .Net array locals defined with VAR (#569)
  • +
  • Fixed a problem with indenting not working correctly in some cases (#421)
  • +
  • Fixed a problem with auto outdenting (#919)
  • +
  • Several improvements to keyword pair matching (#904)
  • +
  • Fixed a problem with Code Completion showing also static members after typing a dot in "ClassName{}." #1081
  • +
  • Fixed a performance Issue when typing . for .and. (#1080)
  • +
  • Fixed a problem with the navigation bar while typing new classes/methods (#1041)
  • +
  • Fixed incorrect info tooltips on keywords (#979)
  • +
  • Fixed a possible VS freeze when using "Clean Solution" (#1053)
  • +
  • Fixed incorrect positioning of caret in eventhandlers in the form designer (#1092)
  • +
  • Fixed a problem with the form designer failing to open forms after creating a new one (#1093)
  • +
  • Right Click on a packages.config file and choosing the option "Migrate to packagereferences" did not work because inside Visual Studio there is a hardcoded list of supported project types. We are now "faking" the projecttype to make VS happy and enable the wizard.
  • +
    + Build System + +
  • The XSharp.Build.Dll, which is responsible for creating the command line when compiling X# projects in VS, was not properly passing the /noconfig and /shared compiler options to the compiler. As a result the shared compiler was not used, even when the project property to use the Shared Compiler was enabled. Also the compiler was automatically including references to all the assemblies that are listed inside the file xsc.rsp, which is located inside the XSharp\bin folder.
    You may experience now that assemblies will not compile because of missing types. This will happen if you are using a type that is inside an assembly that is listed inside xsc.rsp. You should add explicit references to these assemblies in your X# project now.
  • +
    + Changes in 2.12.2.0 + Compiler + Bug fixes + +
  • Fixed a bug in the code generation for handling FoxPro array access with parenthesized indices (#988, #991)
  • +
  • The compiler was generating incorrect warnings for locals declared with IS. This has been fixed.
  • +
  • The compiler was not reporting an error on invalid usage of the OVERRIDE modifier on ACCESS/ASSIGNs, this has been fixed (#981)
  • +
  • Fixed inconsistent behavior in reporting warnings and errors in several cases when converting from various numeric data types to another (#951, #987)
  • +
  • Fixed some "failed to emit module" issues with iif() statements in some cases (#989)
  • +
  • Fixed a problem with compiling X# code scripts (#1002)
  • +
  • Fixed a problem with using classes for some specific assemblies in the macro compiler (#1003)
  • +
  • Fix an incorrect error message when adding an INT to a pointer in AnyCPU mode (#1007)
  • +
  • Fixed a problem with casting STRING to PTR syntax (#1013)
  • +
  • Fixed a problem with PCount() when passing a single NULL argument to a CLIPPER function/method (#1016)
  • +
    + New Features + +
  • We have added support for the TEXT .. ENDTEXT command in all dialects. Please note that there are several variations of this command. One variation work in ALL dialects (TEXT TO varName). Other variations depend on the dialect chosen. We have moved the support for TEXT .. ENDTEXT now also from the compiler to the preprocessor. This means that there are also 2 new preprocessor directives, #text and #endtext (#977, #1029)
  • +
  • Implemented new compiler option /vo17, which implements a more compatible to VO behavior for the BEGIN SEQUENCE..RECOVER command (#111, #881, #916):
  • + +
  • For code that contains a RECOVER USING, a check is made for wrapped exceptions. When the exception is not a wrapped exception then a function in the runtime is called (FUNCTION _SequenceError(e AS Exception) AS USUAL) that can process the error. It can for example call the error handler, or throw the error
  • +
  • When there is no RECOVER USING clause , then the compiler generates one and from within this generated clause detects if the RECOVER was reached with a wrapped exception or a normal exception. For wrapped exceptions it gets the value and calls a special function in the runtime (FUNCTION _SequenceRecover(uBreakValue AS USUAL) AS VOID). When the generated recover is called with a 'normal' exception then _SequenceError function from the previous bullet is called.
  • +
    +
    + +
  • We have added support for CCALL() and CCALLNATIVE()
  • +
  • The #pragma directives are now handled by the preprocessor. As a result you can add #pragma lines anywhere in your code: between entities, inside the body of an entity etc.
  • +
    + Runtime + Bug fixes + +
  • Changed the prototype for AdsGetFTSIndexInfo (#966)
  • +
  • Fixed a problem with TransForm and decimal types (#1001)
  • +
  • Added several missing return types in the VFP assembly
  • +
  • Fixed a problem with browsing a DBFVFP table in the FoxPro dialect
  • +
  • Fixed an inconsistency with handling values provided by BREAK commands inside surrounding BEGIN...RECOVER statements, depending on if early or late bound call is used (#883)
  • +
  • Fixed a problem with floating point format when assigning a System.Decimal value to a USUAL var (#1001)
  • +
  • Fixed a runtime error with DbCopyToArray() when copying to an array that has more columns than the table, in the FoxPro dialect (#993)
  • +
  • Fixed a problem with the typecast expression and numeric literals with the +/- sign in the macro compiler (#1025)
  • +
  • Fixed problem in the Late binding code where a string was sometimes passed in and not properly converted to symbol
  • +
  • IVarPut()/IVarGet() now throw an appropriate exception when trying to use an inaccessible (due to limiting visibility modifiers) property getter/setter (ACCESS/ASSIGN) (#1023)
  • +
  • Fixed an issue with IVarGet() and IVarPut() for properties that are redefined in a subclass with the NEW modifier (#1030)
  • +
  • DbDataSource now tries to lock a record when deleting or recalling the record
  • +
  • Foreach was not working correctly on properties containing collections that were returned from a late bound property access such as IVarGet()(#1033)
  • +
    + New Features + +
  • You can now register a delegate in the runtime state that allows you to control how the macro compiler caches types from loaded assemblies(#998).
    This delegate has to have the format:

    DELEGATE MacroCompilerIncludeAssemblyInCache(ass as Assembly) AS LOGIC

    Example:

    XSharp.RuntimeState.MacroCompilerIncludeAssemblyInCache := { a  =>  DoNotCacheDevExpress(a)}
    FUNCTION DoNotCacheDevExpress(ass as Assembly) AS LOGIC)
      // do not cache DevExpress assemblies
      RETURN ass:Location:IndexOf("devexpress", StringComparison.OrdinalIgnoreCase) == -1
  • +
    + Compatible VO SDK + +
  • Fixed an issue where SetAnsi(FALSE) causes SingleLineEdit controls with pictures to show random characters when entering umlauts (#1038)
  • +
    + Typed VO SDK + There are 2 new properties for the SQLSelect class. + +
  • ReadOnly - which makes the SQLSelect Readonly
  • +
  • BatchUpdates - which controls how updates are handled
  • +
    + ReadOnly cursors and delayed creation of command objects + Previously the SQLSelect class created DbCommand objects to update, insert and delete changes made to a cursor immediately when the result set was opened.
    That could cause problems when a complex query was used to select data, because the DbCommandBuilder object could not figure out how to create these statements.
    + We are now delaying the creation of these commands until the first time they are needed.
    At the same time we have now added a ReadOnly property with a default value of FALSE.
    + If you set ReadOnly to true then: + +
  • Calling FieldPut(), Delete() and Append() will generate an error with Gencode EG_READONLY.
  • +
  • No Command objects will be created for the SQLSelect, because the cursor cannot be updated.
  • +
    + If ReadOnly remains FALSE then the command objects to update, insert and delete will be created the first time they are needed.
    These commands are created in the __CreateDataAdapter() method.
    You can override this method and create the commands in your own subclass when you want.
    The command creation and the updates work as follows:
    + +
  • First a DataAdapter (of type DbDataAdapter) is created using the CreateDataAdapter method from the SQLFactory class
  • +
  • Then a CommandBuilder object (of type DbCommandBuilder) is created from the CreateCommandBuilder method of the SQLFactory class
  • +
  • Then the Insert, Delete and Update Command objects (all of type DbCommand) are created from the GetInsertCommand() etc methods from the DbCommandBuilder object. The DBCommandBuilder object takes the Select statement and creates commands with parameters based on the SQLSelect command
  • +
  • These command objects are assigned to the DataAdapter and then the DataAdapter:Update() method is called with the DataTable that is behind the SQLSelect as argument.
  • +
    + Batch Updates + Normally updates in a SQLSelect will be sent to the server when you move the record pointer to a new row, or when you call Update() + If you set the BatchUpdates property to TRUE then the SQLSelect will delay sending updates to the server and will not do that for each record movement, but will wait until you call the Update() method with an argument TRUE. This will then write all the buffered changes to the server. This may then also trigger the creation of the DBCommand objects (see before).
    If your table has autoincrement fields then you may want to call Requery() afterwards to see the newly assigned key values.
    + Visual Studio Integration + Bug fixes + +
  • Fixed the handling for project property pages for flavored projects (#992)
  • +
  • When trying to start the debugger with a non existing working directory or program file name, now an appropriate error is displayed (#996)
  • +
  • Fixed a problem with the form designer generating sometimes invalid code with #regions (#1020, #935)
  • +
  • The WinForms designer now by default adds the OVERRIDE keyword modifier to the generated Dispose() method (was added in the template) (#1004)
  • +
  • Due to a changed threading model inside the latest VS2022 releases, error messages were sometimes not shown in the output window and the error list. This has been fixed
  • +
  • Fixed a problem in the windows forms designer code generation with nested classes inside the main form class (#1031).
  • +
  • Fixed problem with windows forms editor failing to open form with command based on UDC (#1037).
  • +
    + Sourcecode Editor + +
  • Type lookups on full names were sometimes failing because the fullname was defined as case sensitive (#978)
  • +
  • Nested type lookup was sometimes failing. This has been fixed.
  • +
  • The indenting options can now also be overridden in the .editorconfig file (#999)
  • +
  • When a source file was loaded in the editor then the combo boxes with types and members were not activated until the caret was moved in the buffer (#995)
  • +
  • The member combobox in the editor was getting confused for code that contains local functions or local procedures.
  • +
  • Fixed a lookup problem for expressions inside a conversion or cast with a keyword, such as DWORD( SomeExpression). There were no quick info tips for the expression inside the parentheses for the conversion (#997)
  • +
  • Fixed an intellisense problem with DATATYPE(<expression>) conversion expressions (#997)
  • +
  • Fixed a problem with properties declared with the => symbol in their implementation causing Navigation Bar contents to be incomplete (#1008)
  • +
  • Fixed several issues with code folding and formatting (#975)
  • +
  • Fixed problem with typing a comma inside an argument list did not invoke the Parameters Tooltip (#1019)
  • +
  • Fixed some issues with the detection of variable types for the VAR keyword (#903)
  • +
  • Fixed an Intellisense problem with typing ":" or "." inside a string literal (#1021)
  • +
  • Fixed a problem with unknown identifiers sometimes causing bogus member completion list to show (#1022)
  • +
  • Pressing CTRL+SPACE in the editor now always invokes a code completion list (#957)
  • +
    + New Features + +
  • Added options to insert page and reorder pages in a tabcontrol, in the VOWED (#1024)
  • +
  • We have updated the WPF Application template. The Main window is now called  "MainWindow".
  • +
  • Added the following new settings to the .editorconfig file to set indentation options (#999).
  • +
    + +
  • indent_entity_content (true or false)
  • +
  • indent_block_content (true or false)
  • +
  • indent_case_content (true or false)
  • +
  • indent_case_label (true or false)
  • +
  • indent_continued_lines (true or false)
  • +
    + + VOXporter + +
  • The VOXporter now correctly enabled or disables the Allow MEMVAR/Undeclared vars compiler options, if they were enabled in the VO app (#1000)
  • +
    + Changes in 2.11.0.1 + Compiler + Bug fixes + +
  • Fixed an internal compiler error with CLIPPER calling convention delegates (#932)
  • +
  • Fixed an AccessViolationException at runtime with the Null-conditional operator ?. on a usual property (#770)
  • +
  • [XBase++ dialect] Fixed a problem with parsing method declarations with parentheses (#927)
  • +
  • [XBase++ dialect] Fixed a problem with parsing the (obsolete in X#) ANNOUNCE and REQUEST statements (#929)
  • +
  • [XBase++ dialect] Fixed a problem with parsing INLINE ACCESS and ACCESS ASSIGN statements (#926)
  • +
  • [VFP dialect] Fixed a problem with parsing FOR EACH statements containing "M." variables usage where the variable was not typed in the FOR EACH line (#911) .
  • +
  • Fixed a problem where the PPO files contains some output twice, when a single UDC was producing several statements (#933)
  • +
  • Fixed some issues with the "FIELDS" clause in several UDCs (#931, #795)
  • +
  • Fixed a problem in the preprocessor with parentheses in #xtranslate directives (#963)
  • +
  • Fixed several more issues with #command and #translate directives (#915)
  • +
  • In some cases, the compiler would emit code that does not throw a runtime exception, when casting/converting from one type to an incompatible one. This has been fixed (#961, #984)
  • +
  • The compiler was not reporting narrowing conversion warnings in several cases, this has been fixed (#951)
  • +
  • The compiler was not reporting signed/unsigned conversion warnings. This has been fixed (#971)
  • +
  • Fixed a problem that could lead to the "Could not emit module" error message, caused by NULL values inside IIF() expressions(#989)
  • +
    + New features + +
  • Added compiler option /noinit to not generate $Init calls for libraries without INIT procedures for the sake of postponed loading (#854)
  • +
  • Added preprocessor support for #stdout and #if. (#912)
  • +
  • The full contents of #include files is now written to the ppo file (#920)
  • +
  • When a parser error occurs because an identifier was replaced by a define with the same name, then the compiler will now generate a second warning.
  • +
  • If a header file contains actual code and this code is called during debugging then the debugger will now step into the header file when debugging this code.
    Previously all statements were linked to the #include line from the place where the header was included. (#967)
  • +
  • When you are suppressing compiler errors with the /vo11 (Compatible numeric conversion) compiler option you will now see a XS9020 "narrowing" warning indicating that a runtime error may happen or that data may be lost.
  • +
  • When you are suppressing conversion errors between signed and unsigned integers with /vo4 then you will now see as XS9021 warning indicating that data may be lost or an overflow error may occur.
  • +
    + Visual Studio Integration + New features + +
  • The source code editor now also supports the new #if and #stdout preprocessor commands  (#912)
  • +
  • There is new "Lightbulb" option to generate constructors for classes.
  • +
    + Bug Fixes + +
  • Fixed a problem with specifying custom preprocessor defines in the project properties (#909)
  • +
  • The VO-style editors now retain existing "CLIPPER" clause to methods/constructors when generating code (#913)
  • +
  • Fixed incorrect parsing of classes as nested to each other (#939)
  • +
  • Fixed a problem with using embedded variables in the form of $(SomeName) in the project settings (#928)
  • +
  • Fixed a problem where deleting items from a project would fail.
  • +
  • Fixed a problem resolving the DLL produced by project files from other development languages, in particular SDK style C# projects (#950)
  • +
  • Fixed a problem with quick info tooltip after an unrecognized identifier (#894)
  • +
  • Fixed a problem with the editor incorrectly adding parentheses after auto typing a property (#974)
  • +
  • Fixed extremely slow editor response when creating a new line after an #endif directive (#970)
  • +
  • Fixed some intellisense issues with .Net array types (#569)
  • +
  • Fixed a problem with the DevExpress DocumentManager control at design time (#976)
  • +
  • Fixed an ArgumentNullException in the Output window when "Show output from" is set to "Extension" (#940)
  • +
    + Runtime + New features + +
  • Added a constructor with IEnumerable to the array class (#943)
  • +
  • Implemented missing functions AdsSetTableTransactionFree() and AdsGetFTSIndexInfo() (#966)
  • +
  • Moved functions GetRValue(), GetGValue() and GetBValue() from the Win32API library to XSharp.RT, so they can be used by AnyCPU code (#972)
  • +
  • [VFP dialect] Implemented function APrinters() (#952)
  • +
  • [VFP dialect] Implemented function GetColor() (#973)
  • +
  • [VFP dialect] Implemented functions Payment(), FV() and PV() (#964)
  • +
  • [VFP dialect] Implemented commands MKDIR, RMDIR and CHDIR (#614)
  • +
    + Bug fixes + +
  • Fixed a problem with the ListView TextColor and TextBackgroundColor ACCESSes in the SDK (#896)
  • +
  • Fixed a problem with soft Seek not respecting order scope when to strict key is found (#905)
  • +
  • Fixed DBUseArea() search logic for files in various folders. Also SetDefault() is no longer initialized with the current directory (for VO compatibility) (#908)
  • +
  • Fixed problem with creating dbfs with character fields with length > 255 (#917)
  • +
  • Fixed a problem with the buffered read system in some cases when a dbf was being read, closed, overwritten and then reopened (#968)
  • +
  • Fixed a VO compatibility problem with how DBSetIndex() changes the active order when opening index files (#958)
  • +
  • Fixed a problem with db append, copy etc, when both source and destination files have the same structure and include a memo file (#945)
  • +
  • Fixed an incorrect result of DBOrderInfo(DBOI_ORDERCOUNT) with a non existing or not open index file (#954)
  • +
  • [VFP dialect] Added optional parameter to Program( [,lShowSignature default=.f.] ) (#712)
  • +
  • [VFP dialect] Fixed several issues with the Type() function (#747, #942)
  • +
  • [VFP dialect] Fixed a problem with ExecScriptFast() (#823)
  • +
  • [VFP dialect] Fixed a problem with SQLExec() not putting the record pointer on the first record (#864)
  • +
  • [VFP dialect] Fixed a problem with SQLExec() with null values (#941)
  • +
  • [VFP dialect] Fixed a write error in the buffer returned from SqlExec() (#948)
  • +
  • [VFP dialect] Fixed a problem with the DBFVFP RDD and null columns (#953)
  • +
  • [VFP dialect] Fixed a problem with SCATTER TO and APPEND FROM ARRAY (#821)
  • +
    + Typed SDK + +
  • Fixed a problem with the FileName property of standard open dialogs
  • +
  • Fixed a problem with a FOREACH inside the Menu constructor causing handled exceptions
  • +
    + RDD + Bug fixes + +
  • Fixed a problem in the DBFVFP RDD with the calculation of the keysize of nullable keys (#985)
  • +
    + VOXporter + Bug fixes + +
  • Fixed incorrectly detecting pointers to functions inside literal strings and comments (#932)
  • +
    + + Changes in 2.10.0.3 + Compiler + Bug fixes + +
  • Fixed some problems with COPY TO ARRAY command in the FoxPro dialect (#673)
  • +
  • Fixed a problem with using a System.Decimal type on a SWITCH statement (#725)
  • +
  • Fixed an internal compiler error with Type() in the FoxPro dialect (#840)
  • +
  • Fixed a problem with generating XML documentation (#783, #855)
  • +
  • Prevented a warning from appearing for members of SEALED classes when /vo3 (all members VIRTUAL) is enabled (#785)
  • +
  • Fixed problems with assigning and comparing "ARRAY OF <type>" vars to NULL_ARRAY (#833)
  • +
  • Fixed some issues with passing arguments by reference with the @ operator and/or using it as the AddressOf operator (#810, #899, #902)
  • +
  • Fixed a problem resolving parameters passed by reference with the @ operator when the function/ method had a parameter of the pointer type (#899, #902)
  • +
    + New features + +
  • Added compiler option (-enforceoverride) to make the OVERRIDE modified mandatory when overriding a parent member (#786, #846)
  • +
  • The compiler now reports an error when using String2Psz() and Cast2Psz() in a non local context (since such PSZs are being released on exiting the current entity) (#775)
  • +
  • FUNCTIONs and PROCEDUREs now support the ASYNC modifier (#853)
  • +
  • You can now suppress the automatic generation of the $Init1() and $Exit() functions by passing the compiler commandline
    option -noinit (#854). This is NOT yet supported in the VS Properties dialog
  • +
  • Added support for the ASTYPE operator also for USUAL vars (#857)
  • +
  • Allowed specifying AS <type> clause in PUBLIC var declarations (ignored by the compiler, but used by the editor in the future for intellisense) (#853)
  • +
  • The AS <datatype> OF <classlib> clause is now also supported for several other FoxPro compatible commands, such as PARAMETERS and PUBLIC.
    Since these variables are untyped at runtime by nature, the clause is ignored by the compiler and a warning is shown.
  • +
    + Build System + Bug Fixes + +
  • Running MsBuild on a X# WPF project could fail (#879)
  • +
    + Visual Studio Integration + New features + +
  • We have added Visual Studio integration for VS 2022
  • +
  • We have added support for Package References
  • +
  • Now XML comments are automatically inserted in the editor when the user types "///". (#867, #887) Conditions:
  • + +
  • Cursor must be on a line before the start of an entity
  • +
  • Cursor must NOT be before a comment line
  • +
    +
    + +
  • Now the tooltip on a class includes also information about the parent class and implemented interfaces (if any) (#860)
  • +
  • We have added tooltips, parameter completion etc for the pseudo functions that are built into the compiler, such as PCount() and String2Psz().
  • +
  • We have added a first version of Lightbulb tips. For now to implement missing interface members and to convert a field to a Property. More implementations and configuration options will follow
  • +
  • We have added a new dialog to configure source code formatting with visual examples of the effects of the options.
  • +
  • We have added the ability to log operations of the X# VS integration to the Windows debug window and/or a logfile.
    If you are experiencing unexplainable problems we will contact you and tell you how to enable these options, so you can send us a log file that shows what happened before a problem occurred inside Visual Studio. We have used Serilog for this.
  • +
  • The Highlight Word feature now is case insensitive and no longer hightlights words that are part of a comment, string or inactive editor region
  • +
  • We have added 'Brace Completion' to the editor
  • +
    + Bug Fixes + +
  • Fixed some problems with the Format Document command (#552)
  • +
  • Fixed several issues with Parameter Tooltips (#728, #843)
  • +
  • Fixed problem with code completion list showing even for not defined vars/identifiers (#793)
  • +
  • Fixed member completion and parameter tooltips with chained expressions (#838)
  • +
  • Fixed recognition of type for VAR locals in some cases (#844)
  • +
  • Fixed member completion and tooltip info problems with VOSTRUCT vars (#851)
  • +
  • Fixed a problem with ignoring Line Breaks in XML Comments (#858)
  • +
  • Fixed some WinForms designer problems with CHAR properties (#859)
  • +
  • Fixed a problem with Goto Definition not working correctly with SUPER() constructor calls (#862)
  • +
  • Fixed an error with the Rebuild Intellisense Database command, when the solution contains a space in the path (#865)
  • +
  • Goto Definition for types from external assemblies was failing when there was more than one copy of VS running at the same time.
  • +
  • Fixed a problem with a VOSTRUCT some times confusing the parser (#868)
  • +
  • Fixed some more problems with quickinfo and member completion (#870)
  • +
  • Fixed a problem in the Windows Forms designer (#873)
  • +
  • Fixed an intellisense problem with ENUMs using no MEMBER keywords (#877)
  • +
  • Fixed a member completion problem with inherited exception types (#884)
  • +
  • If an XML topic had sub elements of type <see> or other these were not shown in the editor. This has been fixed (#900)
  • +
  • Unbalanced braces were sometimes matched in the editor with keywords. This has been fixed (#892)
  • +
  • Line separators were sometimes flickering. This has been fixed (#792)
  • +
  • When parsing for local variables we were not processing the include files. This could lead to a situation where a local that was declared in a conditional block (#ifdef SOMEVAR) was not found. This has been fixed. The editor parser now includes the header files and #defines and #undefines found in the code even when parsing a part of the source file (#893)
  • +
  • #include lines are now included in the fields/members combobox in the editor (when fields are shown). They are also saved to the intellisense database.
  • +
  • The editor was trying to show QuickInfo tooltips when the cursor was over an inactive preprocessor region (#ifdef). This no longer happens.
  • +
    + Runtime + Bug fixes + +
  • Fixed DBFCDX corruption that could happen with simultaneous updates (#585)
  • +
  • Fixed a problem opening FoxPro tables with indexes on nullable fields (#631)
  • +
  • The BlobGet() function was returning a LOGIC instead of the actual field value (#681)
  • +
  • Greatly improved speed of index creation with large number of fields in the index expression (#711)
  • +
  • Fixed some problems with  FieldPutBytes() and FieldGetBytes() (#797)
  • +
  • DBSeek() with 3rd param (lLast) TRUE had incorrect behavior in some cases (#807)
  • +
  • Fixed a potential NullreferenceException that could happen when creating indexes (#849)
  • +
  • Improved indentation in the text produced by the method Error.WrapRawException() (#856)
  • +
  • Fixed a runtime problem when converting .Net Array <-> USUAL (#876)
  • +
  • DbInfo() was returning TRUE even when an info enum was not supported.(#886)
  • +
  • Fixed also a possible DBFNTX corruption problem (#889)
  • +
  • DbEval() could fail in FoxPro when the codeblock was returning NIL or was VOID (#890)
  • +
  • Fixed a problem with Softseek and descending indexes.
  • +
  • Fixed a problem where incorrect scope expressions could lead to unexpected results. Now the server goes to (and stays at) EOF with an incorrect scope.
  • +
  • Fixed a problem with accessing FoxPro arrays with the parenthesis operators in a macro expression (#805).
    Please note that for this to work you have to compile the main program with /fox2
  • +
    + + Changes in 2.9.1.1 (Cahors) + Compiler + Bug fixes + +
  • Fixed a problem introduced in 2.9.0.2 with define symbols not respecting the /cs compiler option in combination with the /vo8 compiler option (#816)
  • +
  • Fixed an internal compiler error with assignment expressions inside object initializers when the /fox2 compiler option is enabled (#817)
  • +
  • Fixed some problems with DATEs in VOSTRUCTs (#773)
  • +
  • Fixed a problem in the preprocessor that would occur when using a list rule like FIELDS <f1> [,<fn> ] in the middle of a UDC.
  • +
  • Fixed a problem compiling UDCs such as SET CENTURY &cOn because cOn was not parsed as an identifier but as a keyword.
  • +
    + New features + +
  • There is a new result marker (the NotEmpty result marker) in the preprocessor that does the same as the regular result marker, but writes a NIL value to the output when the (optional) match marker is not found in the input.
    This can be used when you want to make the result a part of an IIF() expression in the output, since the sections inside an IIF expression may not be empty.
    The result marker looks like this: <!marker!>
  • +
  • Using a Restricted match marker as the first token in an UDC was not allowed before. This has been fixed. You can now write a rule like this, which will output the keyword (SCATTER, GATHER or COPY) followed by the stringified list of options.
  • +
    + #command <cmd:SCATTER,GATHER,COPY> <*clauses*> => ?  <"cmd">, <"clauses">
    FUNCTION Start AS VOID
       SCATTER TO TEST   // is preprocessed into ? "SCATTER" , "TO TEST"
       RETURN
    + Visual Studio Integration + Bug Fixes + +
  • Fixed a problem introduced in 2.9.0.2 with code generation for WPF projects (#820)
  • +
  • Fixed a VS freezing problem after building (#819)
  • +
  • Fixed some problems with code collapsing and the navigation bar for source files that contains a SELF property (#825)
  • +
  • Fixed a problem with the form designer emitting invalid code when the form prg contains nested classes (#828)
  • +
  • Fixed a problem with code completion showing the wrong members when opened just left to a closing paren (#826)
  • +
  • Fixed a VS crash when clicking on a generic class (#827)
  • +
  • Fixed a problem with the keyword colorization for expressions such as SET CENTURY &cOn, where &cOn was colored in the keyword color.
  • +
  • Parameter tips for nested function calls required an extra space before the name of the nested function (#728)
  • +
  • Fixed a problem with the form designer deleting delegates and other nested types in the form.prg (#828)
  • +
  • The background process to load the types in the ClassView / ObjectView windows was slowing down the VS performance. This has been disabled for now.
  • +
  • Fixed type lookup for Generic types.
  • +
  • Hovering the mouse over a constructor keyword was showing a tooltip for the class and not for the constructor. This has been fixed.
  • +
  • Fixed an issue in the code generator for Windows Forms for literal characters with special values (such as '\0') (#859)
  • +
  • Fixed an exception in the project system when the project system was initialized in the background (for example when no X# projects were opened) (#852)
  • +
  • Fixed missing code completion for the LONGINT and SHORTINT keywords (#850)
  • +
  • The context menu option "View in Disassembler" is now only shown for X# projects
  • +
  • Fixed code generator problem with ARRAY OF <type> (#842)
  • +
  • Fixed a performance problem when clicking on code in the editor (#829)
  • +
  • Fixed a problem with loading Windows Forms when the lookup of a nested type failed.
  • +
    + + New features + +
  • We have added a context item to the project context menu in the solution explorer to edit the project file. This will unload the project when needed and then open the file for editing.
  • +
  • The Rebuild Intellisense Database menu option in the Tools/XSharp menu now unloads the current solution, deletes the intellisense database and reopens the solution to make sure that the database is recreated correctly.
  • +
  • We have made some changes to the process that parses the source code for a solution in the background.
  • +
  • Generic Typenames are now stored in the Name`n format in the Intellisense database, for example IList`1 for IList<T>
  • +
    + Runtime + New features + +
  • Added missing ErrorExec() function (#830)
  • +
  • Added support for BlobDirectExport, BlobDirectImport, BlobDirectPut and BlobDirectGet (#832)
  • +
  • Fixed a problem with creating DBF files with custom file extension. Also added support for _SET_MEMOEXT (#834)
  • +
  • When you do a numeric operation on two USUALs of different types we now make sure that decimal values are no longer lost (#808). For example a LONG + DECIMAL will result in a DECIMAL. See the table in the USUAL type page in this help file for the possible return values when mixed types are used.
  • +
    + + + Bug Fixes + +
  • Fixed a problem with _PrivateCount() throwing an InvalidateOperationException (#801)
  • +
  • Fixed a problem with member completion in the editor sometimes showing methods of the wrong type (#740)
  • +
  • Fixed some problems with the ACopy() function (#815)
  • +
  • Fixed a few issues that were remaining related to DATEs in VOSTRUCTs (#773)
  • +
    + Macro compiler + New features + +
  • Added support for the & operator (#835)
  • +
  • Added support for parameters by reference (both @ and REF are supported) for late bound method calls (#818)
  • +
    + VOXporter + Bug Fixes + +
  • Fixed problem with incorrectly prefixing PUBLIC declarations with "@@"
  • +
    + + Changes in 2.9.0.2 (Cahors) + Compiler + New features + +
  • The parser now supports class variable declarations and global declarations with multiple types(#709)
  • +
    + EXPORT var1 AS STRING, var2, var3 as LONG + GLOBAL globalvar1 AS STRING, globalvar2, globalvar3 as LONG + +
  • If you are using our parser you should be aware that the ClassVarList rule has disappeared and that the ClassVars, VoGlobal and ClassVar rules have changed.
  • +
    + +
  • We have added a command to fill a foxpro array with a single value
  • +
    + STORE <value> TO ARRAY <arrayName> + + +
  • When you create a VOSTRUCT or UNION that contains a DATE field, then the compiler will now use the new __WinDate structure that is binary compatible with how DATE values are stored inside a VOSTRUCT or UNION in Visual Objects (#773)
  • +
  • It is now possible to use parentheses for (instead of brackets) accessing ARRAY elements in the FoxPro dialect. The compiler option /fox2 must be enabled for that to work (#746)
  • +
  • We have added support (for the FoxPro dialect only) for accessing WITH block expressions inside code of a calling function / method. So you can type .SomeProperty and access the property that belongs to a WITH BLOCK expression inside the calling code. To use this Late Binding must be enabled, since the compiler does not know the type of the expression from the calling code (#811).
  • +
    + + Bug fixes + +
  • When you use the NEW or OVERRIDE modifier for a method where no (virtual) method in a parent class exists an error will now be generated (#586, #777)
  • +
  • Fixed a problem with LOGICAL AND and OR for USUAL variables in an array (#597)
  • +
  • Error messages and Warnings for some compiler generated code (such as Late bound code) were not always pointing to the right line number, but to the first line in the body of the method or function. This has been fixed. (#603)
  • +
  • Fixed a problem incorrect return values for IIF expressions (#606)
  • +
  • Fixed a problem in the compiler when parsing multiple method names on a DECLARE METHOD line (#708)
  • +
  • Fixed a problem in the FoxPro dialect with assigning a single value to an array to fill the array (#720)
  • +
  • Fixed a problem with the calculation of VOSTRUCT sizes when the structure contained a member of type DATE (734)
  • +
  • The previous problem caused runtime errors (#735)
  • +
  • Fixed a problem in code like this (#736)
    var aLen := ALen(Aarray)
  • +
  • Fixed a compiler crash when overriding CLIPPER method with STRICT for methods with typed return value (#761)
  • +
  • When the interface implementation had different casing then the definition then an incorrect error message was shown (#765)
  • +
  • Fixed a compiler crash with incorrect function parameters inside a codeblock (#759)
  • +
  • Recursive definitions of DEFINEs could result in an infinate loop inside the compiler causing a StackOverflowException(#755)
  • +
  • Fixed a problem with late bound calls and OUT parameters (#771)
  • +
  • If you compile with warning level 4 or lower then certain warnings for comparing value types to null are not shown. We have changed the default warning level to 5 now. (#772)
  • +
  • Fixed a compiler crash with multiple PRIVATE &cVarName statements in the same entity (#780)
  • +
  • Fixed a problem with possibly corrupting the USUAL NIL value when passing USUAL params by reference (#784)
  • +
  • Fixed a problem with declared PUBLIC variables getting created as PRIVATE in the FoxPro dialect (#753)
  • +
  • Fixed a problem with using typed defines as default arguments (#718)
  • +
  • Fixed a problem with typed DEFINEs that could produce constants of the wrong type (#705)
  • +
  • Fixed a problem with removing whitespace from #warning and #error directive texts (#798)
  • +
    + Runtime + New Features + +
  • We have added several strongly typed overloads for the Empty() function that should result in a bit better performance (#669)
  • +
  • We have added an event handler to the RuntimeState class. This event handler is called "StateChanged" and expected a method with the following signature:
    Method MyStateChangedEventHandler(e AS StateChangedEventArgs) AS VOID
    The StateChangeEventArgs type has properties for the Setting Enum, the OldValue and the NewValue.
    You can use this if you have to synchronize the state between the X# runtime and an external app, for example a Vulcan App, VO App or for example (this is where we are using it) with an external database server, such as Advantage.
  • +
  • We have added a new (internal) type __WinDate that is used when you store a DATE value into a VoStruct or Union. This field is binary compatible with the Julian date that VO stores inside structures and unions.
  • +
  • We have added an entry to the RuntimeState in which the compiler stores the current /fox2 compiler setting for the main app.
  • +
  • Added runtime support to support filling FoxPro arrays by assigning a single value.
  • +
    + + Bug Fixes + +
  • Fixed a problem (incompatibility with VO) in the Descend() function (#779) - IMPORTANT NOTE: If you are using Descend() in dbf index expressions, then those indexes need to be reindexed!
  • +
  • Late bound code that was returning a PSZ value was not correctly storing that inside a USUAL (#603)
  • +
  • Fixed a problem in the Cached IO that could cause problems with low level file IO (#724)
  • +
  • The VODbAlias() function now returns String.Empty and not NULL when called on an area where no table is open. (#733)
  • +
  • Fixed a compatibility problem with the MExec() function (#737)
  • +
  • The M-> prefix was not recognized correctly inside codeblocks (#738)
  • +
  • The Explicit DATE -> DWORD cast was returning an incorrect value for NULL_DATE.
  • +
  • Fixed a problem with late bound calls and OUT parameters (#771)
  • +
  • Added a new __WinDate type that is used to store DATE values inside a VOSTRUCT or UNION. (#773)
  • +
  • Fixed several problems with FoxPro arrays
  • +
  • Removed TypeConstraints on T for functions that manipulate __ArrayBase<T>
  • +
  • Fixed a problem with Directory() including files that match by shortname but not by longname (#800)
  • +
    + RDDs + +
  • When creating a new DBF with the DBFCDX driver an existing CDX file is not automatically deleted anymore (#603)
  • +
  • Fixed a problem with updating memo contents in DBFCDX (#782)
  • +
  • Fixed a runtime exception when creating DBFCDX index files with long filenames (#774)
  • +
  • Fixed a problem with with DBSeek() with active OrderDescend() finding even deleted records
  • +
  • Fixed a problem with a missing call to AdsClearCallbackFunction() in the ADS RDD in OrderCreate() (#794)
  • +
  • Fixed a problem with VODBOrdCreate function failing it the cOrder parameter contains an empty string (#809)
  • +
    + Macro compiler + +
  • Fixed a problem in the Preprocessor
  • +
  • Added support for parameters passed by reference with the @ operator
  • +
  • Added support for M->, _MEMVAR-> and MEMVAR-> prefixes in the macro compiler
  • +
  • When the Macro compiler finds 2 or more functions with the same name it now uses the same precedence rules that the compiler uses:
  • + +
  • Functions in User Code are used first
  • +
  • Functions in the "Specific" runtimes (XSharp.VO, XSharp.XPP, XSharp.VFP, XSharp.Data) take precedence over the ones inside XSharp.RT and XSharp.Core
  • +
  • Functions in XSharp.RT take precedence over functions inside XSharp.Core
  • +
    +
    + Visual Studio Integration + In this build we have started to use the "Community toolkit for Visual Studio extensions" that you can find on GitHub. This toolkit contains "best practices" for code for VS Extension writers, like we are. As a result more code is now running asynchronously which should result in better performance. + We have also started to remove 32 bit specific code that would become a problem when migrating to VS 2022 which is a 64 bits version if Visual Studio that is expected to ship in November 2021. + New features + +
  • Added several new features to the editor
  • + +
  • The editor can now show divider lines between entities. You can enable/disable this in the options dialog (#280)
  • +
  • Keyword inside QuickInfo tooltips are now colored (#748)
  • +
  • Goto definition now also works on "external" types. The editor generates a temporary file that contains the type information for the external type. In the options dialog you can also control if the generated code should contains comments (as read from the XML file that comes with an external DLL). (#763)
  • +
  • You can control which keyword is used for PUBLIC visibility from the Tools/Optons menu entry (PUBLIC, EXPORT or No modifier at all)
  • +
  • You can control which keyword is used for PRIVATE visibility from the Tools/Optons menu entry (PRIVATE or HIDDEN).
  • +
    +
    + +
  • The various code generators inside VS now follow the capitalization rules from the source code editor.
  • +
  • The intellisense database now has views that return the unique namespaces in the source code and in the external assemblies
  • +
  • The X# specific menu points in the Tools menu have been moved to a separate submenut
  • +
  • Added option for the WinForms designer to generate backup (.bak) files of form.prg and form.designer.prg files when saving (#799)
  • +
    + Bug Fixes + +
  • Fixed several problems in the editor:
  • + +
  • We have made several improvements to increase the speed inside the editor (#689, #701)
  • +
  • Fixed a problem in the type lookup of variables for FOREACH loops (#697)
  • +
  • Parameter tips were not shown for methods selected from a completion list (#706)
  • +
  • Keyword case synchronization did not work when the keyword was not followed by a space (#722)
  • +
  • Goto definition always went to line 1 / column 1 in the file where a function was defined (#726)
  • +
  • Code completion for Constant members of classes (#727)
  • +
  • QuickInfo for DEFINES (#730, #739)
  • +
  • VOSTRUCT Member completion with the '.' operator (#731)
  • +
  • The ENUM and FUNC keywords are now recognized as identifier and not case synchronized in these cases.(#732)
  • +
  • Fixed a problem when opening files (#742)
  • +
  • Fixed parameter tip display for default values NULL, NULL_DATE and NULL_OBJECT (#743)
  • +
  • Fixes broken parameter tips for constructors (#744)
  • +
  • Nested classes were not always handled correctly by the intellisense (#745)
  • +
  • Fixed a problem in the type lookup of variables declared with ARRAY OF <something> (#749)
  • +
  • The Editor could sometimes "freeze" when the buffer contained invalid code (#751)
  • +
  • Non-existing namespaces would produce a bogus completion list (#760)
  • +
  • Fixed an editor exception in some cases when typing invalid code (#791)
  • +
    +
    + +
  • The code generator for Windows Forms was replacing tab characters with spaces. This has been fixed.(#438)
  • +
  • Fixed a problem with the Form Designer corrupting code that contains EXPORT ARRAY OF <type>
  • +
  • Fixed a problem with the Form Designer that when removing an event handler in the editor, some code was deleted (#812)
  • +
  • Fixed a problem with the Form Designer converting EXPORT, INSTANCE and HIDDEN keywords to PUBLIC and PRIVATE (#802)
  • +
    + VO-Compatible Editors + +
  • Now all VO-compatible editors support full Undo/Redo functionality. Also added cut/copy/paste functionality to the Menu editor
  • +
  • Fixed several visual problems with VOWED controls in Design and Test mode (#741)
  • +
  • Fixed a VS crash when Alt-Tabbing out of the editors, with the Properties window having focus (#764)
  • +
  • Adjusted ComboBoxEx controls to have the same fixed height, as in VO. Also allowed the previous behavior, when the user has manually increased the height by more than 50 pixels, then this height is being used instead (#750)
  • +
  • Added a bitmap thumbnail for the "Button Bmp" property of the Menu Editor in the Properties Window
  • +
  • Added support for specifying a Ribbon in the Menu Editor. The ribbon (bitmap) to be used needs to be specified as a filename in the properties of the Menu's main item (#714)
  • +
  • Fixed some issues with event code generation in the Window Editor (#441, #46)
  • +
    + + Changes in 2.8.3.15 (Cahors) + Compiler + New features + +
  • You can now use the .AND. logical operator and .OR. logical operator between variable names or numbers without leading or trailing whitespace (a.AND.b)
  • +
  • The PRIVATE declaration in the FoxPro dialect no longer allows an initializer.
  • +
  • Added support for the FoxPro NULL date ( { / / }, { - - } and { . . }) in the FoxPro dialect
  • +
    + Bug fixes + +
  • Fixed a problem with a DIM array that uses a DEFINE for its dimension (#638)
  • +
  • Fixed a problem with the FoxPro PUBLIC ARRAY command (The ARRAY keyword is no longer mandatory)  (#662).
  • +
  • Fixed a problem with DEFAULT(Usual) expressions as parameters for function / method calls (#664)
  • +
  • Fixed a problem with variables declared with the LOCAL declaration and dimensioned with the DIMENSION command (#683)
  • +
  • Fixed issue with overloads with the same name in different X# runtime assemblies that manifested itself with problems with FRead()(#686)
  • +
  • Fixed a problem with passing PRIVATE and PUBLIC memory variables by reference (#691)
  • +
  • Fixed a problem with PARAMETERS statement (#691)
  • +
  • Fixed a problem with real numbers (#704) that was caused by the change in handling of .AND. and .OR.
  • +
  • Fixed a problem parsing the DECLARE METHOD / ACCESS / ASSIGN lines inside class declarations.
  • +
  • Fixed a problem with truncating results for binary operators (+, -, *, /) for mixed integral types (e.g. int and word)
  • +
    + Runtime + Bug Fixes + +
  • The _shutdown flag in the Runtime State is now set when the system shuts down.
  • +
  • Fixed a problem with the FoxPro ALen() function (#650)
  • +
  • Added default values on several locations (#678)
  • +
  • Fixed a problem where FRead() on a file opened by an RDD would go into an endless loop (#688)
  • +
  • Fixed a problem with FieldGet() when the file is at EOF (#698)
  • +
  • Fixed a scope problem when the scope was empty and a record matching the scope was added in another workarea or by another workstation (#699)
  • +
  • Fixed a problem with the BOF setting after a Skip(0) (#700)
  • +
    + MacroCompiler + New features + +
  • You can now use the .AND. operator between variable names or numbers without leading or trailing whitespace
  • +
  • Added support for the FoxPro NULL date ( { / / }, { - - } and { . . }) in the FoxPro dialect
  • +
  • Strings containing .AND. and .OR. are no longer reformatted by the macro compiler (#694)
  • +
  • We have added an experimental new faster script compiler. This script compiler allows to compile statements, so no functions, classes etc.
    This new script compiler is much faster than the existing script compiler and uses a lot less memory.
    To call this script compiler use the new function ExecScriptFast() which has the same parameters as ExecScript().
    You can compile multiline scripts. The compiler should recognize all statements including PARAMETERS and LPARAMETERS to receive parameters.
    If you are using scripts in your code we would love to hear feedback.
    An example of code that should work:
  • +
    +
    FUNCTION Start() AS VOID
    LOCAL ctest AS STRING
    TRY
       cTest := "? 'Hello world'"
       ExecScriptFast(cTest)
       cTest :=String.Join(e"\n",<STRING>{;
           "PARAMETERS a,b,c",;
           "RETURN CallMe(a,b,c)"})
       ? ExecScriptFast(cTest,1,2,3)
       cTest :=String.Join(e"\n",<STRING>{;
           "LPARAMETERS a,b,c",;
           "RETURN CallMe(a,b,c)"})
       ? ExecScriptFast(cTest,1,2,3)

    CATCH e AS Exception
       ? e:ToString()
       END TRY

    wait
    RETURN


    FUNCTION CallMe(a,b,c) AS USUAL
       ? "Inside function, parameters received",a,b,c
       RETURN a+b+c
    +
    Please test this new functionality and let us know what you think of it.
    + Visual Studio Integration + New Features + +
  • "Highlight word" now highlights words in the whole file when the cursor is outside of an entity (for example on the USING statements in the start of the file).
  • +
    + Bug Fixes + +
  • Fixed a problem with displaying names of custom controls in the toolbox of the VO compatible Windows Editor
  • +
  • Fixed a problem with extra spaces when loading settings from cavowed.inf for the VO compatible Windows Editor
  • +
  • Fixed a problem with an incorrect completion list after an assignment statement (#658)
  • +
  • Fixed an exception in the editor after deleting code (#674)
  • +
  • Fixed a "freeze" problem in the VS IDE when attaching a file to the shell window (#676)
  • +
  • Fixed a problem when using dot instead of colon in VO Dialect with AllowDot (#679)
  • +
  • Fixed a problem with showing a completion list inside class (#685)
  • +
  • Fixed a performance problem in the editor (#689)
  • +
  • Fixed a problem with showing function overloads in the editor (#692)
  • +
  • Fixed a problem with intellisense after a !, .NOT. or other operator (#693)
  • +
  • Fixed a problem where the incorrect methods were shown in the completion list (#695)
  • +
    + Tools + +
  • Fixed an issue in VOXPorter with resources and the copying to the Resources subfolder
  • +
    + + Changes in 2.8.2.13 (Cahors) + Compiler + +
  • Fixed issues with extension methods that were not marked as STATIC (#660)
  • +
  • Fixed problem with IIF() expressions that returned an OBJECT and were assigned to a Decimal
  • +
  • The pragma commands were not checking for the current dialect
  • +
  • Fixed an exception in the preprocessor
  • +
  • The FoxPro LOCAL ARRAY was not generating a LOCAL variable but a PRIVATE variable.
  • +
  • Functions in XSharp.RT that are overridden in XSharp.VO, XSharp.VFP or XSharp.RT will no longer generate a warning. The version that is not in XSharp.RT will have preference
  • +
  • Enumerating a USUAL variable in a FOREACH loop will now call a runtime function that returns the ARRAY inside the USUAL or throws an error otherwise
  • +
  • Implicit conversions from OBJECT -> NUMERIC are now supported when /vo7 is enabled.
  • +
    + Runtime + +
  • Enumerating a USUAL variable in a FOREACH loop will now call a runtime function that returns the ARRAY inside the USUAL or throws an error otherwise (#246)
  • +
  • Fixed a problem creating index with an Eval block and 0 records (#619)
  • +
  • Fixed an incompatibility with the ALen() function and array handling compared to FoxPro (#642)
  • +
  • We have fixed some issues in FoxPro AIns() function (#650)
  • +
  • We have added a ShowFoxArray() function that will be automatically called when you call ShowArray() on a FoxPro array (650)
  • +
  • Added support for OClone()
  • +
  • The _Quit() function now closes all databases and then kills the current running process (#665)
  • +
  • Fixed a problem with DbOrderInfo (#666)
  • +
  • Fixed a problem with the unary minus operator for currency values (#670)
  • +
  • Fixed a problem in the Integer function when a Currency value was sent in (#671)
  • +
  • We have added an implementation of MemCheckPtr() (#677)
  • +
    + + Macro compiler + +
  • Fixed a problem calling functions after a new assembly was loaded with Assembly.Load()
  • +
  • Added support for passing variables by references (not yet for functions with Clipper calling convention) (#653)
  • +
    + VO SDK + +
  • Fixed a problem in GetObjectByHandle() in the GUI Classes(#677)
  • +
    + Visual Studio Integration + +
  • Fixed an exception on the Build Options page inside VS (#654)
  • +
  • The project system did not write back the right property for the XML documentation generation (#654)
  • +
  • Intellisense could crash in header files (#657)
  • +
  • We have added #defines and user defined commands (#command, #translate) to the members combobox in the editor as members of the global type. You can now also do a Goto definition on a value defined with #define.
  • +
  • We have fixed a problem with member completion for enums (656)
  • +
  • We have fixed a problem with the Windows Forms Editor that could happen if another VS extension had loaded an older version of Mono.Cecil (#661)
  • +
  • Code completion was not showing instance members when the project option "Allow dot" was enables (#679)
  • +
  • The "header" new item template had a .VH extension. This has been changed to .XH
  • +
  • Fix a crash in the VO Compatible windows editor that happened with an incorrect CAVOWED.INF
  • +
  • Code completion inside parentheses for a method or function call was not working correctly
  • +
  • Improved Build Speed in Visual Studio when no files are changed (#675)
  • +
    + Tools + +
  • VO Xporter was generating 2 lines in the .xsproj file for the output folder (#672)
  • +
    + + + Changes in 2.8.1.12 (Cahors) + Compiler + +
  • Fixed issues with interpolated strings (#598, #622):
  • + +
  • The script compiler now correctly sets the AllowDot compiler option from the current active dialect in the runtime (Core & FoxPro: AllowDot = true)
  • +
  • When compiling with DOT(.) as instance method separator then the ":" character is used inside interpolated strings to prefix the format string.
  • +
  • When compiling with COLON (:) as instance method separator then the colon can not be used to separate expressions from the format string inside interpolated strings. In that case we now support a double colon (::) between the expression and the format string. For example
  • +
    +
    + LOCAL num as LONG
    num := 42
    ? i"num = {num::F2}" // this diplays num with 2 decimals
    WAIT
    + +
  • You can now use DATE fields inside VOSTRUCT and UNION (#595)
  • +
  • Fixed an assertion error 'UnconvertedConditionalOperator' (#616)
  • +
  • Fixed an assertion error in the compiler when the namespace "xsharp" is used (#618)
  • +
  • Fixed an "failed to emit" problem for methods defined in COM assemblies with default arguments and arguments passed by reference (#626)
  • +
  • Fixed a problem with the handling of default parameters and method calls (#629)
  • +
  • Fixed a problem where the _SizeOf() operator was not calculating the right size for a VOSTRUCT (#635).
    Please note that _SizeOf() can only be calculated at compile time when your application is compiled for x86 or x64 mode. When compiling for AnyCpu we will be calculating _SizeOf() at runtime.
  • +
  • Fixed a problem where the "IS Pattern" was not always working correctly for variables of type USUAL (#636)
  • +
    + Runtime + +
  • Implemented the FoxPro Evl() function (#389)
  • +
  • DbCloseArea() was returning TRUE even when no area was open. This was incompatible with VO. We are returning FALSE now.(#611)
  • +
  • Macro compiler was not able to find functions in assemblies that were loaded dynamically (#607)
  • +
  • When a DBF file was opened "readonly" and then an index was created, then a runtime error would happen when the file was closed, because the RDD was trying to set the "production index" flag in the DBF header. This flag is no longer set for files that are opened "readonly" (#610)
  • +
  • Fixed an exception (that was caught) inside DbOrderInfo(DBOI_KEYCOUND) (#613)
  • +
  • Fixed a problem with the Workareas debug window (#625)
  • +
  • DbOrderInfo() was returning incorrect values when an index was not abailable (#627)
  • +
  • Fixed a problem with TransForm() and symbol arguments (#628)
  • +
  • Fixed a problem with the StrZero function (#637)
  • +
  • Fixed a problem with the AELement() function (#639)
  • +
    + RDD System + +
  • Fixed a problem with indexes on workareas/cursors created with the SqlExec() function when the index expression contained "nullable" fields (#630)
  • +
    + Macrocompiler + +
  • The macro compiler had problems finding functions that were inside an assembly that was loaded later (#607)
  • +
    + Visual Studio Integration + +
  • Fix problem with saving dialect from General Page
  • +
  • Quick info and Goto definition were not working for members inside the same class when they were not prefixed with SELF:
  • +
  • Fix code completion for nullable types with the '?' syntax (#567)
  • +
  • Methods combobox was not correctly synchronized (#602)
  • +
  • Todo comments were not always parsed correctly, They were also included when they were part of another word or when they were not the first word on the line. This has been fixed.(#617)
  • +
  • Fix problem that "warnings as errors" was not saved from the Build properties page (#621)
  • +
  • Fix problems that would start occurring after editor window was split (#641)
  • +
  • After selecting a member of type "Assign" from the completion list the editor was incorrectly inserting a '(' character (#643)
  • +
  • Typing '(' on the declaration line of an entity (function, method) would trigger parameter completion. This has been fixed.(#643)
  • +
  • Parameter tips were not shown for Constructor calls (#645)
  • +
  • Completion list was incorrectly including static members (#646)
  • +
  • QuickInfo for external types was not including "AS Type" for the parameters (#647)
  • +
  • Fixed a problem when resolving parser options for a project that was not yet completely loaded (#649)
  • +
  • Local variables were not always recognized with their correct type in the editor (#651)
  • +
    + Installer + +
  • The installer was adding an incorrect version of XSharp.CodeAnalysis.dll to the Global Assembly Cache. This has been fixed.
  • +
    + + Changes in 2.8.0.0 (Cahors) + Compiler + General + +
  • We have migrated to the latest version of the Roslyn source code.
  • +
  • Passing a typed variable by reference to a function/method with clipper calling convention (untyped parameters) was not updating the local variable. This has been fixed.
  • +
  • Using the @ operator in a program in the VO Dialect when the /vo7 compiler option is NOT enabled could generate code that produces an error "Cannot be boxed". (#551)
  • +
  • The generated code for NULL_PSZ and NULL_SYMBOL has been optimized (#398)
  • +
  • The generated VoStructAttribute on structures and unions had the wrong size when an element with the PSZ type was used. This has been fixed.
  • +
  • Fixed an internal compiler error when converting NULL to LOGIC
  • +
  • The _SIZEOF() operator will generate a constant now for VOSTRUCTS and UNIONS. (#545)
  • +
  • Using a keyword as field name could cause problems. For example FIELD->NEXT was not handled properly. The compiler now allows that. Of course you can also use the @@ prefix to tell the compiler that in a particular case you do not mean the keyword but an identifier.
  • +
    + +
  • Parenthesized expression that contained an expression list were not compiled correctly. This has been fixed.
    This could happen when you wanted to have more than one expression as part of an IIF() expression.
     
      LOCAL l AS LOGIC
      LOCAL v AS STRING
      l := TRUE                
      v := "abcd"
      ? iif (l, (v := Upper(v), Left(v,3)), (v := Lower(v), Left(v,4)))              
    Since Roslyn (the C# compiler) does not allow an expression list inside a conditional expression, we are converting the parenthesized expression now to a function call to a local function. The expressions inside the Parenthesized expression become the body of the new local function and the compiler calls the generated local function.
  • +
  • The compiler now warns if you call a Function in a class that has a member with the same name. For example
  • +
    + + CLASS Test
    METHOD Left(sValue as STRING, nLen as DWORD) AS STRING
      RETURN "Test"
    METHOD ToString() AS STRING
      RETURN Left("abc",2)   // This will generate a warning that the function Left() is called and not the method Left().
                             // if you want to call the method you will have to prefix the call with SELF:
    END CLASS
    + New language features + +
  • We have added support for LOCAL FUNCTION and LOCAL PROCEDURE statements.
    These functions and procedures become part of the statement list of another function, procedure, method etc. They have the following restrictions:
  • + +
  • A LOCAL FUNCTION must be terminated with END FUNCTION, a LOCAL PROCEDURE must be terminated with END PROCEDURE
  • +
  • The full "signature" of normal functions is supported, so Parameters, Return type, Type Parameters and Type Parameter constraints.
  • +
  • They cannot have Attributes (they are not compiler into methods but in a special kind of Lambda expression)
  • +
  • The only valid Modifiers for a local function are UNSAFE and ASYNC
  • +
  • Because they cannot have Attributes, we also do not support untyped parameters, so all parameters must be typed
  • +
  • If you need a local function with a variable number of parameters then you can define default parameter values or use a PARAMS array
  • +
  • Local functions can access local variables from its surrounding code. Roslyn creates a special structure where it stores the variables that are shared between the local function and its surrounding code.
  • +
    +
    + + +
  • Added support for Expression bodied members. Expression body definitions let you provide a member's implementation in a very concise, readable form. You can use an expression body definition whenever the logic for any supported member, such as a method or property, consists of a single expression. An expression body definition has the following general syntax:
    MEMBER => expression
    An expression-bodied method consists of a single expression that returns a value whose type matches the method's return type, or, for methods that return void, that performs some operation. For example, types that override the ToString method typically include a single expression that returns the string representation of the current object.
    An example of this could be
  • +
    + CLASS MyClass
    METHOD ToString() AS STRING => "My Class"
    END CLASS

    The result of this code is exactly the same as

    CLASS MyClass
    METHOD ToString() AS STRING
      RETURN "My Class"
    END CLASS
    + So you could say that the => operator replaces the RETURN keyword. + + +
  • We have added support for the Null Coalescing Operator (??) like C# has as well as the Null Coalescing assignment operator (??=).
    This operator does a check for != null. The operator will only work on Reference types so not on value types like USUAL, DATE and the built-in types like INT.
  • +
    + FUNCTION Start() AS VOID
    LOCAL s := NULL AS STRING
    s := s ?? "abc"            // The ?? is the Null Coalescing Operator
    s ??= "abc"               // This is the same as the line before but compacter
    ? s
    RETURN
    // So this will not compile
    LOCAL i := 0 AS LONG
    i := i ?? 42      // Operator '??' cannot be applied to operands of type 'int' and 'int'
    // But this will compile
    LOCAL i := NULL AS LONG?   // Nullable LONG
    i := i ?? 42      
    + +
  • We have added support for the Properties with INIT accessors. These accessors allow you to assign a value to a property but only in the constructor. The property will be read only outside of he constructor of the class / structure.
  • +
  • We have added a new compiler option /enforceself. When this option is used then all calls to instance methods inside a class must be prefixed with SELF (or SUPER). In the FoxPro dialect THIS is supported too. Please note that some generated code, such as inside the Windows Forms editor does not use SELF: and applying this compiler option may force you to change the generated code, or may force you to add an #pragma options("enforceself", disable) to the code to disable the option for that file.
  • +
  • We have added a new compiler option /allowdot. With this option you can control if the DOT (".") operator is allowed to be used to access instance members. The default for the Core and FoxPro dialect is /allowdot+. The default for the other dialects is /allowdot-. You can also use this with a #pragma: #pragma options("allowdot", enable)
  • +
  • XML comments in the source code no longer require fully qualified cref names (#467)
  • +
    + Preprocessor + +
  • The preprocessor now automatically declares a match marker with the name <udc>. This match marker will contain all the tokens that were matched with the UDC by the preprocessor. This can be used for example to add the original source as string to the result:
    #command INSERT INTO <*dbfAndFields*> FROM MEMVAR => __FoxSqlInsertMemVar(<"udc">)
  • +
  • Wildcard markers (such as the dbfAndFields marker in the previous bullet) now can also appear in the middle of a UDC. They will continue to match until the first token after the Wildcard marker (in the above example the FROM keyword) is found.
  • +
  • The standard header files (from the XSharp\Include folder) are now also included in the compiler as resource. When the file is missing then these files will be loaded from the resource.
  • +
  • The preprocessor was not generating macros for __FOX2__ . This has been fixed (but it is now obsolete, see the FoxPro dialect)
  • +
  • When wildcard tokens are included with a stringify result marker then the white space between these tokens is correctly included in the output of the UDC.
  • +
    + FoxPro dialect + +
  • The feature to allow parentheses as array delimiters for the FoxPro dialect that was added in the previous build had too many side effects. We have removed this feature for now. You have to use bracketed array arguments again.
  • +
    + +
  • The /fox2 compiler option is no longer needed (and ignored by the compiler).
    The compiler now checks to see if a runtime function is marked NeedsAccessToLocalsAttribute, which is defined in the XSharp.Internal namespace.
    If the compiler finds a function that is marked with this attribute, such as the Type() function or the SQLExec() function then it will add some code before and after the function call to allow these functions to access the locals on the stack. This will only happen if the /memvar compiler option is enabled and only in the FoxPro dialect.
    The NeedsAccessToLocalsAttribute has a mandatory parameter which indicates if a function is expected to write to the locals or only read the locals.
    When the function is expected to write to locals then the compiler will generate extra code after the call to make sure that the locals are updated when needed.
  • +
    + +
  • We have added a standard header file for the FoxPro embedded SQL statements. This header file should parse embedded SQL but will output warnings that the embedded SQL is not yet supported.
  • +
  • We have added the FoxPro array support, with a special subtype of the Array type in the runtime and support for DIMENSION and (Re)DIMENSION and filling arrays by assigning a single value. (#523)
  • +
    + Runtime + General + +
  • Fixed a problem with the return value of FSeek() and FSeek3()
  • +
  • AsHexString() and AsString() were not displaying the same result for PTR values as Visual Objects.
  • +
  • Fixed a problem with SetScope() for the DBFCDX RDD when the previous scope was empty. (#578)
  • +
  • Adjusted the Secs() function to make it more Visual Objects compatible.
  • +
  • The enumerator for Array and Array Of now returns an enumerator for a clone of the internal data, to prevent runtime errors when you are modifying the array from within your code.
  • +
  • The various Xbase types (DATE, FLOAT, CURRENCY, BINARY, ARRAY, USUAL etc.) are now marked with a [Serializable] attribute and implement ISerializable. They all work fine with the BinaryFormatter() classes, since that class not only stores the values but also the values in the stream. Most of the types also work with the JsonSerializer, however not all of values can be correctly deserialized with the Json serializers. (#529)
  • +
  • The CompareTo() operator on the Date type was not sorting the values correctly because it was making an incorrect assumption about the memory layout of the elements in the structure. This has been fixed.
  • +
  • We have made some changes in the error handling for functions such as DbUseArea() and DbSkip(). They were not always behaving the same as Visual Objects when an error occurs (for example when a file could not be opened). We have now also added an error handler similar to the default error handler in Visual Objects with a dialog that has the Abort, Retry and Ignore buttons. The Retry button is only enabled when the error object has the property "CanRetry" set to TRUE. (#587, #594)
  • +
  • Fixed Val() incompatibility with string that has more than one decimal place (#572)
  • +
  • Fixed a problem with comparing dates "in reverse" (#543)
  • +
  • We have added a couple of functions that bring up dialogs to display the current open workareas, settings, globals and private and public memory variables. See DbgShowGlobals(),  DbgShowWorkareas(), DbgShowMemvars() and DbgShowSettings()
  • +
    + RDD system + +
  • DbCommit and DbCommitAll were failing when a workarea is opened Read only. This has been fixed. (#554)
  • +
  • When FoxPro CDX file has more than one tag and one of the tags has an invalid index expression (for example a missing closing parenthesis, which was accepted by Visual Objects) then the RDD system did not open the CDX at all. We now open the CDX with the exception of the tag with the corrupted index expression. (#542)
  • +
  • Added support for Advantage GUID and Int64 columns. GUIDs are returned as string and INT64 as INT64. We have also added some missing DEFINE values from the ACE header file.
  • +
  • Fixed a problem with incorrect negative Lock Offsets in the DBFNTX driver.
  • +
  • We have fixed several "exotic" problems with index "information" (KeyCount, KeyNo) etc. with indexes with Scopes, Descending indices etc. (#423, #578, #579, #580, #582, #583, #593, #599)
  • +
  • Fixed problems when opening MEMO files (Fpt and DBT) from different threads and different workstations (#577)
  • +
  • We have fixed a locking and corruption problem that could occur when 2 stations were frequently writing to the same CDX file. (#575, #592)
  • +
  • Improved Locking Speed when a lock fails. (#576)
  • +
  • SetOrder(0) was not working for ADS tables (#570)
  • +
  • Changed several method prototypes for ADS to have the correct IN / OUT modifiers (#568)
  • +
    + Macro Compiler + +
  • Fixed a problem in the FoxPro dialect assigning a value to an expression in the form of VariableName.PropertyName
  • +
  • The X# macro compiler was allowing to reference GLOBAL and DEFINE values in macros. This made the compiler incompatible with VO and this would cause problems when indexing on a field with the same name as a GLOBAL or DEFINE. The support to reference GLOBALs or DEFINEs has been removed from the macro compiler. (#554)
  • +
  • The Macro compiler had a problem with a variable name was surrounded with parentheses. It was seeing that as a typecast. This has been fixed. (#584)
  • +
    + Visual Objects SDK + +
  • Added some missing defines to the Win32APILibrary assembly, such as DUPLICATE_SAME_ACCESS.
  • +
  • DbServer:Filter was sometimes returning NIL instead of an empty string (#558)
  • +
    + + VO Dialect + +
  • We have added support for SysObject (#596)
  • +
    + Xbase++ dialect + +
  • Fixed a problem with XPP Collation tables that was introduced in 2.7
  • +
    + FoxPro dialect + +
  • Added the NeedsAccessToLocalsAttribute for the /fox2 compiler option
  • +
  • Adjusted the code that exposes the values of LOCAL variables to functions such as Type() and SqlExec().
  • +
  • Several functions have been marked with the new attributes so they will be able to "see" local variables.
  • +
  • Added an overload of TransForm() with a single argument.
  • +
  • Fixed a problem with the SQLExec() function and sql statements that contain a ":" (colon) character.
  • +
  • We have added the Bit..() functions (thanks Antonio)
  • +
  • We have added CapsLock(), NumLock() and InsMde (hanks Karl-Heinz)
  • +
  • We have improved the FoxPro array code (#523)
  • +
    + + Runtime Scripting + This build introduces Runtime Scripting through the ExecScript() function. At this moment you will have to include the Full macro compiler (XSharp.MacroCompiler.Full.dll) and its support DLLs (XSharp.Scripting.dll , XSharp.CodeAnalysis.dll ) if you use Runtime scripting, + We are working on a light weight version of the Runtime Scripting which will be included in one of the next builds. + See the topic Runtime Scripting for more information. + Visual Studio Integration + The Visual Studio integration in this build no longer supports Visual Studio 2015. Only Visual Studio 2017 and 2019 are supported. + General + +
  • New code templates in a subfolder were generated with a namespace name that starts with "global::". This has been fixed.
  • +
  • Added support for LOCAL FUNCTION and LOCAL PROCEDURE.
  • +
  • Adding an item from the Class template in a folder prefixed the namespace with "global::". This has been fixed.
  • +
  • When the intellisense database file on disk was corrupted then an error occurred. Now the file is deleted and all code information is collected again.
  • +
  • The Editor options in the Tools/Options dialog are now marked with "X#" and no longer with "XSharp".
  • +
  • We have added a window under Tools/Options where you can set several values for our VO compatible editors, such as the grid size, paste offset etc. Look for X# in the tools options dialog.(#279, #440)
  • +
  • We have added 2 new options to the formatting options for the editor: "Trim Trailing Whitespace" and "Insert Final Newline"
  • +
  • Loading a MsTest project did not always work. The project file for MsTest projects will be adjusted when opening the project. (#563)
  • +
  • We have added support for t4 templates (text files with a .tt extension containing scripts to generate code)
  • +
  • Adding an existing  .resx file did not make it a child of a parent form.prg (#197)
  • +
  • The project property dialogs have been completely redesigned.
  • +
    + + Source code editor + +
  • Longer QuickInfo tooltips are now shown over multiple lines to make them easier to read.
  • +
  • Refactored the "type lookup" code to improve the speed of the source code editor
  • +
  • Member completion in the source code editor was not always working for variables declared with the VAR keyword where there were nested curly braces and/or parentheses. (#541, #560)
  • +
  • Fixed a problem with member completion for project references (#540)
  • +
  • Fixed an exception when uncommenting a block of lines when one of the lines in the block was an empty line.
  • +
  • We have added support for .editorconfig files. See the chapter about .editorconfig files in the documentation file.
  • +
  • Collapsing the last entity om the editor did not work correctly (#564)
  • +
  • Fixed a problem with syntax highlighting after line continuation comments(#556)
  • +
  • Added parameter completion for delegates (#581)
  • +
  • Fixed a problem with certain cyrillic characters in QuickInfo tooltips (#504)
  • +
    + + Code generator + +
  • Character literals are now always prefixed with the 'c' prefix and values > 127 are written in Hex notation to make sure they work in all codepages.
  • +
    + Windows Forms Editor + +
  • We have fixed several issues with DevExpress controls.
  • +
  • Fixed a problem with a control that has the same name as a X# keyword (#566)
  • +
  • Fixed a problem with a control that has a property of type DWORD (#588)
  • +
  • Fixed a problem with the code generation for character literals (#550)
  • +
  • The .designer.prg no longer has to have the "INHERIT FROM " clause. (#533)
  • +
    + Object Browser + +
  • Goto definition was not working when you had performed a search first (#565)
  • +
    + VO Compatible Forms editor + +
  • Added support in the WED for correctly visually displaying custom controls that do not have the expected control class inheritance defined
  • +
  • Fixed a problem with custom controls in cavowed.inf not recognized that are not data aware
  • +
  • Added support for Cloning Windows (#508)
  • +
  • Fixed a problem with the display of Checkboxes (#573)
  • +
  • Fixed a problem with the code generation (#553)
  • +
  • There is a menu option in Tools/Options to set several settings (#279, #440)
  • +
    + Debugger + +
  • The debugger now fully supports 64 bits debugging
  • +
  • Added support for the new type names for CURRENCY and BINARY
  • +
    + Templates + +
  • We have made adjustments to several VS item templates and project templates (#589)
  • +
  • We have added a new X# t4 template (.tt file)
  • +
    + + Changes in 2.7.0.0 (Cahors) + Compiler + General + +
  • Fixed a problem with Nullable types that were missing an explicit cast for an assignment
  • +
    + +
  • Fixed a problem with calling a parent constructor in a class hierarchy where a parent level was being skipped and the constructor for the grandparent was called instead.
  • +
    + +
  • The /usenativeversion commandline option was not checking +/- switches. This has been fixed.
  • +
  • Fixed a problem with PCall() and PCallNative() in source files with an embedded DOT in the filename (my.file.prg)
  • +
  • We have added a new header files to the files in the XSharp\Include files that helps to add custom User Defined Commands or defines that you want to include in every project. This file (CustomDefs.xh) will be automatically include by our XSharpDefs.xh.
    The default contents of this file is just some comments.
    The installer will NOT overwrite the file in this folder and will not delete it when the product is uninstalled.
    You can choose to customize this file in the Include folder under Project Files. However you can also add a file with the same name to your project folder or to a common include folder for your project/solution. That last location allows you to keep the header file under source code control with the rest of your source code.
  • +
    + FoxPro dialect + +
  • The compiler now allows a M Dot (M.) prefix in LOCAL, PRIVATE and PUBLIC declarations. (LOCAL m.Name)
  • +
  • The compiler now also accepts parentheses as array delimiters in the Foxpro Dialect (aMyArray(1,2))
  • +
  • The compiler now allows (and ignores) AS Type OF Classlib clauses for PRIVATE, PUBLIC, PARAMETERS and LPARAMETERS declarations.
  • +
    + +
  • Support for TO keyword in CATCH clause of TRY CATCH
  • +
  • Added support for the ASSERT command and SET ASSERT
  • +
    + +
  • Added support for SET CONSOLE and SET ALTERNATE
  • +
  • Assignments to macros with a single equals operator were not working ( &myVar = 42). This has been fixed.
  • +
  • Added support for zero length binary literals (0h)
  • +
    + Build System + +
  • Added a project property to control if RC4005 errors (duplicate defines) should be suppressed for the Native Resource compiler
  • +
    + Runtime + General + +
  • IsMethod() now returns TRUE for overloaded methods.
  • +
  • AbsFloat() was "losing" the settings for # of decimal places. This has been fixed.
  • +
  • Binary:ToString() was using single digit numbers for binary values < 15. This has been fixed.
  • +
  • Added an implicit operator to assign a usual to a binary.
  • +
  • Added an implicit conversion for USUAL values that contain an integer to an Intptr.
  • +
  • Some low level functions now set the OS error number  FERROR_EOF when operations fail, just like in VO.
  • +
  • Exceptions in late bound code were not always showing the correct location where the error occurred. This has been fixed.
  • +
  • We have added support for DataSessions. The list of open workareas/cursors in the runtime is now called "DataSession" (the old name Workareas is still available).
    You can have multiple datasessions. You can also swap the "active" DataSession in the RuntimeState with a new method SetDataSession on the RuntimeState class.
    FoxPro databases are opened in their own datasession.
    You can inspect the open DataSessions in the debugger by adding the watch expression: XSharp.RDD.DataSession.Sessions
    Each DataSession is associated with a Thread. When the Thread is stopped or aborted then the DataSession will be closed, which also closes all of its tables.
    At program shutdown all DataSessions are closed including their tables. This is done through an AppDomain:ProcessExit event handler.
  • +
  • Low level File IO functions (including the RDD system) that open a file in Exclusive mode now use "buffered IO". This should result in faster performance.
  • +
  • The (undocumented) functions to convert a Stream from/to a MemoryStream have been removed. This is replaced with the buffer I/O from the previous bullet.
  • +
  • We have added System.Enum types for the FoxPro CursorProperties, DatabaseProperties and SQLProperties.
  • +
  • We have added a DatabasePropertyCollection type. This type is used to add "additional" properties to Fields, such as the DBF fields for FoxPro tables.
  • +
    + Terminal API + +
  • We have added support for Alternate files. SET ALTERNATE TO SomeFile.txt. Also SET ALTERNATE ON and SET ALTERNATE OFF
  • +
  • The ? statement now respects the sessions for Set Console and Set Alternate .
  • +
  • We have added support for the SET COLOR command. Only the fist color in the settings is used and the blink attribute is ignored and interpreted as "highlight". For example SET COLOR TO w+/b
  • +
  • We have added a CLEAR SCREEN command
  • +
    + FoxPro dialect + +
  • Added an Assert dialog
  • +
  • Added support for DBC files. This includes the SET DATABASE to commands, DbGetProp() and reading properties for files that are part of a database without explicitly opening the database first. DbSetProp() does not do anything yet. Also functions like DbAlias() and similar have been implemented.
  • +
  • The Runtime now works with DataSession object. The DBC files are opened in their own datasession as well of the files per thread. Each datasession has a list of open tables and a unique list of aliases and cursor/workarea numbers.
  • +
  • AutoIncrement columns in cursors returned by SqlExec() now have a numbering scheme that starts with -1 and subtracts 1 for every new row added.
  • +
    + +
  • Several settings needed for the FoxPro dialect have been added to the Set Enum.
  • +
    + Macro Compiler + +
  • Until now the macro compiler was producing runtime codeblocks that take an array of objects and return an object return value. There was a class in the runtime that wrapped this and took care of usual -> object conversion for the parameters and for object-> usual conversion of the return value. This caused a problem when macros were returning a NIL value because that was converted to NULL_OBJECT.
    The reason for the OBJECT API is that the macro compiler needs to be used in the Core dialect (in the RDD system) and this dialect does not support the USUAL type.
    We have now added a new IMacroCompilerUsual interface in the XSharp.RT assembly that allows you to compile a string into a codeblock that supports USUAL arguments and a USUAL return value. The macro compiler now supports both this interface as well as the 'old' interface. As a result you may see a (very small) performance improvement when compiling macros.
  • +
  • Calling Altd() and _GetInst() inside a macro was not supported. This has been fixed.
  • +
  • The macro compiler was reporting an error when you had overridden a built-in function in your own code. We have now implemented a default MacroCompilerResolveAmbiguousMatch delegate in the runtime that now gives preference to functions that are defined in your code over functions in our code.
  • +
  • When choosing between 2 overloads of a method or function the Macro compiler now chooses the method with a USUAL parameter over a method without a USUAL parameter
  • +
  • Fixed a problem with calling functions/methods with a parameter by reference or an out parameter
  • +
  • Added support for the CURRENCY and BINARY types to the macro compiler.
  • +
    + RDD System + +
  • Exclusive DBF access now works in "buffered" mode which should make it a lot faster
  • +
  • Internally the RDDs now work with the Stream objects, which makes it a bit faster.
  • +
  • Fixed a problem when updating a key in an index where many duplicate key values existed.
  • +
  • Removed duplicate Foxpro "machine" collations for several codepages, since they were all the same.
  • +
  • For VFP compatible DBF files with field names > 10 characters you can now use the short (10 char) or the full fieldname to retrieve the values.
  • +
  • The DBFVFP driver now uses the built in DBC support in the runtime to read "extended" properties for DBF files. These properties are the longer fieldname, but also the Caption etc. When a DBFVFP table is used as datasource for a DbDataSource or DbDataTable and when this data source is assigned to a Grid then the columns headers in the Grid should show the Captions from the DBC.
  • +
  • DBF files with an empty codepage byte are now opened as DOS - US just like in VO and Vulcan.
  • +
  • GoTop(), GoBottom() and other operations were failing for when a DBFCDX/DBFVFP area was a child in a SetRelation and when the previous parent value was resulting in an "empty" resultset.
  • +
  • We have added structures and functions for the ADS Management API to the RDD assembly.
  • +
    + Visual Studio integration + +
  • When creating a new VO compatible UI form in the VS IDE you can now clone an existing form.
  • +
  • Fixed some problems with custom controls in the VO compatible form editor.
  • +
  • Fixed several problems in the Windows Forms editor for the code parsing and code generation for DevExpress controls
  • +
  • Solutions with "flavored" projects (such as MsTest projects) were not always opened correctly. An exception could occur.
  • +
  • We have added an (internal) property FieldValues() to the workarea class that allows you to inspect the fieldnames and their values for the current record in the debugger. To see the current workarea in the debugger you have to add a watch expression: XSharp.RuntimeState.DataSession.CurrentWorkarea
  • +
  • Added Project property to set the new flag to suppress RC4005 (duplicate defines) errors for the resource compiler.
  • +
    + + Changes in 2.6.1.0 (Cahors) + This is a bug fix release with fixes for some issues found in 2.6.0.0 + Compiler + +
  • Fixed problems with passing typed variables by reference to late bound code and to untyped constructors
  • +
  • Fixed an internal compiler error in code where a define containing a logic was cast to a byte
      BYTE(_CAST, LOGICDEFINE).
    Of course this is code that should be avoided at all times, but unfortunately even the VO SDK is full of code like this..
    The example above should be written as IIF(LOGICDEFINE, 1,0) for example. The compiler will see that the define is constant and will replace that code with either 1 or 0.
  • +
  • The compiler was not recognizing $.50 as a valid Currency literal (because the 0 is missing). This is now accepted.
  • +
    + Runtime + +
  • Updated the code in the runtime that handles late bound calls to improve the handling of parameters by reference
  • +
  • Fixed a problem in late bound code when accessing properties such as fInit, dwFuncs and dwVars in the OleAutoObject class
  • +
  • Added operator TRUE and operator FALSE to the Usual type
  • +
  • Calling Val() with a NULL_STRING could cause an exception. This has been fixed.
  • +
  • String properties returned by DbDataTable() and DbDataSource() are now trimmed with the TrimEnd() method of the string class.
  • +
  • Added a DbTableSave() function to save changes in a DbDataTable to the current workarea.
  • +
    + Visual Studio integration + +
  • Opening and upgrading project files that are under Scc could sometimes cause problems. This has been fixed
  • +
  • Fixed a regression introduced in 2.6.0.0. causing the task list to no longer be updated.
  • +
  • Opening a solution that referenced X# projects that do not exist on disk could cause an exception. This has been fixed.
  • +
  • Opening a X# Project file that is not part of a solution could also cause an exception. This has been fixed. We'll assume the project is part of a solution file in the same folder as the project and with the same name (but different extension) as the project.
  • +
  • The project system no longer makes backup files of projects that are updated. We assume you're all making backups yourself or using some kind of SCC system.
  • +
  • Fixed a regression that caused the VS Tasklist not to work for X# projects.
  • +
    + + Changes in 2.6.0.0 (Cahors) + Please note that there are some breaking changes in this build.
    Therefore the Assembly version number of the Runtime Components has been changed and you will need to recompile all your code and you need new versions of 3rd party components!
    + Compiler + +
  • The compiler was ignoring a (USUAL) cast. This has been fixed.
  • +
  • When the compiler detects a TRY .. ENDTRY without CATCH and FINALLY then it automatically adds a CATCH class that catches all exceptions silently. This was already the case, but we now generate a warning XS9101 when this happens.
  • +
  • Passing parameters by reference with an @ sign was not working correctly for late bound method calls. This has been fixed.
  • +
  • Compiler option vo15 and compiler option vo16 can now also be set with a #pragma
  • +
  • When /vo16 (Automatically generate Clipper calling convention constructors) was enabled then the compiler was also adding constructors to classes that are marked with the [COMImport] attribute. This has been fixed.
  • +
  • Currency literals ($12.34) were not compiled into the Currency type but were stored as System.Double. This has been fixed.
  • +
  • Fixed a problem with automatic version number generation for version numbers that are specified as [assembly: AssemblyVersion ("1.0.*")] or [assembly: AssemblyVersion ("1.0.0.*")].
    If you are building with the /deterministic compiler option then an error message XS8357 is shown.
  • +
  • Fixed a problem when passing a single USUAL argument to a constructor with a parameter array.
  • +
  • Fixed a problem when calling an overloaded method in a class tree where one level has a parameter of one type and another level the same method name but a parameter of another type and when there is an implicit typecast from the one type to the other (like between Date and Datetime, or between String and Symbol). The compiler now first looks to see if there is an overload with exactly the same type and where there is not then it looks for overloads for which the argument can be passed with an implicit conversion.
  • +
  • The __CastClass() pseudo function can now be used to box a usual into an object or to unbox a usual from an object.
    __CastClass(USUAL, <objectValue>) unboxes the usual that is inside the object.
    __CastClass(OBJECT, <usualValue>) boxes the usual into an object.
  • +
  • The <usualValue> IS SomeType VAR <newVariableOfTypeSomeType> clause was boxing the Usual into the Object before assigning it to the new variable instead of extracting the object from the usual. This has been fixed.
  • +
  • Late bound assignments (such as obj.&prop = "Jack") were failing when the assignment operator was a single equals character. This has been fixed.
  • +
  • Aliased Expressions such as SomeArea->(SomeExpression()) were returning an error on the incorrect source code line when SomeArea was not open. This has been fixed.
  • +
  • We have added support for the BINARY type and BINARY Literals. See the topics about binaries and binary literals in the documentation.
  • +
  • Expressions such as
    LOCAL dwDim := 512 IS DWORD
    were parsed as and compiled into
    LOCAL dwDim := (512 IS DWORD) AS USUAL
    As a result dwDim contained a USUAL with a LOGICAL value.
    This has been fixed and this code will now throw an error that DWORD variables cannot be declared with the IS keyword.
    This also happens for GLOBAL variables and Class Variables.
  • +
  • We have added a MatchLike preprocessor token to match expressions that contain wildcard characters, such as in the UDC
    SAVE ALL LIKE a*,*name TO SomeFileName.
    The token to use for MatchLike is <%name%>
  • +
  • Added support for pattern matching (WHEN clauses) in TRY .. CATCH statements, such as in the example below. The WHEN keyword is positional, so it can also be used as a variable name like in the example.
  • +
    + FUNCTION Test AS VOID
      local when := 42 as long
      TRY
         THROW Exception{"FooBar"}
      CATCH e as Exception WHEN e:Message == "Foo"
         ? "Foo", when, e:Message
      CATCH e as Exception WHEN e:Message == "Bar"
         ? "Bar", when, e:Message
      CATCH WHEN when == 42
         ? "No Foo and No Bar", when
         
      END TRY                
      RETURN
    + +
  • Added support for pattern matching and filters for SWITCH statements. We support both the "Identifier AS Type" clause as well as the "WHEN expression" filter clause, like in the examples below
  • +
    +   VAR foo := 42
      VAR iValues := <LONG>{1,2,3,4,5}
      FOREACH VAR i IN iValues
         SWITCH i
         CASE 1                        // This is now called the 'constant pattern'
            ? "One"
         CASE 2 WHEN foo == 42         // Filter with a constant pattern
            ? "Two and Foo == 42"
         CASE 2
            ? "Two"
         CASE 3
            ? "Three"
         CASE 4
            ? "Four"
         OTHERWISE
            ? "Other", i
         END SWITCH
    +   VAR oValues := <OBJECT>{1,2.1,"abc", "def", TRUE, FALSE, 1.1m}
      FOREACH VAR o in oValues
         SWITCH o
         CASE i AS LONG         // Pattern matching
            ? "Long", i
         CASE r8 AS REAL8   // Pattern matching
            ? "Real8", r8
         CASE s AS STRING  WHEN s == "abc" // Pattern matching with filter
            ? "String abc", s
         CASE s AS STRING     // Pattern matching
            ? "String other", s
         CASE l AS LOGIC   WHEN l == TRUE   // Pattern matching with filter
            ? "Logic", l
         OTHERWISE
            ? o:GetType():FullName, o
         END SWITCH
      NEXT
    + +
  • Please note that the performance of these patterns and filters is just like normal IF statements or DO CASE statements.
    The difference is that the compiler checks for duplicate CASE expressions so you are less likely to make mistakes.
  • +
  • We have added support for the IN parameter modifier. This declares a parameter that is a REF READONLY parameter. You could consider to use this when passing large structures to methods or functions. Instead of passing the whole structure then the compiler will only pass the address of the structure which is 4 bytes or 8 bytes depending on if you are running in 32 bits or 64 bits.
    We are planning to use this in the X# runtime for functions that accept USUAL parameters which should give you a small performance benefit (Usual variables are 16 bytes in 32 bits mode and 20 bytes when running in 64 bit mode).
  • +
    + Runtime + +
  • Error messages in Late Bound code were not always showing the error causing the exception. We now retrieve the "inner most" exception so the message shows the first exception that was thrown.
  • +
  • We have added runtime state settings for Set.Safety and Set.Compatible and the functions for SetCompatible and SetSafety
  • +
    + +
  • A UDC used to save and restore workareas for various Db..() functions was incorrect, causing the wrong area to be selected after the function call. This has been fixed.
  • +
    + +
  • The VFP MkDir() function has been added.
  • +
  • Fixed a problem in late bound IVarGet() / IVarPut() when a subclass of a type implements only the Getter or the Setter and the parent class implements both.
  • +
    + +
  • We have added a IDynamicProperties interface and added an implementation of this on the XPP DataObject, VFP Empty and VO OleAutoObject classes. This interface is used to optimize late bound access to properties in these classes.
  • +
  • An Exception in OleAutoObject.NoMethod was not forwarded "as is" but as an argument exception.
  • +
    + +
  • The Select() function now behaves differently in the FoxPro dialect to be compatible with FoxPro (no exception is thrown when the alias that is passed does not exist)
  • +
  • When an Error object is created from an exception then the innermost exception is used for the error information.
  • +
  • The casing of the Default() function has changed.
  • +
  • We have added a new XSharp.__Binary type. See the compiler topic above for more information.
  • +
  • We have added the CLOSE ALL UDC to dbcmd.xh as synonym for CLOSE DATABASES.
  • +
    + RDD System + +
  • Fixed a problem in the Advantage RDD for the ADSADT driver when field names were > 10 characters.
  • +
  • In the Advantage RDD the EOF, BOF and FOUND flags for tables that are a child in a relation were not properly set. This has been fixed.
  • +
  • In the FoxPro dialect the 'AutoOrder' behavior has changed. In this dialect no longer the first order in the first index is selected. The index file is opened but the file stays in natural order and when opening the file the cursor is positioned on the record number 1.
  • +
  • When exporting to CSV and SDF there was an exception for empty dates. This has been fixed.
  • +
  • When an CDX is opened for which one of the order expressions could not be compiled (because a function is missing) then previously the complete CDX was ignored. Now the other tags are opened succesfully. The RuntimeState.LastRddError property will contain an Exception object that contains the error message for the tag that failed to open.
  • +
  • The calculation of Index keys for fields of type "I" (in the DBFVFP driver) was incorrect. This has been fixed.
  • +
  • Fixed a problem with the OrdDescend() function/
  • +
    + Visual Studio integration + +
  • Fixed a problem in the VS parser for default expressions in parameter lists
  • +
  • Parameters for external methods/functions were not always showing the right "As"/"Is" modifiers
  • +
  • The location on the QuickInfo tooltip is now shown on its own line inside the tooltip.
  • +
  • Fixed a problem where the XML tooltips or parameter tips for the first member in a XML file were not shown.
  • +
  • We have made a change to the project file format (see comment below). All project files will be updated when opened with this build of X#.
  • +
  • Improved the speed of closing a solution inside Visual Studio.
  • +
  • The project system will no longer try to update SDK style project files.
  • +
  • When looking for a method such as Foo.SomeMethod() the codemodel sometimes returned a method Bar.SomeMethod().
    This was leading to problems when opening forms in the Windows Forms editor. This has been fixed.
  • +
    + VO Compatible editors + +
  • Code generated from the VO Compatible editors now preserves the INTERNAL or other modifiers as well as IMPLEMENTS clauses for classes.
  • +
  • We have fixed the display of "LoadResString" captions in PushButton controls
  • +
    + Foxpro commands + +
  • We have added support for several new Foxpro compatible commands:
  • +
  • CLOSE ALL
  • +
  • SCATTER
  • +
  • GATHER
  • +
  • COPY TO ARRAY
  • +
  • APPEND FROM ARRAY
  • +
  • COPY TO  SDF|CSV|DELIMITED|FOXPLUS|FOX2X
  • +
  • APPEND FROM SDF|CSV|DELIMITED|FOXPLUS|FOX2X
  • +
  • All variations support a fields list, FIELDS LIKE or FIELDS EXCEPT clause and the relevant commands also support the MEMO and BLANK clauses.
  • +
    + +
  • Not all variations from COPY TO and APPEND FROM are supports, such as copying to excel and sylk
  • +
  • The Database and name clause in the COPY TO command are ignored for now as well as the CodePage clause
  • +
    + Build System + +
  • We have prepared the X# Build System to work with SDK type projects that are used by .Net 5 and .Net Core. See the topic below for what this means for the project files.
  • +
  • Please note that the source code for the Build System has been moved to the Compiler repository on GitHub, since the build system is also needed for automated builds that run outside of Visual Studio.
  • +
    + Changes to project files + +
  • We are now no longer deploying our MSBuild support to a folder inside each VS version separately but we are only deploying it once in a folder inside the XSharp installation folder.
    The installer sets an environment variable XSharpMsBuildDir which points to that folder. As a result all project files will be updated when opened with this version of X#.
  • +
    + +
  • The change that we make is that the macro "$(MSBuildExtensionsPath)\XSharp" is replaced with "$(XSharpMsBuildDir)" which is an environment variable that points to the location of the X# MsBuild support files on your machine. If you are running X# on a build server you can set this environment variable in your build scripts when needed.
  • +
  • The installer automatically adds this environment variable and points it to the <XSharpDir>\MsBuild folder.
  • +
    + + Changes in 2.5.2.0 (Cahors) + Compiler + +
  • When a define contains an expression that contains the _Chr() function with a value > 127 then a warning is generated about possible code page differences between the development machine and the end users machine
  • +
  • Fixed an issue where a define was defined as PTR(_CAST,0)  and this define was also used as a default value for a function/method.
  • +
    + Runtime + +
  • Calling IsAccess, IsAssign and similar methods on a NULL_OBJECT was causing an exception. This has been fixed.
  • +
  • EmptyUsual now also works for the type OBJECT
  • +
  • When a float division was returning an Infinite value then no divide by zero exception was generated. This has been fixed.
  • +
  • When a parameter is skipped in a late bound call, and when that parameter has a default value, then we will now use the default value instead of NIL
  • +
  • The default value of the 5th parameter (uCount) of StrTran() was "only" 65000 replacements. The default value now takes care of replacing all occurences.
  • +
  • The variable name passed to NoIVarGet() and NoVarPut() is now converted to Uppercase.
  • +
    + RDD System + +
  • Fixed a problem with skipping forward when a Scoped Descending Cdx was at Eof()
  • +
    + VOSDK + +
  • Several DbServer methods were calling a method to write changes before the correct workarea was selected. This was an old bug originating in VO and has been fixed.
  • +
    + Visual Studio integration + +
  • Looking up XML documentation was sometimes not working in VS 2019. This has been fixed.
  • +
  • ClassView and Objectview are working "somewhat" now. This needs to be improved.
  • +
  • Improved the loading of so called "Primary Interop Assemblies"
  • +
  • Fixed a problem in the Type and Member dropdown bars in the editor window
  • +
  • Improved the renaming of controls when applying copy/paste in the VO Compatible window editor.
  • +
  • The X# toolbar for the VO Window editor is now automatically visible when the VO Window editor is opened
  • +
  • The position and size of the property window and toolbox of the VO Window editor (and the other VO Editors) is now saved between sessions of Visual Studio.
  • +
    + Build System + +
  • The generated XML files were generated in the project folder and not in the intermediate folder. This has been fixed.
  • +
    + Documentation + +
  • The [Source] links were missing for most topics. This has been fixed.
  • +
  • Corrected some docs
  • +
    + + Changes in 2.5.1.0 (Cahors) + Compiler + +
  • no changes to the compiler in this build (it is still called 2.5.0.0)
  • +
    + Runtime + +
  • (VO Compatibility) Fixed a VO compatibility issue for arrays . Accessing an single dimensional array with an index with 2 dimensions now returns NIL and does not generate an exception. This is stupid but compatible.
  • +
  • (VO Compatibility) Comparing a usual with a numeric value with a symbol no longer generates an exception. The numeric value is now casted to a symbol and that symbol is used for the comparison.
  • +
  • (XPP compatibility) Accessing a USUAL variable with the index operator (u[1]) is not allowed for usuals containing a LONG. This will return TRUE or FALSE and is a simple way to check if a bit is set.
  • +
  • The Literals for "DB" and "CR" are now stored in the resources and may be changed for other languages.
  • +
  • Added some optimizations to the support code for late binding
  • +
    + Visual Studio integration + +
  • Reading type information for external assemblies would fail when the external assembly contained 2 types for which the names were only different in case.
  • +
  • The entity parser did not recognize GET and SET accessors that were prefixed with a visibility modifier (PROTECTED SET)
  • +
  • The entity parser did not recognize ENUM members that did not start with the MEMBER keyword
  • +
  • Added support for the Visual Studio Task Window. Source code comments containing the words TODO or HACK (this is configurable in the Tools/Options window) are now added to the Task List. These tasls are persisted in the intellisense database, so all tasks are immediately visible after opening a solution without (re)scanning the source files.
  • +
  • Fixed a problem in the Type and Member lookup for the WIndows Forms editor
  • +
  • Fixed a problem in the VS debugger where we were subtracting one from index operators for arrays and collections. This was not correct (obviously).
  • +
    + Build System + +
  • The file name of the generated XML file was derived from the project file name instead of the output assembly name. This has been fixed.
  • +
    + + + Changes in 2.5.0.0 (Cahors) + Compiler + +
  • #pragma lines that were followed by incorrect syntax would "eat" the incorrect syntax causing entire methods to be excluded from compilation. This has been fixed.
  • +
  • Multiline compile time codeblocks in a method /function with a VOID return type were not being compiled correctly. This has been fixed.
  • +
  • The compiler now allows to type the parameters in a codeblock. Since the codeblock definition requires parameters of type USUAL this gets transformed by the compiler. The parameters will still be of type USUAL, but inside the codeblock a local variable of the proper type will be allocated. So this compiles now
  • +
    +   { | s as string, i as int| s:SubString(i,1) } + +
  • The code to fill in missing parameters was causing problems when passing parameters to COM calls (Word Example from Peter Monadjemi)
  • +
  • Fixed a problem passing an IntPtr, Typed pointer of the address of a VOSTRUCT to a function that accepts an object.
  • +
  • We have added code to add an integer value to a PSZ, which results in a new PSZ that starts at a relative location in the original PSZ. No new buffer is allocated.
  • +
  • We have fixed a problem with complex collection initializers.
  • +
  • Chr() and _Chr() with an DEFINE as argument, such as _Chr(ASC_TAB) were not properly resolved by the compiler.
  • +
  • The compiler was not properly parsing the syntax PUBLIC MyVar[123]. This has been fixed.
  • +
  • Some special characters (such as the Micro Character, U+00B5) were not recognized by the compiler as valid identifiers. We have now adopted the same identifier rules that C# uses.
  • +
  • Passing a pointer or PSZ in a value of type OBJECT is now handled by "boxing" the variable. So a NULL_PTR is no longer passed as NULL_OBJECT but as an object containing an IntPtr.Zero value.
  • +
  • The compiler now allows to store IntPtr.Zero to a constant variable
  • +
  • The compiler now allows to embed quotes inside a string by writing double quotes. So this works:
  • +
    + ? "Some String that has an embedded "" character" + +
  • When you declare a MEMVAR with the same name as a function, the compiler will now have no problem anymore resolving the function call. Please note that you HAVE to declare the memvar for this resolution to work.
    For example
  • +
    +
    FUNCTION Start() AS VOID
    MEMVAR Test
    Test := 123      // assign to the memory variable
    Test(Test)      // call the function 'Test' with the value of 'Test'
    RETURN
    FUNCTION Test(a)
    ? a
    RETURN a
    + + + Common Runtime + +
  • The Workareas class no longer has an array of 4096 elements, but uses a dictionary to hold the open RDDs. This reduces the memory used by the runtime state.
  • +
  • Fixed a problem in the WrapperRDD class
  • +
  • OrdSetFocus() now returns the previous active tag as STRING
  • +
  • Fixed a problem in FRead() , it was not ignoring the SetAnsi() setting as it should
  • +
  • Added operators on the PSZ type for PSZ + LONG and PSZ + DWORD.
  • +
  • The Usual class now implements the IDisposable() interface. When it contains an object that implements IDisposable then it will call the Dispose method on that object.
  • +
  • We have added Array index properties with one and two numeric indices to make code that accesses array elements a bit faster
  • +
  • The code SELECT 10, was not working properly. This has been fixed. Thanks Karl Heinz.
  • +
  • The return value of VoDbOrdSetFocus() was TRUE even when trying to set the order to a non existing index. This has been fixed.
  • +
  • We fixed a problem with Set(_SET_CENTURY) when the parameter passed was a string in the "ON" or "OFF" format
  • +
  • VODbOrdSetFocus() was returning TRUE even when the selected order could not be selected.
  • +
  • ArrayCreate<T> was not filling the array. This has been fixed.
  • +
  • Trailing or Leading spaces are now ignored by the CToD() function.
  • +
  • Calling VoDbSeek() with 2 parameters now does not set lLast to FALSE but to the LAST value from the Current Scope.
  • +
  • In the previous build the format for the stack trace for errors was changed (the names are all uppercase like in VO). You can now choose to enable or disable this. We have added a function SetErrorStackVOFormat() that takes and returns a logical value. The default format for the error stack is the VO format for the VO and Vulcan dialects and the normal .Net format for the other dialects.
  • +
  • We have implemented the StrEvaluate() function.
  • +
  • We have implemented the PtrLen() and PtrLenWrite() functions. These only work on the Windows OS() when running in x86 mode.
    For other OSes or for apps running in 64 bits these functions returns the same value as MemLen().
  • +
  • When dividing 2 float numbers results in a NaN (Not a Number) value because the divisor is zero, then a DivideByZero exception will now be generated.
  • +
  • When dividing 2 usual numbers results in a NaN (Not a Number) value because the divisor is zero, then a DivideByZero exception will now be generated.
  • +
  • Please note that dividing 2 REAL8 (System.Double) values can still result in a NaN, because we are not "intervening" with this division.
  • +
  • The OS() function now returns a more appropriate version description when running on Windows. It reads the version name from the registry and also includes a x86 and x64 flag in the version.
  • +
    + RDD System + +
  • The DBF RDD Now forces a disk flush when writing a record in shared mode.
  • +
  • Fixed a problem in the DBFCDX rdd that could corrupt indexes.
  • +
  • We have built in a validation routine inside the DBFCDX RDD that validates the integrity of the current tag. To call this routine call DbOrderInfo with the DBOI_VALIDATE constant.
    This will validate:
  • + +
  • If all records are included exactly once in the index
  • +
  • If the values for each record in the index are correct
  • +
  • If the order of the index keys in a page is correct
  • +
  • If the list of index pages in the index is correct
  • +
    +
    + When a problem is found then this call returns FALSE and a file will be written with the name <BagName>_<TagName>.ERR containing a description of the errors found. + +
  • Most exported variables inside the Workarea class (inside XSharp.Core) and other RDD classes have been changed to PROTECTED.
    We have also added some properties for variables that need to be accessed from outside of the RDD
  • +
  • Fixed a problem that occurred when skipping back repeatedly from the BOF position in a scoped CDX index.
  • +
  • The Zap() operation for DBFCDX was not clearing one of the internal caches. This has been fixed.
  • +
  • The DBFCDX driver now closes and deletes a CDX file when the last tag in that CDX has been deleted.
  • +
    + Macro compiler + +
  • The macro compiler was not recognizing 0000.00.00 as an empty date. This has been fixed.
  • +
  • The macro compiler now also exotic characters in identifiers like the normal compiler. We have added the same identifier name rules that the C# compiler uses.
  • +
    + + XBase++ Functions + +
  • Fixed a problem in the XPP function SetCollationTable()
  • +
  • DbCargo() can now also set the cargo value for a workarea to NULL or NIL
  • +
  • We have added several functions, such as PosUpper(), PosLower(), PosIns() and PosDel().
  • +
    + + VFP Functions + +
  • Added AllTrim() , RTrim(), LTrim() and Trim() variations for FoxPro (thanks Antonio)
  • +
  • Added StrToFile() and FileToStr() (thanks Antonio and Karl Heinz)
  • +
    + + VOSDK + +
  • We have created a Destroy() method on the CSession and CSocket class, so you can 'clean up' objects (in VO you could call Axit(), but that is no longer allowed). The derstructor on these classes will also call Destroy().
  • +
  • Fixed a problem in TreeView:GetItemAttributes. It can now also be called with a hItem (which happens inside TreeViewSelectionEvent:NewTreeViewItem)
  • +
  • The OpenDialog class is now resizable.
  • +
  • Fixed a problem in FormattedString:MatchesTemplChar(), that was causing problems with edit controls with a picture
  • +
  • Calling DataWindow:__DoValidate() late bound was not working because there are 2 overloads. This has been fixed. Please note that in the VO SDK DataWindow:__DoValidate() expects a parameter of type Control, but inside the DataBrowser code it is called with a parameter of type DataColumn. VO does not complain but in .Net that does not work !
  • +
  • Fixed a problem in GetMailTimeStamp() in the Internet classes.
  • +
  • We have included "typed" versions of Consoleclasses, SystemClasses and RDD classes. These are mostly strongly typed and can run in AnyCPU mode.
    The SQL classes and GUI classes will follow.
  • +
    + Visual Studio Integration + Code Model + +
  • We have totally rewritten the background parser and code model that is used to parse "entities" in the VS editor and that is used to build a memory model of the types, methods, functions etc in your VS solution. This parser now uses the same lexer that the compiler uses, but the entities are collected with a hand written parser (since the code in the editor buffer may contains incomplete code we can't reliably use the normal parser).
  • +
  • We are now using a SQLite database to persist the code model between sessions. This reduces the memory needed by the X# project system. We are no longer keeping the entire code model in memory.
  • +
  • This also means that when you reopen an existing solution we will only have to parse files that have  changed since the last time they were processed. That should speed up loading of large VS solutions.
  • +
  • We are now also reading type information from external code (assembly references and project references to non X# projects) using the Mono.Cecil library instead of the classes in the System.Reflection namespace. This is faster, uses less memory and, most important, we can easily unload and reload assemblies when they were changed.
  • +
  • As a result of all of this, opening VS solutions should be faster and "lock up" VS less often (hopefully not at all). Also code completion and other intellisense features should be improved.
  • +
    + + Source code editor + +
  • Fixed a problem with the dropdown comboboxes above the editor when the cursor is in a line of code before the first entity.
  • +
  • Fixed a problem that functions in the editor after a class declaration had no collapsible regions
  • +
  • The code completion inside the editor now also picks up extension methods for the types themselves, but also extension methods for interfaces implemented by these types.
  • +
  • The editor code now properly recognizes variables declared with the VAR keyword when they are followed by a constructor call
  • +
  • If you have XML comments in your source code for entities in your solution, then these comments should be picked up by the tooltips inside Visual Studio and by the parameter completion.
  • +
  • Fixed several problems in the "reformatting" code
  • +
    + Windows Forms editor + +
  • Some inline assignments to fields inside classes that are used by the Windows Forms could make the form unusable by the form editor. This has been fixed.
  • +
  • The Windows Forms editor was sometimes removing blank lines between entities. This has been fixed.
  • +
  • User Defined Commands in code parsed by the Windows Forms Editor were not recognized and disappeared when the form was changed and saved. This has been fixed.
  • +
  • Fixed a problem with setting images and similar properties with resources stored in the project resources file (which are prefixed with "global::" in the source code)
  • +
    + VOXporter + +
  • We have added support to export VO Forms from the AEFs to XML format
  • +
  • We have added support to export VO Menus from the AEFs to XML format
  • +
    + + Changes in 2.4.1.0 (Bandol GA 2.4a) + Compiler + +
  • Bracketed strings are now no longer supported in the Core dialect to avoid problems with single line external property declarations that contain attributes between the GET and SET keywords
  • +
  • The PROPERTY keyword was not properly recognized after an EXTERN modifier.
  • +
  • Fixed a XS9021 warning for a IIF expressions with 2 numeric constants
  • +
  • In the FoxPro dialect late bound calls are now always allowed on certain types (even when the /lb compiler option is not enabled), such as USUAL and the Empty class.  These types are marked with the AllowLateBound attributes in the runtime.
    They WILL generate a new compiler warning (XS9098).
  • +
  • We have added a new compiler option -fox2. This option makes local variables visible to the macro compiler and should also be used when you use SQL statements with embedded parameters. This compiler option must be used in combination with -memvar and the FoxPro dialect
  • +
    + Runtime + +
  • Fixed a problem in the DELIM Rdd that would occur when using DbServer:AppendDelimited() and DbServer:CopyDelimited().
  • +
  • Fixed a problem with DbSetOrder() returning TRUE even when the order was not found.
  • +
  • Fixed a problem where the File() function would return FALSE when using wildcard characters
  • +
  • SqlExec() now returns columns of type Date for SQL providers that have a separate Date type
  • +
  • Workareas/Cursors created with SqlExec() now have the NULL flags, Binary flags etc. set properly according to the settings read from the backend.
  • +
  • Fixed and added implementation of VFP functions (Gomonth, Quarter, ChrTran, At in various variations, RAt in various variations, DMY, MDY). Thanks Karl Heinz.
  • +
  • First work on parameterized SQL functions. Not finished yet.
  • +
  • Some types in the runtime are now marked with a special "AllowLateBound" attribute. These types will be accepted in the FoxPro dialect as candidates for compiling latebound even when the /lb compiler option is not enabled.
  • +
  • We have added support for the macro compiler to access local variables by name. This is built into the VarGet() and VarPut() functions and also the MemVarGet() and MemVarPut() functions. Local variables will have preference over same named private or public variables. You have to enable the -fox2 compiler option for this.
  • +
  • ValType() now returns "Y" for currency values and "T" for DateTime values
  • +
  • No copy of the runtime state is created when that state is accessed in the Garbage collector thread.
  • +
  • SQLExecute() now returns -1 when an invalid SQL statement is executed.
  • +
  • Added the VarType() function
  • +
  • IVarGet() and Send() now return Empty strings when a method returns a NULL_STRING and the return type  is STRING
  • +
    + RDD + +
  • Getting the OrdKeyNo for a scoped index was resetting the index position to the top of the index. This would affect scrollbars in browsers for scoped indexes
  • +
    + VOSDK + +
  • The Console classes assembly is now marked as AnyCpu.
  • +
  • Fixed a problem introduced in the previous build with the calling convention for certain functions imported from Shell32.DLL such as the Drag and Drop support.
  • +
  • Fixed a problem in the PrintingDevice constructor for reading of printers when running on a Remote Desktop
  • +
  • We have changed several calls to IsInstanceOf with <var> IS <Type> constructs
  • +
  • Fixed typo in several IsInstanceOf() calls
  • +
  • Improved "column scatter" code for the DataBrowser class
  • +
    + Visual Studio Integration + +
  • If you removed all the characters from the "Commit Completion List" control in the XSharp editor options, then after restarting VS all default characters would appear. We now remember that you have cleared the list and will not refill the list again.
  • +
  • Fixed a problem that caused the editor not to rescan the current buffer for changed entities
  • +
  • Added project property for the new -fox2 compiler option
  • +
  • The VO MDI template now has Drag and Drop enabled
  • +
  • Fixed a problem in the Debugger with some of the runtime types, such as DATE that could cause an exception while debugging in VS 2019
  • +
  • Fixed a problem in the part of the editor code that is responsible for showing collapsible regions and updating the comboboxes with type names and member names.
  • +
  • Fixed the code generation for Tab pages in the VO compatible forms editor
  • +
    + + Changes in 2.4.0.0 (Bandol GA 2.4) + Compiler + +
  • Fixed problems where certain operations on integers would still return the wrong variable type
  • +
  • The Unary Minus operator on unsigned integral types (BYTE, WORD, DWORD, UINT64) was returning the same type as the original, so it was not returning a negative value. This has been changed. The return value of this operator is now the next larger signed integral type.
  • +
  • Using a compiler macro, such as __VERSION__ in an interpolated string was causing an internal error in the compiler. This has been fixed.
  • +
  • The vo11 compiler option now only works for operations between integral and non integral types. Other behavior has been removed because the VO behavior for mixing integral types was confusing and impossible to emulate.
  • +
  • Bracketed strings are now also recognized after a RETURN and GET keyword.
  • +
    + Runtime + +
  • Fixed problems when subtracting a dword from a date (related to the signed/unsigned problems in the compiler)
  • +
  • LUpdate() now returns a NULL_DATE for workareas have no open table.
  • +
  • Added the missing ErrorStack() function (thanks Leonid)
  • +
  • Added the Stack property to the Error class
  • +
  • Added the SQL..() functions from Visual FoxPro. Please note that SQLExec() and SQLPrepare() with embedded parameters in the SQL statements are not supported yet. This requires a change in the compiler that is planned for the next build.
  • +
  • Added a DbDataTable() function that returns a (detached) DataTable with the data from the current workarea
  • +
  • Added a DbDataSource() function that returns a BindingList attached to the current workarea. Updates to properties in the bindinglist will be directly written to the attached workarea.
  • +
  • Added 2 classes DbDataTable and DbDataSource that are returned by the functions with the same name.
  • +
  • Fixed a problem with incorrectly formatted USUALs with numeric values
  • +
  • We have added the defines from FoxPro.h to the VFP assembly
  • +
  • We have added the VFP MessageBox functions, including a message box that automatically closes when a timeout has reached.
  • +
  • Fixed AsHexString() to display large DWORD values that are stored inside USUALs
  • +
  • Fixed several incompatibilities with VO for FLOAT->STRING conversions
  • +
    + RDD System + +
  • Fixed a problem with skipping backward in a DBFCDX table with a scope
  • +
  • Fixed a problem with creating unique indexes with the DBFCDX and DBFNTX drivers
  • +
  • Writing NULL values to DBF columns is now always supported. When the column is a Nullable column in a DBFVFP table then the null flags are set. For other RDDs a NULL value will be written as a blank value.
  • +
  • Fixed a performance issue in Append operations for all DBF based RDDs
  • +
  • Fixed a problem with the DBFCDX driver that could happen when index pages were nearly full with key-value pairs with all blanks
  • +
  • Fixed a problem in WrapperRDD:Open()
  • +
  • Added the SDF RDD
  • +
  • Added a special DbfVFPSQL RDD that is used by the SQL..() functions in the VFP support to store the results from SQL queries. The column information describing the original column from the Sql Resultset can be retrieved with the DbFieldInfo() and the DBS_COLUMINFO define. The return value for this call is an object of the type XSharp.RDD.DbColumnInfo.
  • +
  • Added the DELIM RDD and 2 subclasses (CSV and TSV). These RDDs all return separated values. The default format for the DELIM RDD is to use the comma as separator. CSV uses semi colons and TSV uses Tabs to delimit the fields. On top of that CSV and TSV write a header row with field names.
    The "normal" Delimited operations still use DELIM. If you want to use the CSV or TSV RDDs you need to set a global setting:
  • +
    + RddSetDefault("DBFNTX")
    DbUseArea(TRUE,"DBFNTX", "c:\Test\TEST.DBF")
    DbCopyDelim("C:\test\test.txt")             // this uses the DELIM RDD

    RuntimeState.DelimRDD := "CSV"              // Tell the runtime to use the CSV RDD for delimited writes
    DbCopyDelim("C:\test\test.csv")             // this uses the CSV RDD

    RuntimeState.DelimRDD := "TSV"              // Tell the runtime to use the TSV RDD for delimited writes
    DbCopyDelim("C:\test\test.tsv")             // this uses the TSV RDD
    DbZap()

    RuntimeState.DelimRDD := "CSV"              // Tell the runtime to use the CSV RDD for delimited reads
    DbAppDelim("C:\test\test.csv")              // this uses the CSV RDD
    + VO SDK + +
  • PrintingDevice:Init() no longer tries to read the default printer from win.ini but from the registry
  • +
  • Several other locations where the code was still accessing win.ini (with the GetProfile..() funcitons) have been updated.
  • +
  • The GUI Classes were delay loading several calls to common dialog DLL and winspool.drv. This has changed because that is no longer needed in .Net.
  • +
  • Cleaned up all PSZ(_CAST operations in GUI Classes.
  • +
    + Visual Studio integration + +
  • Parameter tips for OUT variables were shown as REF
  • +
  • XML descriptions for member with REF or OUT parameters were not found
  • +
  • Fixed an exception in the VS Editor
  • +
    + VOXporter + +
  • No changes in this build
  • +
    + + Changes in 2.3.2 (Bandol GA 2.3b) + Compiler + +
  • Added support for Bracketed Strings ([Some String containing quotes: '' and ' ] )
  • +
  • Added support for Support for PRIVATE/PUBLIC syntax with &Id and &Id.Suffix notation
  • +
  • EXE files were created without manifest before, unless you were using a WIN32 resource with a manifest. This manifest is now correctly added to exe files when no manifest is supplied.
  • +
  • The handling of unmanaged resources in relation to version resources and manifests has changed:
  • + +
  • When the compiler detects native resources it will now check to see if there is a version and/or manifest resource included.
  • +
  • When there is no manifest resource, then the default manifest resource will be added to the resources from the Win32 resource file.
  • +
  • When there is a version resource then this version resource will be replaced by the version resource that the compiler generates from the Assembly attributes.
  • +
  • This should help people coming from VO, so they can use AssemblyVersion etc for all their assemblies, also the ones that have menu and window resources.
    If there happens to be a versioninfo resource in the source then this is ignored.
  • +
  • Of course we have added a command line option to suppress this: if you use the commandline option "-usenativeversion" then the native version that is included in the Win32 resource will be used. If there is no version resource included in the Win32 resource file, then this commandline option is ignored.
  • +
    +
    + +
  • PCOUNT() and ARGCOUNT() are now supported inside ACCESS/ASSIGN methods. The number of parameters that you can pass is still fixed, but both functions will now return the # of parameters defined in ACCESS and/or ASSIGN methods.
  • +
  • We fixed a problem that a compiler error "Failed to emit module" was produced instead of showing the real problem in the code (a missing type) .
  • +
  • Extended match markers in the preprocessor, such as <(file)>  in the USE udc, now also properly match file names.
  • +
  • Improved the detection algorithm that distinguishes parenthesized expressions and typecasts. This algorithm is now:
  • + +
  • Built in type names between parentheses are always seen as a typecast. For example (DWORD), (SHORT) etc.
  • +
  • Other type names between parentheses may be treated as typecast but also as parenthesized expression. This depends on the token following the closing parenthesis. When this token is an operator such as +, -, / or * then this is seen as parenthesized expression. When the token following the closing parenthesis is an opening parenthesis then the expression is seen as a typecast. Some examples:
  • +
    +
    + ? (DWORD) +42       // this is a typecast
    ? (System.UInt32) +42   // this is a parenthesized expression and will NOT compile
    ? (System.UInt32) 42    // this is a typecast because there is no operator before 42
    ? (System.UInt32) (+42) // this is a typecast because +42 is between parentheses
    + +
  • Code that calls the Axit() method now generates  a compiler error.
  • +
  • We have implemented the /vo11 compiler option
  • +
  • We have fixed several signed/unsigned warnings
  • +
  • You can now use PCall() on typed function pointers stored inside structures (this is used in the VO Internet Server SDK)
  • +
  • The lexer now recognizes (in the FoxPro dialect) the For() and Field() functions and you do not need to prefix these with @@ anymore.
  • +
    + Runtime + +
  • Fix for StrZero() with negative values
  • +
  • Fix for IsSpace() crashing with empty or null string
  • +
  • AFill() in the VFP dialect now fills also elements in subarrays (for multi dimensional arrays)
  • +
  • NoIVarGet() and NoIvarPut() no longer convert the IVar names to Symbol. That way the original casing is kept when calling the NoIVarGet() and NoIVarPut() methods in a class
  • +
  • The VFP and XPP Abstract classes are now really abstract.
  • +
  • Implemented VFP Empty class.
  • +
  • Implemented VFP AddProperty and VFP RemoveProperty functions.
  • +
  • Fixed a typo in PropertyVisibility enum name
  • +
  • Fixed several errors when calling DBF related functions for a workarea that did not contain an open table.
  • +
  • The Seconds() function now returns 3 decimals when running in the FoxPro dialect. Please note that you have to add SetDecimal(3) to actually see the 3rd decimal
  • +
  • The Like() function is now case sensitive in the FoxPro dialect and case insensitive in all other dialects. The _Like() function is case sensitive in all dialects.
  • +
  • ASort() was not accepting a 4th argument of type Object(). This has been correct: when you pass an object that has an Eval() method then this method will be called to determine the right sort order.
  • +
  • When setting/restoring global State with the Set() function, some values that are synchronized by the runtime could get out of sync. This could result in incorrect date formats or similar errors. This has been fixed.
  • +
  • Several VFP compatibility functions have been added (some contributed by Thomas Ganss).
  • +
  • We have added several VFP functions such as
  • +
  • When you set a "global setting" using the Set() function the runtime now makes sure that related settings are set accordingly. For example Setting Set.DateFormat now also updates the DateFormatNet and DateFormatEmpty.
  • +
  • Fix for PadC() function with non standard filler
  • +
  • We have added DBOI_COLLATION and DBS_CAPTION for FoxPro specific properties
  • +
    + VO SDK + +
  • We have removed the versioninfo resource from the GUI classes sourcecode. The version info is now generated from the Assembly attributes
  • +
  • We have cleaned up the code and removed the warnings 9020 and 9021 from the suppressed warnings, since the compiler now handles this correctly.
  • +
    + RDD system + +
  • The DBFVP driver no longer fails to open a DBF when the DBC file is used exclusively by someone else
  • +
  • Added support for reading captions with DBS_CAPTION and collations with DBOI_COLLATION
  • +
  • The DBFNTX driver was not setting the HPLocking flag properly when creating new indexes
  • +
    + Visual Studio integration + +
  • The type lookup for variables declared with a VAR keyword could sometimes go into an infinite loop. This has been fixed.
  • +
  • Members starting with '__' are now only hidden from completion lists when the 'Hide Advanced members' checkbox in the general editor options is checked
  • +
  • Added support for colorizing BRACKETED_STRING constants
  • +
  • Fixed a bug in the keyword case synchronization code.
  • +
  • The code behind the VS Form editor had problems with methods declared without return type. As a result forms could not be opened. This has been fixed.
  • +
  • Improved intellisense info for Defines and Enum members
  • +
  • You can now enable/disable /vo11 in the project properties dialog
  • +
    + VOXporter + +
  • When porting from Clipboard contents, now VOXporter puts back the modified code to the clipboard
  • +
  • Added option to remove ~ONLYEARLY pragmas
  • +
    + Installer + +
  • The installer now has a new command line parameter "-nouninstall" that prevents the automatic installation of a previous version. This allows you to install multiple versions of X# side by side.
    Please note that the installer sets a registry key to the location where X# is last installed. This location will be used by the Visual Studio integration to locate the compiler.
    If you don't change this then all VS installations will always use the version of X# that is last installed. See the topic about the build process in VS and with MsBuild for information about how this mechanism works.
    Also if you choose to install the X# runtime assemblies in the GAC then newer versions of these runtime DLLs will/may overwrite older versions. This depends on the fact if the newer DLLs have a new Assembly version.
    At this moment all X# runtime DLLs (still) have version 2.1.0.0 even when X# itself is now on version 2.3.2.
  • +
  • The installer now lists all found instances of VS 2017 and VS 2019, including the Visual Studio Buildtools, so you can choose to install in a particular instance of these versions of Visual Studio or simply in all instances.
    Please note that when you run X# with the -nouninstall command line option, this will prevent the installer from removing X# from VS installations where it was previously installed.
  • +
  • We have added some documentation about all the installer command line options to the help file.
  • +
    + Documentation + +
  • Fixed errors in the documentation of escape codes
  • +
  • We have added a chapter with tips and tricks that contains the following topics at this moment.
  • +
  • Added description of the installer command line arguments
  • +
  • Added description of the Build process in VS and with MsBuild
  • +
  • Added topics describing the dialect "incompatibilities" in the X# runtime. Please note that this topic is not complete yet.
  • +
  • How to catch errors at startup
  • +
  • Compiler magic in the startup code
  • +
  • Special classes generated by the compiler.
  • +
    + + Changes in 2.3.1.0 (Bandol GA 2.3a) + Compiler + +
  • When compiling in case sensitive mode, the compiler now checks to see if a child class declares a method that only differs from a method in its parent class by case
  • +
    + +
  • The warning message about assigning to a foreach iterator variable has been changed from "Cannot assign" to "Should not assign"
  • +
  • #pragma warnings was not working with the xs1234 syntax but only with numbers. This has been corrected
  • +
    + + Runtime + +
  • Added the SetFieldExtent method to the IRdd interface
  • +
  • The USUAL type no longer "caches" the dialect setting
  • +
  • Fixed some problems with ACopy() with skipped or negative arguments.
  • +
  • The return value for Alias() is now in upper case.
  • +
    + VO SDK + +
  • The VO SDK Console class now uses the System.Console class internally. The only functionality that is no longer available is:
  • + +
  • It does not respond to the mouse anymore
  • +
  • Creating a "new" console window is not supported.
  • +
    +
    + RDD system + +
  • Fixed a problem in the Advantage RDDs that was caused by a casing problem (a method in a child class had a different case than the method in the parent class that it tried to override). This is why we also added a check to the compiler.
  • +
  • Creating an NTX with the DBFNTX driver could fail in some situations due to timing issues. This has been fixed.
  • +
    + Visual Studio integration + +
  • Fixed a problem in keyword case synchronization that could corrupt the editor contents.
  • +
    + + Changes in 2.3.0.0 (Bandol GA 2.3) + Compiler + +
  • Syntax errors (1003) or Parser errors (9002) in a source file could lead to multiple errors in the error list. We are now only reporting the first of these error types in a source file.
  • +
  • Implemented the -cs (Case Sensitive identifiers) compiler option
  • +
  • The compiler now includes the source for a compiletime codeblock as string in that codeblock. Calling ToString() on a compile time codeblock will retrieve this string.
  • +
  • Fixed a problem that memory variables were not updated when passed to a DO <proc> WITH statement
  • +
  • Accessing or assigning undefined properties or calling undefined methods in typed code was generating a compiler error. The compiler now detects if the type has a NoIVarGet(), NoIVarPut() or NoMethod() method, and when it finds the appropriate methods then a compiler warning (XS9094) is generated instead of a compiler error.
  • +
  • Casting a numeric to a LOGIC with the LOGIC(_CAST, numValue) construct was only looking at the lowest byte of numValue. If the lowest byte was zero and a higher byte was non zero the result would be FALSE. The compiler now compiles this into (numValue <> 0).
  • +
  • The compiler now supports an (optional) THEN keyword for the IF statement
  • +
  • Added support for the FoxPro CURRENCY type.
  • +
  • The Value keyword is always compiled in lower case in PROPERTY SET methods
  • +
  • Unterminated strings are now detected at the end of the line.
  • +
  • Added ENDTRY UDC for FoxPro
  • +
  • Added support for #pragma warning(s). See the #pragma warnings topic in the help file for more info.
  • +
  • Added support for #pragma options. See the #pragma options topic in the help file for more info.
  • +
    + Runtime + +
  • Added XSharp.Data.DLL which contains support code for .Net SQL based data access used by the RDD system and the new Unicode SQL classes.
  • +
  • DbEval() was throwing an exception when no FOR block or no WHILE block was passed
  • +
  • DbEval() was throwing an exception when the block that is evaluated was not returning a logical expression
  • +
  • The workarea event for OrdSetFocus() had an error which would result in an "Operation Failed" error for this event, even when the event succeeded.
  • +
  • The index operator on USUALs containing STRINGS (which is only supported in the Xbase++ dialect) was not taking into account that the indices were already ZERO based,
  • +
  • Calling DbCreate() with incorrect lengths for Date or Logic fields was throwing an exception, these are now automatically corrected
  • +
  • Added a fix for converting USUAL values of type STRING with NULL to STRING
  • +
  • Fixed a problem in __FIeldSetWa() when the area was NIL or "M".
  • +
    + +
  • Added the FoxPro CURRENCY type. These are also supported in USUAL variables. Internally the values of a CURRENCY variable are stored as Decimal but rounded to 4 decimal places.
  • +
  • Most runtime DLLs are now compiled in Case Sensitive mode.
  • +
  • Fixed a problem in the STOD() function, so it allows strings that are longer than 8 characters.
  • +
  • We have added some VFP functions to the runtime, such as the Just..() functions and AddBs(). Several other functions are there but not implemented. They are marked with an [Obsolete] attribute and will throw a NotImplementedException when called.
  • +
  • When running on windows the low level File IO system now uses native windows File access in stead of the managed access. This also affects the RDD system.
  • +
  • Fixed problems in ACopy(), Transform(), Str()
  • +
    + VOSDK Classes + +
  • Added DbServer:FieldGetBytes() and DbServer:FieldPutBytes() to read the 'raw' bytes of a string field. Please note that (in ccOptimistic mode) the bytes value is NOT cached and that you have to manually lock and unlock the server when calling FieldPutBytes().
  • +
  • Added several missing defines
  • +
  • Synchronized the VO SDK to the VO 2.8 SP4 SDK. The only changes that are not included are the ones from the DateTimePicker class. These changes were causing conflicts with the existing code in the X# VOSDK.
  • +
    + RDD System + +
  • Querying the header size for the Advantage RDD would cause an exception. This has been fixed
  • +
  • Fixed a problem with DbRlockList() and the advantage RDD
  • +
  • Skipping in a cursor for the Advantage RDDs was not refreshing the EOF and BOF flags for related tables
  • +
  • Fixed a problem writing strings in FPT files
  • +
  • The AX_Get.. Handle() functions were not properly returning the handles
  • +
  • We have added several missing Advantage related functions.
  • +
  • The DBFVFP driver was not writing the block for DBC backlinks to the file header when creating a new file, which resulted in negative record numbers.
  • +
  • We have added (temporary) support for reading field names from DBC files for the DBFVFP driver. As a result CDX files which use the long field names in index expressions are now also opened correctly
  • +
  • Fixed a problem in the CopyDb() code for the DBF RDD
  • +
  • The DBFCDX RDD now implements the BLOB_GET and also BlobExport() and BlobImport()
  • +
  • Packing, Zapping or Rebuilding a CDX index with a Custom or Unique flag would not keep these flags. This has been fixed.
  • +
  • When you create a file with the DBFVFP driver you can now include Field Flags in the field type of the DbCreate() array by following the type with a colon and one or more flags, where flags is one of:
    N or 0:Nullable
    BBinary
    +AutoIncrement
    UUnicode.  (not supported by FoxPro)
    Other flags may follow ( for example Harbour also has E = Encrypted and C = Compressed)
    Note:
  • + +
  • Please note that the size of the field is the # of bytes, so {"NAME","C:U",20,0} declares a Unicode character field of 10 Unicode characters and 20 bytes.
  • +
  • We do not validate combinations of flags. For example AutoIncrement is only working for fields of type Integer.
  • +
    +
    + +
  • DbFieldInfo(DBS_PROPERTIES) returns 5 for all RDDs with the exception of the DBFVFP driver. That driver returns 6. The 6th property is the FLAGS field. This field is a combination of the DBFFieldFlags enum values.
  • +
  • Fixed a problem with AppendDb() and CopyDb() for the Advantage RDD
  • +
  • Fixed a problem in the Append() code of the DBF RDD. When Append() was called and no data was written then the record that was written to disk could be corrupted. The Append() method now directly writes the new record with blanks..
  • +
  • The Fully qualified names of the Advantage RDDs inside XSharp.RDD.DLL are now the same as in the AdvantageRDD.DLL for Vulcan.
  • +
    + +
  • We have added a FileCommit event to the notifications. This sent when a workarea is committed.
  • +
    + Macro compiler + +
  • The macro compiler now also recognizes the Array(), Date() and DateTime() functions.
  • +
  • Fixed problems with Aliased expressions
  • +
  • On the place where the macro compiler expects a single expression you can now also have an expression list between parentheses. The last expression in the list is seen as the return value of the expression list
  • +
    + Visual Studio integration + +
  • The option to compile case sensitive has been enabled in the VS project system
  • +
    + +
  • The speed of 'Format Document' has improved a lot.
  • +
  • The XSharp Intellisense Optionspage in Tools/Options now has a scroll bar when needed
  • +
  • The ToolPalette in the VO Window editor now has icons
  • +
    + +
  • We have added templates for VO MDI windows and VO SDI windows.
  • +
    + Build System + +
  • When compiling native resources the resource compiler now automatically includes a file with some defines such as VS_VERSION_INFO
  • +
    + Debugger + +
  • When you enter a watch expression in the debugger or a breakpoint condition, you can now use 1 based array indices. Our debugger will now automatically subtract 1 when evaluating the expression.
  • +
    + VOXporter + +
  • Fixed a problem in the Windows Forms code generation
  • +
    + +
  • You can now also export single MEF files, single PRG files and data from the Clipboard.
  • +
  • Code between #ifdef .. #endif is not touched by VOXPorter
  • +
    + + Changes in 2.2.1.0 (Bandol GA 2.2a) + Compiler + +
  • When compiling code that contained an assign and not an access then trying to read the access could lead to a compiler exception. This has been fixed.
  • +
    + Runtime + +
  • Added a missing _Run() function
  • +
    + Visual Studio integration / Build system + +
  • Fixed a problem that caused a dialog to be shown with the message "The 'XSharp Project System' package did not load correctly."
  • +
  • Fixed a problem with writing response files for the resource compiler when the source file names contained ASCII characters with accents or other  characters > 128. Even though this is now fixed we still recommend not go to crazy with file names, because these names have to be converted from Unicode to Ansi, since the resource compiler can only read response files in Ansi format.
  • +
  • Fixed a problem for certain QuickInfo / Tooltip windows
  • +
  • The VO item templates now have a condition around the #include statements for the Vulcan include files, since these are no longer needed when compiling for the X# runtime.
  • +
  • Added Support for the "Auto" window in the debugger
  • +
  • Expressions in the Watch window, Breakpoint conditions etc may now contain SELF, SUPER and a colon separator. Unfortunately they are still case sensitive.
  • +
    + VOXPorter + +
  • we now detect that a class has fieldnames and accesses/assigns with the same name. This was allowed in VO but no longer in .Net. The field names will be prefixed with an underscore inside the class.
  • +
  • We now prefix the name "Trace" with @@ because this is quite often used to conditional compile tracing code in VS.
  • +
    + + Changes in 2.2.0.0 (Bandol GA 2.2) + Compiler + +
  • The compiler now recognizes the functions Date(), DateTime() and Array(), even though their names are the same as type names.
    Date() with 1 parameter will still be seen as a cast from that parameter to a Date(), like in the following example
    LOCAL dwJulianDate AS DWORD
    LOCAL dJulianDate  AS DATE
    dwJulianDate       := DWORD( 1901.01.01)
    dJulianDate        := DATE(dwJulianDate) // This is still a cast from Date to DWORD
    However when Date is called with 0 or 3 parameters then either the current date is returned (like with Today()) or a date is constructed from the 3 parameters (like in ConDate())
    The DateTime() function takes 3 or more parameters and constructs a DateTime() value.
    The Array() function takes the same parameters as the ArrayNew() function.
  • +
  • When choosing overloads for String.Format() and a usual expression is passed as first reference we no longer allow the compiler to choose one of the overloads that expects an IFormatProvider interface.
  • +
  • Parameters passed by reference to untyped methods/functions now have the IsByRef flag set. You can query for "By Reference" parameters by checking the parameter with IsByRef(uParameter). Please note that after assigning a new value to a parameter, this flag will be cleared.
  • +
  • The compiler now also allows to pass aliased fields and memvars by reference to untyped functions. Even undeclared memvars are allowed.
    Please note that the assignment back to the field and memvar will happen after the call to the function returns. So inside the function the field or memvar will still have its original value.
  • +
  • Using ':'  as send operator in Interpolated strings is ambiguous because ':' is also used add format specifiers to interpolated strings. The compiler now detects and allows "SELF:", "SUPER:" and "THIS:".
    If you want to be safe use the '.' as send operator inside interpolated strings for other variables, or simply don't use interpolated strings, but use String.Format like in:
    ? String.Format("{0} {1}", oObject:Property1, oObject:Property2)
    in stead of
    ? i"{oObject:Property1} {oObject:Property2}"
    This is the code that the compiler will produce anyway
  • +
    + + Macrocompiler + +
  • The macro compiler now recognizes and compiles nested codeblocks, such as
    LOCAL cb := {|e| IIF(e, {||SomeFunc()}, {||SomeOtherFunc}) } AS CODEBLOCK
    cb := Eval(cb, TRUE)   // cb will now contain {||SomeFunc()}
    ? Eval(cb)
  • +
  • In the FoxPro dialect the macro compiler now recognizes AND, OR, NOT and XOR as logical operators
  • +
    + Runtime + +
  • Added some Xbase++ compatible functions, such as DbCargo(), DbDescend() and DbSetDescend().
  • +
  • The DateCountry Enum now also the values System and Windows, which both read the date format from the Regional settings in the System.
  • +
  • We have added a WrapperRDD class that you can inherit from. This allows you to wrap an existing RDD and subclass methods of your choice. See the documentation of WrapperRDD for an example.
  • +
  • We had added a XPP member to the CollationMode enum with the same number as Clipper. This was confusing to some users. We have now give the XPP member a new number.
  • +
  • OleAutoObject:NoMethod() now behaves different in the Vulcan dialect (to be compatible with Vulcan). In the Vulcan dialect the method name is inserted at the beginning of the list of arguments. In the other dialects the arguments are unchanged, and you need to call the NoMethod() function to retrieve the name of the method that was originally called.
  • +
  • All settings in the runtime state are now initialized with a default value, so the Settings() dictionary in the runtimestate will have values for all Set enum values.
  • +
  • The previous change has fixed a problem with the Set() function when setting values for logical settings with a string "On" or "Off". Because some settings were not initialized with a logic this was not working.
  • +
  • When creating indexes with SetCollation(#Ordinal) the speed is a bit better now.
  • +
  • The runtimestate now has a setting EOF. When this is TRUE (which is done automatically for the FoxPro dialect) then MemoWrit() will write a ^Z (chr(26)) after a text file, and MemoRead() will remove that character when it finds it.
  • +
  • The runtimestate now has a setting EOL. This defaults to CR - LF (chr(13+chr(10)). This setting is used for line delimiters when writing files with FWriteLine().
  • +
    + RDD system + + +
  • Fixed locking problems in the DBFCDX RDD that were causing problems when opening files shared between multiple apps but also between multiple threads. The RDD now should properly detect that the CDX was updated by another process or thread.
  • +
  • Fixed a problem with the File IO system when running multiple threads
  • +
  • Fixed a problem with the File() and FPathName() functions when running multiple threads
  • +
  • Added support for Workarea Cargo (See DbCargo())
  • +
  • Numeric columns with trailing spaces were returned as 0. This has been fixed.
  • +
  • Fixed a problem in the DBFCDX driver that was happening when many keys were deleted / updated and index pages were deleted.
  • +
  • Fix a read error at EOF for the DBF RDD.
  • +
    + VOSDK + +
  • Fixed a problem in the DbServer destructor when called at application shutdown for a server that was already closed.
  • +
    + Visual Studio integration + +
  • Fixed speed problem in the "Brace Matching" code with the help of a user (thanks Fergus!)
  • +
  • You should no longer be able to edit source code when the debugger is running.
  • +
  • We have added a property "Register for COM Interop" to the build options of the Project Properties.
  • +
  • We have updated the assembly info templates . They now have a GUID and Comvisible attribute.
  • +
  • Empty lines in the editor buffer could sometimes trigger an exception. This has been fixed
  • +
  • Text between TEXT .. ENDTEXT is no longer changed by formatting options in the editor, such as indenting or case synchronization.
  • +
  • Incomplete strings will have the color of normal strings in the editor.
  • +
  • QuickInfo and Completion lists will follow the "format case" setting of the editor for keywords.
  • +
  • If a certain option from the Tools/Options was not set then loading a project that was saved with files open in the editor could result in an exception, causing the project to be loaded with no visible items. Unload and Reload would fix that. This will no longer happen.
  • +
  • We have made some changes to make solutions open and close faster.
  • +
  • Some colors were difficult to read when the Visual Studio Dark theme was selected. This has been fixed.
  • +
  • Brace matching was sometimes incorrectly matching an END CLASS with the BEGIN NAMESPACE. This should no longer happen.
  • +
  • Fixed an exception when opening a solution under certain circumstances which would display an error inside VS that the XSharp Project System was not loaded correctly.
  • +
  • The Code Generator for Windows Forms, Settings and Resources now respect the keyword case setting from the Tools - Options TextEditor/XSharp page.
  • +
    + VOXPorter + +
  • Folder names ending with a backslash could confuse VOXPorter
  • +
    + + Changes in 2.1.1.0 (Bandol GA 2.11) + Compiler + +
  • We have added new syntaxes for OUT parameters. You can now use one of the following syntaxes
  • +
    +
      LOCAL cString as STRING
      cString := "12345"
      IF Int32.TryParse(cString, OUT VAR result)      
    // this declares the out variable inline, the type is derived from the method call
         ? "Parsing succeeded, result is ", result
      ENDIF
      IF Int32.TryParse(cString, OUT result2 AS Int32)  
    // this declares the out variable inline, the type is specified by us
         ? "Parsing succeeded, result is ", result2
      ENDIF
      IF Int32.TryParse(cString, OUT NULL)      
    // this tells the compiler to generate an out variable, we are not interested in the result
         ? "Parsing succeeded"
      ENDIF
      IF Int32.TryParse(cString, OUT VAR _)      
    // this tells the compiler to generate an out variable, we are not interested in the result.
    + // The name "_" has a special meaning "ignore this"
         ? "Parsing succeeded"
      ENDIF
    + +
  • The compiler now allows the function names Date(), DateTime() and Array(). The runtime has these functions (see below)
  • +
  • Fixed a preprocessor problem where the <token> match marker inside UDCs was stopping matching tokens when the .not. or ! operator was found after another logical operator such as .AND. or .OR..
  • +
  • Added support for <usualValue> IS <SomeType>. The compiler will automatically extract the contents of the USUAL and wrap it in an object and then apply the normal IS <SomeType> operation.
  • +
  • Fixed a problem with Interpolated strings where the '/' character was not properly recognized.
  • +
  • The compiler now supports the FoxPro syntax for cursor access. When dynamic memory variables are disabled this always gets translated to reading a field from the current cursor/workarea.

      USE Customer
      SCAN
         ? Customer.LastName
      END SCAN
      USE
  • +
    + When memory variables are enabled then this code could also mean that you are trying to read the Lastname property of a variable with the name "Customer" like in the example below: +   USE Invoices
      Customer = MyCustomerObject{}
      SCAN
         ? Customer.LastName, Invoice.Total
      END SCAN
      USE
    + You can also use the M prefix to indicate a local variable or memory variable. The compiler will try to resolve the variable to the local first and when that fails it will try to resolve the variable to a memory variable (when dynamic memory variables are enabled). + Runtime + +
  • We have added support functions for the FoxPro cursor access syntax.
  • +
  • In the Vulcan dialect the NoMethod() method now receives the methodname as first parameter (this is NOT compatible with VO)
  • +
  • Added functions Date() (can have 0 or 3 parameters, equivalent to Today() and ConDate()), DateTime() and Array().
  • +
  • Added fixes and optimizations for functions such that take an area parameter such as Used(uArea) and Eof(uArea).
  • +
  • AScan() and AScanExact() now return 0 when a NULL_ARRAY is passed.
  • +
    + + RDD + +
  • There was a problem reading negative numbers from DBFs. This has been fixed
  • +
  • Fixed an exception when FPT drivers were writing data blocks in the FPT file with a 0 byte length.
  • +
  • The DBF() function returns the Full filename in the FoxPro dialect and the alias in the other dialects.
  • +
  • When creating an CDX index for a completely empy DBF file then an index key would be inserted for the phantom record. This has been fixed.
  • +
    + + Changes in 2.1.0.0 (Bandol GA 2.1) + Compiler + +
  • We have added support for parameters by reference to function and method calls for untyped parameters
  • +
  • In the Xbase++ and FoxPro dialect arguments passed with '@' are always treated as BY REF arguments because these dialects do not support the 'AddressOf' functionality
  • +
  • When /undeclared was used and an entity added a new private then this private was not cleared when the entity went out of scope. This has been fixed.
  • +
  • Compiling oObject?:Variable was not handled correctly by the compiler
  • +
  • Fixed an internal compiler error when calling SELF:Axit()
  • +
  • Parameters for the DO statement are now passed by reference
  • +
  • Changed the order of 'necessary' assembly names when compiling for not core dialect.
  • +
  • We have added support for several SET commands, such as SET DEFAULT, SET PATH, SET DATE, SET EXACT etc.
  • +
    + Runtime + +
  • We have made some changes to get XSharp.Core to run on Linux
  • +
  • We have fixed a problem in the Subtract operator for the Date type. This changes the signature of the Subtract operator which has forced us to increase the Assemblyversion of the runtime.
  • +
  • The Xbase++ dialect now allows the [] operator on a string inside a usual. This returns a substring of 1 character for the given position.
  • +
  • We have fixed an incorrect event for the OrderChanged event
  • +
  • CoreDb.BuffRefresh was sending an incorrect enumerator value to the IRDD.RecInfo() method.
  • +
  • The IVarList() function was including protected Fields and Properties. This has been fixed.
  • +
  • IsInstanceOfUsual() could not be used if an objects was of a subclass of CodeBlock. This has now been fixed.
  • +
  • We have added many overloads of workarea related functions with an extra parameter to indicate a workarea number or workarea name. For example for the EoF(), Recno(), Found() and Deleted() functions
  • +
  • We have added Xbase++ collation tables. The SetCollationTable() function now selects the right collation.
  • +
  • Several Array related functions now have better checks for NULL arrays
  • +
  • The SubcodeText property in the error class is now Read/Write. When the value has not been written then the subcode number is used to lookup the value of the property.
  • +
  • MExec() was not always evaluating the compiled codeblock. This has been fixed.
  • +
  • We have added some missing Goniometric functions, such as ACos(), ASin() and more.
  • +
  • In the Xbase++ dialect the FieldGet() and FieldPut() functions no longer throw an error for incorrect field numbers
  • +
  • We have added a missing MakeShort() function and SEvalA() function.
  • +
  • The DateCountry settings now include a System setting which will read the date format from the settings for the current culture.
  • +
    + Macrocompiler + +
  • When the macro compiler detects an ambiguous method or constructor it now includes the signatures of these in the error message
  • +
  • We have added a new IMacroCompiler2 interface that adds an extra property "Resolver". This property will may receive a Delegate of type "MacroCompilerResolveAmbiguousMatch". This delegate has the following prototype:
    DELEGATE MacroCompilerResolveAmbiguousMatch(m1 as MemberInfo, m2 as MemberInfo, args as System.Type[]) AS LONG
  • +
  • The delegate will be called when the macro compiler detects an ambiguous match and receives the System.Reflection.MemberInfo for possible candidates and an array of the detected types of the arguments (detected at compile time). The delegate can return 1 or 2 to choose between either candidate. Any other value means that the delegate does not know which of the ambiguous members to choose.
    If the macro compiler finds more than 2 alternatives, it first calls the delegate with alternatives 1 & 2, and then the selected delegate from these 2 and alternative 3 etc.
  • +
  • You can register a function or method as delegate with the new function
    SetMacroDuplicatesResolver()
  • +
  • We are now handling (one level of) nested Macros. So the macro compiler correctly compiles a codeblock like
    {|e| iif(e, {||TRUE}, {||FALSE})}
  • +
  • The macrocompiler now allows comparisons between Integers and Logics (just like the Usual type in the runtime). This is still not recommended !
  • +
  • The macrocompiler now allows the use of '[' and ']' as string delimiters. This is NOT allowed in the normal compiler because these delimiters will be impossible to differentiate from attributes.
  • +
  • We have fixed a problem when a late bound call was needed for method names that were matching method names or property names in the Usual type (such as a method with the name Item()).
  • +
  • PCount() for macro compiled codeblocks was always returning 1. This has been fixed.
  • +
    + VOSDK + +
  • Fixes a problem with DbServer objects that were not closed in code.
    The existing code was trying to close the workarea from the destructor. But in .Net the destructor runs in a separate thread and in that GC Thread there where no files open...
  • +
  • Removed unneeded calls to DbfDebug()
  • +
  • The AdsSqlServer class is now added to the VORDDClasses assembly
  • +
    + RDD + +
  • We have fixed a problem with parsing incorrect or empty dates
  • +
  • We have fixed a problem with reading Dates in the Advantage RDD that could cause a Heap error when reading dates.
  • +
  • We have added several 'missing' functions for Advantage support that were in the 'Ace.Aef' for VO
  • +
  • We have added support for Character fields > 255 characters
  • +
  • DbSetScope() now moves the record pointer to the first record that matches the new scope.
  • +
  • DbCreate() for the DBFNTX driver with SetAnsi(TRUE) was creating a file with a first byte of 0x07 (or 0x87) .
    This no longer happens in the Xbase++, FoxPro and Harbour dialects because this first byte is VO specific only
  • +
  • Some FoxPro memo values are written with an extra 0 byte at the end. This extra byte is now suppressed when reading these values.
  • +
  • We have fixed a problem with the version numbers in CDX files not being updated and also improved CDX locking.
  • +
  • Xbase++ was not recognizing NTX indices when the tag name in the index header was not in uppercase. This has been fixed.
  • +
  • We have fixed a (performance and size) problem when creating CDX indexes.
  • +
  • When opening a DBF file that does not have a codepage byte, we default to the current Windows or DOS codepage, depending on the current SetAnsi() setting.
  • +
  • Optimized reading numeric, date and logical columns
  • +
  • +
    + Visual Studio integration + +
  • The WCF Service template has been fixed
  • +
  • We have migrated the project system to the Asynchronous API. This should make loading of solutions with a large number of X# projects a bit faster.
  • +
  • Fixed a problem in the Keyword Case synchronization that could lock up the UI for several seconds
  • +
  • Fixed an exception in the BraceMatching code.
  • +
  • Uncommenting a block of lines was sometimes leaving the comments in front of empty lines. This has been fixed.
  • +
  • We have improved the (XML) documentation lookup for types, methods, fields, properties and parameters.
  • +
  • We have improved the type lookup between X# projects.
  • +
    + VOXPorter + +
  • DbServer and FieldSpec entities are now also exported
  • +
  • VOXPorter now also can genarate a separate project/application that contains Windows Forms versions of the VO GUI windows found in the VO Applications.
  • +
  • When running VOXPorter you now can choose to export to XIDE, Visual Studio or Both.
  • +
    + + Changes in 2.0.8.1 (Bandol GA 2.08a) + Compiler + +
  • Fixed a recursion problem in the preprocessor
  • +
  • MEMVAR-> and FIELD-> were no longer correcty detected This has been fixed.
  • +
  • We have fixed several issues in  dbcmd.xh
  • +
  • Fixed a problem with return statements inside Lambda expressions.
  • +
  • The = Expression() statements (FoxPro dialect) was not generating any code. This has been fixed.
  • +
    + Runtime + +
  • XPP.Abstract.NoMethod() and XPP.DataObject.NoMethod() were still expecting the method name as 1st parameter.This has been fixed.
  • +
  • StretchBitmap() was doing the same as ShowBitmap() because of an incorrect parameter. This has been fixed.
  • +
    + Visual Studio integration + +
  • Improved the Format-Document code
  • +
  • Fixed a problem in the VS Parser when looking up the type for variables defined with the VAR keyword which could send VS in an endless loop.
  • +
  • The contents of the TEXT .. ENDTEXT block and the line after the \ and \\ tokens now has its own color
  • +
    + + Changes in 2.0.8 (Bandol GA 2.08) + Compiler + +
  • The compiler had a problem with the "return" attribute target
  • +
  • Errors inside the "statementblock" rule are now better detected and the compiler will no longer report many errors after these for correct lines of code.
  • +
  • Fixed a problem with Casts to logic
  • +
  • Fixed a problem with undeclared variables used as counter for For Loops
  • +
  • Improved the code generation for FIELDs, MEMVARs and undeclared variables for prefix operation, postfix operations and assignments.
  • +
  • Improved the code generation for method calls where the parameter is a ref or out variable when default parameters are involved. The compiler now generates extra temporary variables for these calls.
  • +
    + +
  • In the dialects where this relevant the compiler now also supports ENDFOR as alias for NEXT and FOR EACH as alias for FOREACH.
  • +
  • Added support for the DO <proc> [WITH arguments] syntax
  • +
    + Runtime + +
  • The DbCreate() function now creates a unique alias when the base filename of the file to create is already opened as an alias
  • +
  • The Numeric overflow checking for USUAL values now follows the overflow checks of the main app
  • +
  • DbUnLock() now accepts an (optional) record number as parameter
  • +
  • XMLGetChild() was throwing an exception when no elements were found
  • +
  • XMLGetChildren() was throwing an exception
  • +
  • Fixed a problem in 2 rules inside "dbcmds.xh"
  • +
  • The XSharpDefs.xh  file now automatically includes "dbcmd.xh"
  • +
  • Some datatype errors were reported incorrectly.
  • +
  • The "NoMethod" method for late bound code was called with incorrect parameters. This has been fixed.
  • +
  • Fixed some problems with translating usuals with a NIL value to string or object.
  • +
  • In Xbase++ the Set() function also accepts strings with the value "ON" or "OFF" for logical settings. We are now allowing this too.
  • +
  • Set(_SET_AUTOORDER) now accepts a numeric second parameter just like in VO (Vulcan was using a Logic parameter)
  • +
  • We have added some support classes to the FoxPro class hierarchy for the FoxPro class support (Abstract, Custom and Collection). More classes will follow later.
  • +
  • Fixed a problem with transform and "@ez" picture.
  • +
    + VOSDK + +
  • Fixed a problem in the SQLSelect class when re-opening a cursor.
  • +
    + RDD System + +
  • Fixed a problem reading Advantage MEMO fields
  • +
  • Improved the error messages when an index cannot be opened due to an index expression with an error (for example a missing function)
  • +
  • We have added the option to install an event handler in the RDD system. See the topic Workarea Events for more information.
  • +
  • Skip, Gobottom and other workarea operations that change the current record will no longer set EOF to FALSE for workareas with 0 records.
  • +
  • Clearing the scope in an Advantage workarea would throw an exception when there was no scope set. This has been fixed.
  • +
  • Unlocking a record in an Advantage workarea would throw an exception when there was no record locked. This has been fixed.
  • +
  • DbSetRelation() was not working correctly. This has been fixed.
  • +
    + VS Integration + +
  • Fixed a problem with the code generation for DbServer and FieldSpec entities
  • +
  • Added support for the Import and Export buttons in the DbServer Editor
  • +
  • Improved entity parsing inside the editor in the Xbase++ dialect.
  • +
  • The VS Parser was not colorizing the UDC tokens (including ENDFOR) unless the source file had preprocessor tokens itself. This has been fixed.
  • +
  • Improved block detection for new END keywords.
  • +
  • The VS Integration now recognized the class syntax for VFP type classes.
  • +
  • Fixed a problem in the code that was checking to see which project system "owns" the PRG extension.
  • +
  • Added compiler option to the Project Property pages to suppress generating a default Win32 manifest.
  • +
    + VOXporter + +
  • VOXPorter was ignoring entities that were not properly prototyped in VO. This has been fixed
  • +
    + FoxPro dialect + +
  • We have added a compiler option /fox1 that controls the class hierarchy for objects. With /fox1 enabled (the default in the FoxPro dialect) all classes must inherit from the Custom class. The code generation for properties stores the values for properties in a collection inside the Custom class. With /fox1- properties will be generated as "auto" properties with a backing field.
  • +
  • We have added support for FoxPro classes. See the topic FoxPro class syntax for more information about what works and what doesn't work.
  • +
  • We have added support for DIMENSION and DECLARE statements (which create a MEMVAR initialized with an array)
  • +
    + + Changes in 2.0.7 (Bandol GA 2.07) + Possible breaking change + +
  • We have removed the #define CRLF from the standard header file. There is a DEFINE CRLF in XSharp.Core now. If you are compiling against Vulcan and you are seeing an error about a missing CRLF then you may want to add the following to your code:
    DEFINE CRLF := e”\r\n”
  • +
    + Compiler + +
  • UDCs that were resulting in an empty list of tokens were triggering a compiler error in the preprocessor. This has been fixed.
  • +
    + +
  • Calling a method on an array would be translated to a ASend() with the method name as parameter when the method does not exist in the underlying array class.
    The compiler will generate a warning now when this happens,.
  • +
  • The compiler was producing incorrect code for (USUAL) casts. This has been fixed. In rare cases this may produce a compilation error. If that happens to you then simply create a usual by calling the USUAL constructor:  USUAL{somevalue}
  • +
  • Fixed several problems with methods declared outside of a CLASS .. END CLASS
  • +
  • In the FoxPro dialect NOT, AND, OR and XOR are now allowed as alternate syntax for .NOT.,.AND., .OR. and .XOR.
  • +
  • In the FoxPro dialect you can now include statements before the first entity in the file. The compiler will recognize these and will automatically create a function with the name of the source file and will add the code in these statements a body of this function.
  • +
  • The compiler now allows to cast an integer expression to logic when /vo7 is enabled. The LOGIC(_CAST is always supported for expressions of type integer
  • +
  • Incorrect use of language features (such as using a VOSTRUCT in the Core or FoxPro dialect) is now detected earlier by the compiler leading to somewhat faster compile times for incorrect code.
  • +
  • The compiler now also initialized multi dimensional string arrays with an empty string when /vo2 is enabled, like in the code below:
    CLASS TestClass
      EXPORT DIM aDim[3,3] AS STRING
    END CLASS
  • +
    + +
  • In previous builds you could not set breakpoints on the source code line with a SELF() or SUPER() call if this line was immediately after the CONSTRUCTOR(). This has been fixed.
  • +
  • When a project contains "_DLL METHOD", "_DLL ASSIGN" or "_DLL ACCESS" (after exporting from VO) then the compiler will now generate a more meaningful errormessage.
  • +
  • The compiler will no longer produce hundreds of the same error messages when a source file contains many of the same error. After 10 errors per source file the compiler will only report unique error numbers. So if your source code has 20 different error messages then you will still see 20 errors reported, but if your source contains the same error type 100 times then the list will be truncated after 10 errors.
  • +
  • The compiler no longer allows code behind end tokens such as ENDIF or NEXT. The standard header file 'XSharpDefs.xh' now includes rules that will eliminate these tokens.
  • +
    + Runtime + +
  • The ++ and -- operators for the usualtype were not working for Date and Datetime values
  • +
  • FErase() and FRename() now set FError() to 2 when the source file does not exist
  • +
  • The File() function was throwing an exception for paths with invalid characters. It now returns FALSE and sets the Ferror()
  • +
  • Several specific numbers were producing incorrect Str() results. This has been fixed.
  • +
  • The case of the name of the Value property for several types was changed from Value to VALUE. This caused problems for people that were interfacing with X# code from C# code. The original case has been restored. This change has been reversed.
  • +
  • Under certain situations the error stack would not contain the complete list of frames. This has been fixed.
  • +
  • The size of the Close and Copy buttons of the Error Dialog has been enlarged so there is more space for translated strings
  • +
  • The Pad..() functions were returning a padded version of "NIL" for NIL values. This was not compatible with Xbase++. They now return a string with all spaces. Btw: VO throw an exception when you call Pad..() with a NIL value.
  • +
  • Fixed a problem with the PadC() function for values > 1 character.
  • +
  • We have changed the Val() function to be more compatible with Visual Objects
  • +
  • The runtime contained a second overload for the Space() function that accepted an Int parameter. This was causing problems in the macro compiler. This overload has been removed. You may have to change your code because of that.
  • +
  • Fixed a problem in EnforceType() and EmptyUsual() with the STRING type
  • +
  • AEval and AEvalOld() now both pass the array index as second parameter to the codeblock that is evaluated
  • +
    + RDD System + +
  • Fixed a problem that EOF and BOF were not both set to true when opening an empty DBF with an index
  • +
  • Fixed a problem with DbSeek() and Found() for DBFNTX and DBFCDX
  • +
  • The DBF class was not properly decoding field names and/or index expressions that contain Ascii characters > 127 (field names like STRAßE)
  • +
  • File dates were updated when a dbf was closed even when nothing was changed. This has been fixed.
  • +
  • The runtime now contains code that closes all open workareas at shutdown. This should help to prevent DBF or index corruption.
  • +
  • The Advantage RDD was automatically doing a GoTop after the index order was changed. This no longer happens.
  • +
  • The Advantage RDD now retries opening DBF and Index files a couple of times before failing.
  • +
  • Fixed a small incompatibility between DBFCDX and AXDBFCDX
  • +
    + VS Integration + +
  • The Core Classlibrary template had a typo in a file name which caused it not to be loaded correctly
  • +
  • The code generator for the Windows Forms editor was duplicating USING statements. This has been fixed. Duplicate using statements will be deleted when a form is opened and saved in the designer.
  • +
  • The compilation messages on the output window for the compile time and the number of warnings and errors is now only shown for the build verbosity normal and higher. The warnings and errors message is also shown for lower build verbosity if there are compiler errors.
  • +
  • The project system will no longer update the version number in the project file if the project file was created with build 2.0.1 or later.
  • +
  • Fixed a problem with setting and clearing the "Specific version" property for Assembly References.
  • +
  • The default templates for the VO compatible editors are now installed in the XSharp\Templates folder and the editor uses this location as 'fallback' when you don't have templates in your project
  • +
  • The Properties folder is now placed as first child in the tree of a Project, and the VO Binaries items are placed before resource items in the list of children of a source item in the tree.
  • +
    + VOXporter + +
  • VOXPorter now prefixes Debug tokens with @@
  • +
  • VOXPorter now removes INSTANCE declaration for properties that are also declared as ACCESS/ASSIGN
  • +
  • VOXPorter now adds spaces between variable names that are delimited with .AND. or .OR.. So  "a.and.b" becomes "a .and. b"
  • +
    + Documentation + +
  • We have "lifted" some of the documentation of the Visual Objects runtime functions and added these to our runtime documentation. This is 'work in progress', some topics will need some extra work.
  • +
    + + Changes in 2.0.6.0 (Bandol GA 2.06) + General + +
  • We received a request to keep the version numbering simpler. For that reason this new build is called Bandol 2.06 and the file versions for this build are also 2.06. The assembly versions for the runtime assemblies are all 2.0, and we intend to keep those stable as long as possible, so you will not be forced to recompile code that depends on the runtime assemblies.
  • +
  • Several fixes that were meant to be included in 2.0.5.0 were not included in that build. This has been corrected in 2.0 6.0
  • +
    + Compiler + +
  • A missing ENDTEXT keyword now produces an error XS9086
  • +
  • Unbalanced textmerge delimiters produce a warning XS9085
  • +
  • The TEXT keyword in the FoxPro dialect is now only recognized when it is the first non whitespace token on a line. As a result of this you can use tokens like <text> in Preprocessor commands again.
  • +
  • The VO cast operations on literal strings no longer produce a compiler warning about possible memory leaks.
  • +
    + + Runtime + +
  • Runtime errors in late bound code were always shown as TargetInvocationException. The true cause of the error was hidden that way. We are now unpacking the error and rethrowing the original error, including the callstack that was leading to that error
  • +
  • Some texts in the string resources were updated
  • +
  • Calling the Str() function with a -1 value for length and/or decimals produced results that were not compatible with VO. This was fixed.
  • +
  • Fixed a problem with DBZap() and files with a DBT memo.
  • +
  • In some situations EOF and BOF were not set to TRUE when opening an empty DBF file. This has been fixed.
  • +
  • PSZ values with an incorrect internal pointer are now displayed as "<Invalid PSZ>(..)"
  • +
    + + RDD System + +
  • The code to read and write to columns in an Advantage workarea now uses separate column objects, just like the code for the DBF RDD. This makes the code a bit easier to understand and should make the code a bit faster.
  • +
    + + VS Integration + +
  • The text block between TEXT and ENDTEXT is now displayed in the same color as literal strings
  • +
  • The VO compatible Project Item templates no longer automatically add references to your project
  • +
  • Project files from version 2.01.0 and later will no longer be "touched" when opening with this version of the X# project system, since there have been no changes to the project file format since that build.
  • +
    + + VOXporter + +
  • The CATCH block in the generated Start function now calls ErrorDialog() to show the errors. This uses the new language resources to display the full error with VO compatible error information (Gencode, Subcode etc)
  • +
    + + Changes in 2.0.5.0 (Bandol GA 2.01) + Compiler + +
  • Blank lines after an END PROPERTY could confuse the compiler. This has been fixed
  • +
  • The TEXT .. ENDTEXT command has been implemented in the compiler (FoxPro dialect only)
  • +
  • The \ and \\ commands have been implemented (FoxPro dialect only)
  • +
  • Procedures in the FoxPro dialect may now return values. Also the /vo9 options is now enabled by default in the FoxPro dialect. The default return value for a FUNCTION and PROCEDURE is now TRUE in the foxpro dialect and NIL in the other dialects.
  • +
  • Error messages no longer refer to Xbase types by their internal names (XSharp.__Usual) but by their normal name (USUAL).
  • +
    + MacroCompiler + +
  • Creating classes with a namespace prefix was not working. This has been fixed.
  • +
    + Runtime + +
  • Fixed a problem with ArrayNew() and multiple dimensions
  • +
  • When calling constructor of the Array class with a number the elements were already initialized. This was not compatible with Vulcan.NET. There is now an extra constructor whtich takes a logical parameter lFill which can be used to automatically fill the array
  • +
  • The text for the ERROR_STACK language resource has been updated
  • +
  • Calling Str() with integer numbers was returning a slightly different result from VO. This has been fixed.
  • +
  • Added support functions for TEXT .. ENDTEXT and TextMerge and an output text file.
  • +
  • Fixed a problem in the DTOC() function
  • +
  • You can now add multiple ImplicitNamespace attributes to an assembly
  • +
  • We have added several FoxPro system variables (only _TEXT does something at this moment)
  • +
    + RDDs + +
  • Zap and Pack operations were not properly setting the DBF file size
  • +
  • An Append() in shared mode was not properly setting the RecCount
  • +
  • Opening a file with one of the Advantage SQL RDDs was not working. This has been fixed.
  • +
  • Writing DateTime.Minvalue to a DBF would not write an empty date but the date 1.1.1 This has been fixed.
  • +
    + VO SDK + +
  • Fixed a problem in ListView:EnsureVisible().
  • +
  • Some questionable casts (such as the one that cause the previous problem) have been cleaned up
  • +
    + Visual Studio Integration + +
  • Parameter tips for constructor calls were off by one parameter. This has been fixed.
  • +
  • When looking for types, the XSharp namespace is now the first namespace that is searched.
  • +
    + + Changes in 2.0.4.0 (Bandol GA) + Compiler + +
  • Fix a problem in assignment expressions where the Left side is an aliased expression with a workarea in parentheses:
    (nArea)->LastName := AnotherArea->LastName
  • +
  • Multiline statements, such as FOR blocks, no longer generate Multiline breakpoints in the debugger.
  • +
  • Fixed a problem where blank lines or lines with 'inactive' preprocessor comments after a class definition would generate a compiler error.
  • +
  • Errors for implicit conversions between INT/DWORD and PTR now produce a better error message when they are not supported.
  • +
  • USUAL.ToObject() could not be called with the latebinding compiler option was enabled. This has been fixed.
  • +
  • Fixed an internal compiler error with untyped STATIC LOCALs.
  • +
  • Fixed a problem with aliased expressions.
  • +
  • Indexing PSZ values is no longer affected by the /az compiler option
  • +
    + MacroCompiler + +
  • Fixed a problem with some aliased expressions
  • +
  • The macro compiler now detects that you are overriding a built-in function in your own code and will no longer throw an "ambigous method" exception but will choose function from your code over functions defined in the X# runtime
  • +
    + Runtime + +
  • FIxed several problems in the Directory() function
  • +
  • Fixed problem with indexing PSZ values
  • +
  • Added StackTrace property on the Error object so also errors caught in a BEGIN SEQUENCE will have stack information.
  • +
  • Fixed problems with "special" float values and ToString(), such as NaN, PositiveInfinity
  • +
  • Fixed a problem with RddSetDefault() with a null parameter
  • +
  • DbInfo(DBI_RDD_LIST) was not returning a value. This has been fixed.
  • +
  • We have updated many of the language resources, Also the Error:ToString() now uses the language resources for captions like 'Arguments' and 'Description'.
  • +
  • Low level file errors now include the callstack
  • +
  • Fixed some problems in AsHexString()
  • +
  • The DosErrString() no longer gets its messages from the language string tables. The messages have been removed and also the related members in the XSharp.VOErrors enum.
  • +
  • Added a Turkish language resource.
  • +
    + RDD System + +
  • Fix locking problem in FPT files
  • +
  • Fixed several problems with OrdKeyCount() and filters, scopes and SetDeleted() setting
  • +
  • Some DBF files have a value in the Decimals byte for field definitions for field types that do not support decimals. This was causing problems. These decimals are now ignored.
  • +
  • Opening and closing a DBF without making changes was updating the time stamp. This has been fixed.
  • +
  • Fixed problems in Pack() and Zap()
  • +
  • Fixed a problem where custom indexes were accidentally updated.
  • +
  • Fixed several problems with OrdKeyCount() in combination with Filters, SetDeleted() and scopes.
  • +
    + VO SDK Classes + +
  • Most of the libraries now compile with "Late Binding" disabled for better performance.
    To help in doing this some typed properties have been added such as SqlStatement:__Connection which is typed as SQLConnection.
  • +
    + Visual Studio integration + +
  • Fixed a problem in the Brace matching code
  • +
  • Improved Brace matching for keywords. Several BEGIN .. END constructs have now been included as well as CASE statements inside DO CASE and SWITCH, RECOVER, FINALLY, ELSE, ELSEIF and OTHERWISE
  • +
  • Fix a problem with adding and deleting references when unloaded or unavailable references existed.
  • +
    + VOXPorter + +
  • The program is now able to comment, uncomment and delete source code lines from the VO code when exporting to XSharp.
    You have to add comments at the end of the line. The following comments are supported:
  • +
    + // VXP-COM : comments the line when exporting it
    // VXP-UNC : uncomments the line
    // VXP-DEL : deletes the line contents

    example:
    // METHOD ThisMethodDoesNotGetDefinedInVOcode() // VXP-UNC
    // RETURN NIL // VXP-UNC
    + + Changes in 2.0.3.0 (Bandol RC3) + Compiler + +
  • Code generation for STATIC LOCALs of type STRING was not initializing the variables to an empty string when /vo2 was selected. We have also improved code generation for STATIC LOCALs when they are initialized with a compile time constant
  • +
  • In preparation for the support for variables passed by reference to functions/methods with clipper calling convention we are now assigning back the locals variables to the parameter array at the end of a function/method with clipper calling convention.
  • +
  • The compiler would not complain if you were assigning a value of one enum to a variable of another enum. This has been fixed.
  • +
  • Added support for the FoxPro '=' assignment operators. Other dialects also allow the assignment operator but a warning is generated in the other dialects.
  • +
  • Xbase++ classes inside BEGIN NAMESPACE .. END NAMESPACE were not recognized. This has been fixed.
  • +
  • Statements inside WITH blocks are no longer constrained to assignment expressions and method calls. You can now use the WITH syntax for expressions anywhere inside a WITH block. If the compiler can't find the WITH variable then it will output a new error message (XS9082)
  • +
  • Updated the Aliased Expression rules to make sure that compound expressions properly respect the parentheses.
  • +
  • The __DEBUG__ macro was not always set correctly. We have changed the algorithm that sets this macro. When the DEBUG define is set then this macro gets defined. When the NDEBUG define is set then this macro is not defined. When both defines are absent then __DEBUG__ is NOT set.
  • +
  • The compiler was allowing you to use the '+' operator between variables/ expressions of type string and logic. This is now flagged as an error.
  • +
    + MacroCompiler + +
  • Fixed a problem with resolving Field names that were identical to keywords or keyword abbreviations (for example DATE and CODE) and for Field names that are equal to built-in function names (such as SET)
  • +
  • Fixed a problem where a complicated expression evaluated with an alias prefix was not evaluated correctly.
  • +
  • The macro compiler initializes itself from the Dialect option in the runtime to enable/disable certain behavior.
  • +
  • The macro compiler now recognizes the "." operator for workarea access and memvar access when running in the FoxPro dialect.
  • +
    + Runtime + +
  • Added functions FieldPutBytes() and FieldGetBytes()
  • +
  • Added function ShowArray()
  • +
  • Added several defines that were missing, such as MAX_ALLOC and ASC_A.
  • +
  • Added Crypt() overloads that accept BYTE[] arguments
  • +
  • The ClassDescribe() method for DataObject classes (XPP dialect) now includes properties and methods that were dynamically added.
  • +
  • Fixed a problem with the RELEASE command for MemVars. This was also releasing variables defined outside the current function / method.
  • +
  • There is now also a difference between the FoxPro dialect and other dialects in the behavior of the RELEASE command.
    FoxPro completely deletes the variables, the other dialect set the value of the variables to NIL.
  • +
  • New PRIVATE memvars are initialized to FALSE in the FoxPro dialect. In the other dialects they are initialized to NIL.
  • +
  • Some numeric properties in the RuntimeState were giving a problem when a numeric of one type was written and another numeric type was expected when reading. This has been fixed.
  • +
  • Fixed a problem with return NIL values from Macro compiled codeblocks.
  • +
  • The parameter to DbClearScope() is now optional
  • +
  • The USUAL type now allows to compare between values of type PTR and LONG/INT64 The PTR value is converted to the appropriate Integral type and then an Integral comparison is done.
  • +
  • The USUAL type now also allows comparisons between any type and NIL.
  • +
  • Casts from USUAL values to SHORT, WORD, BYTE and SBYTE are no longer checked to be compatible with VO.
  • +
    + RDD System + +
  • Added support for different block sizes in DBFFPT.
  • +
  • DBFFPT now allows to override the block size (when creating) from the users code. Please note that block sizes < 32 bytes prevent the FPT from opening in Visual FoxPro.
  • +
  • Added support for reading various Flexfile memo field types, including arrays.
  • +
  • Added support for writing to FPT files
  • +
  • When creating FPT files we now also write the FlexFile header. Please note that our FPT driver does not support "record recycling" for deleted blocks like FlexFile does. We also only support writing STRING values to FPT files and Byte[] values.
  • +
  • Added support for Visual FoxPro created CDX files that were created with the COLLATE option. The RDD dll now contains collation tables for all possible combinations of collation and CodePage.
  • +
  • Added support for USUALs with a NIL value and the comparison operators (>, >=, <, <=). These operators return FALSE, except the >= and <= operators which return TRUE when both sides of the comparison are NIL.
  • +
  • We exposed several Advantage related function and types. Also the function AdsConnect60() was defined. We have not created functions for all available functions in Ace32 and Ace64, but only the ones needed in the RDD.
  • +
  • If you are missing a function in the ACE class, please let us know. All functions should be available and accessible now in the Ace32 and Ace64 classes or in the ACEUNPUB32 or ACEUNPUB64 classes.
  • +
  • The ADS RDD was returning incorrect values for LOGIC fields.
  • +
  • Fixed some problems with skipping in CDX indexes and scopes and filters.
  • +
  • Executing DbGoTop() twice or DbGoBottom() twice for DBFCDX would confuse the RDD. This has been fixed.
  • +
  • Fixed a problem with Seeking() in an empty DBF file
  • +
  • FieldPut for STRING fields in the Advantage RDD now truncates the fields to the maximum length of the field before assigning the value
  • +
  • Fixed a problem with UNIQUE CDX Indexes.
  • +
  • You can now create VFP compatible DBF files with DBCreate(). To do so use the following field types (apart from the normal CDLMN):
  • +
    + WBlob
    YCurrency
    BDouble
    TDateTime
    FFloat
    GGeneral
    IInteger
    PPicture
    QVarbinary
    VVarchar
    + Special field flags can be indicated by adding a suffix to the type: + "0" = Nullable
    "B" = Binary
    "+" = AutoIncrement
    + So this creates a nullable date: "D0" and this creates an autoincremental integer "I+". + Auto increment columns are initialized with a counter that starts with 1 and a step size of 1. You can change that by calling DbFieldInfo: + DbFieldInfo(DBS_COUNTER, 1, 100) // sets the counter for field 1 to 100
            DbFieldInfo(DBS_STEP, 1, 2)   // sets the step size for field 1 to 2
    + +
  • Fixed a locking problem with FPT files opened in shared mode
  • +
  • Fixed several problems related to OrderKeyCount() and various settings of Scopes and SetDeleted()  in the DBFCDX RDD.
  • +
    + VO SDK Classes + +
  • Fixed a problem in the DateTimePicker class when assigning only a time value.
  • +
  • System classes and RDD classes have been cleaned up somewhat and now compile in AnyCPU mode. So this means that you can use the DbServer class in a 64 bit program !
    The projects for these two libraries also no longer have the "Late Binding" compiler option enabled. There is still some late bound code in these libraries but this code now uses explicit late bound calls such as Send(), IVarGet() and IVarPut().
  • +
  • Because of the change in the handling of __DEBUG__ some SDK assemblies are not better optimized.
  • +
    + Visual Studio integration + +
  • Added support for WITH .. END WITH blocks in the editor
  • +
  • When generating Native Resources (RC files) the BuildSystem now sets a #define __VERSION__. This will have the fileversion number of the XSharp.Build.DLL without the dots. (2.1.0.0 will be written as "2100")
  • +
  • The XSharp help item in the VS Help menu now opens the local Help (CHM) file
  • +
  • Fixed a problem in the WCF service template
  • +
  • Correction to the multi line indenting for code that uses attributes
  • +
  • Code generation for new Event handlers now includes a RETURN statement, even when VS does not add one to the statement list
  • +
  • The intellisense option "Show completionlist after every character" has been disabled since it was having a negative impact on performance and would also insert keywords with @@ characters in front of them.
  • +
  • Several changes to the code parsing for the Windows Forms editor. Comments and Regions should now be saved and regenerated as well as attributes on classes. Also code generation for images from project resources has been fixed as well as parsing of static fields and enumerators declared in the same assembly.
    Please note. If you are using values from types defined in the same assembly as the form then the assembly needs to be (re)compiled first before the form can be successfully opened in the Windows Forms Editor.
  • +
  • New methods generated from the Windows forms editors will now be generated with a closing RETURN statement.
  • +
  • We have made some improvements to the presentation of QuickInfo in the source code editor.
  • +
    + Tools + +
  • VOXporter now also exports VERSIONINFO resources
  • +
    + + Changes in 2.0.2.0 (Bandol RC 2) + Compiler + +
  • File wide PUBLIC declarations (for MEMVARs) were incorrectly parsed as GLOBALs. Therefore they were initialized with NIL and not with FALSE. They are now generated correctly as public Memvars. The creation of the memvars and the initialization is done in after the Init3 procedures in the assembly have run.
  • +
  • Instance variable initializers now can refer other fields and are allowed to use the SELF keyword. This is still not recommended. The order in which fields are initialized is the order in which they are found in the source code. So make sure the field initializers are defined in the right order in your code.
  • +
  • AUTO properties are now also initialized with an empty string when /vo2 is enabled.
  • +
  • The compiler was allowing you to define instance variables for Interfaces. They were ignored during code generation. Now an error message is produced when the compiler detects fields on interfaces.
  • +
  • When the compiler detects 2 ambiguous symbols with different types (for example a LOCAL and a CLASS with the same name) then the error message now clearly indicates the type for each of these symbols.
  • +
  • Fixed an exception in the Preprocessor
  • +
    + +
  • Added support for the FoxPro runtime DLL.
  • +
    + +
  • The ANY keyword (an alias for USUAL) is no longer supported.
  • +
  • Keywords that appear after a COLON (":") DOT (".") or ALIAS (->) operator are no longer parsed as keyword but as identifier. This should solve issues with parsing code that for example accesses the Date property of a DateTime class.
  • +
  • We have added support for the WITH .. END WITH statement block:

    LOCAL oPerson as Person
    oPerson := Person{}
    WITH oPerson
      :FirstName := "John"
      :LastName := "Doe"
      :Speak()
    END WITH
    You can also use the DOT (.) as prefix for the names. The only expressions allowed inside WITH .. ENDWITH are assignments and method calls (like you can see above)
  • +
  • Added support for the FoxPro LPARAMETERS statement. Please not that a function or procedure can only have a PARAMETERS keyword OR a LPARAMETERS keyword OR declared parameters (names between parentheses on the FUNCTION/PROCEDURE line)
  • +
  • Added support for the FoxPro THIS keyword and .NULL. keyword
  • +
  • We have added support for the FoxPro Date Literal format {^2019-06-21} and FoxPro DateTime Literals {^2019-06-21 23:59:59}.
  • +
  • Date literals and DateTime literals are now also supported in the Core dialect. Date Literals will be represented as DateTime values in the Core dialect.
  • +
  • The standard header file xsharpdefs.xh now conditionally includes header files for the Xbase++ dialect and FoxPro dialect. These header files do not have much content at this moment, but that will change in the coming months.
  • +
  • When the compiler detects that some header files are included but that the defines in these header files are also available as constants in references assemblies then a warning will be generated and the include file will be skipped (XS9081)
  • +
  • The compiler now supports an implicit function _ARGS(). This will be resolved to the arguments array that is passed to functions/methods with clipper calling convention. This can be used to pass all the arguments of a function/method to another function/method.
  • +
  • We have added the TEXT ... ENDTEXT command for the FoxPro dialect. The string inbetween the TEXT and ENDTEXT lines is passed to a special runtime function __TextSupport that will receive 5 parameters: the string, the merge, NoShow, Flags and Pretext arguments. You will have to define this function yourself for now. it will be included in the XSharp Foxpro runtime in a future version.
  • +
  • We have added support for END keywords for all entity types that did not have one yet. The new end keywords are optional. They are listed in the table below. The FoxPro ENDPROC and ENDFUNC keywords will be mapped to END PROCEDURE and END FUNCTION with a UDC.
  • +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Start + + End +
    + PROCEDURE + + END PROCEDURE +
    + PROC + + END PROC +
    + FUNCTION + + END FUNCTION +
    + FUNC + + END FUNC +
    + METHOD + + END METHOD +
    + ASSIGN + + END ASSIGN +
    + ACCESS + + END ACCESS +
    + VOSTRUCT + + END VOSTRUCT +
    + UNION + + END UNION +
    + +
  • The compiler now registers the Dialect of the main in the Dialect property of the RuntimeState (Non Core dialects only)
  • +
    + MacroCompiler + +
  • Fixed a problem with escaped literal strings
  • +
    + +
  • Fixed a problem with implicit narrowing conversions
  • +
  • Fixed a problem with macro compiled alias operations  (Customer)->&fieldName
  • +
    + Runtime + +
  • Fixed a problem in the Round() function.
  • +
  • Fixed a problem in the ExecName() function.
  • +
  • Added FoxPro runtime DLL.
  • +
  • Added XML support functions in the Xbase++ dialect runtime
  • +
  • Added support for dynamic class creation in the Xbase++ dialect runtime.
  • +
  • Fixed a problem in the Push-Pop workarea code for aliased expressions.
  • +
  • converting a NULL to a symbol would cause an exception. This has been fixed.
  • +
    + RDD system + +
  • Fixed several problems in the ADS RDD
  • +
  • The DBFCDX RDD is now included
  • +
  • The DBFVFP RDD is now included. This RDD can be used to access files with DBF/FPT/CDX extension and support the Visual Foxpro field types, such as Integer, Double, DateTime and VarChar. Reading files should be fully supported. Writing should also work with the exception of the Picture and General formats and with the exception of the AutoIncremental Integer fields. You can also use the RDD to open the various "definition" files from VFP such as projects, forms and reports. The RDD 'knows' about the different extensions for indexes and memos. You can also open DBC files as normal tables. In a future version we will support the VFP database functionality.
  • +
    + Visual Studio Integration + +
  • You can now specify that multi line statements should indent on the 2nd and subsequent lines.
  • +
  • Type lookup for functions inside a BEGIN NAMESPACE .. END NAMESPACE did not include the types in this namespace.
  • +
  • Started intellisense for INLINE methods in the Xbase++ dialect
  • +
  • Fixed several problems in intellisense
  • +
  • Improved intellisense for VAR keywords declared in a FOREACH loop
  • +
  • Several other (smaller) improvements.
  • +
    + Tools + +
  • VOXporter now writes DEFINES in the RC files and no longer literal values.
  • +
  • VOXporter: fix for module names with invalid chars for filenames
  • +
    + + + + Changes in 2.0.1.0 (Bandol RC 1) + Compiler + +
  • Added support for the so called IF Pattern Expression syntax, which consists of an IS test and an assignment to a variable, prefixed with the VAR keyword:
    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ENDIF

    The variable oFoo introduced in the expression will only be visible inside the IF statement.
    Of course you can also use the pattern on other places, such as ELSEIF blocks, CASE statements, WHILE expressions etc:

    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ELSEIF x is Bar VAR oBar
      ? oBar:DoSomethingElse()
    ENDIF
  • +
  • Fixed a problem with method modifiers and generic methods
  • +
  • Fixed a problem with partial classes with different casing and destructors
  • +
  • Fixed a problem with Interfaces and methods with CLIPPER calling convention
  • +
  • The compiler now generates an error (9077) when an ACCESS or ASSIGN method has Type Parameters and/or Constraint clauses
  • +
  • Fixed a problem with DEFINEs with specific binary numeric values. Also overflow checking is now always of when calculating the result of numeric operations for the values of a DEFINE.
  • +
  • When a constant value was added or subtracted to a numeric value < 32 bits then the result was seen as 32 bits by the compiler. This sometimes forced you to use casts in your code. With this change that cast is no longer necessary.
  • +
  • The compiler allowed you to concatenate non string values and strings and was automatically calling ToString() on the non strings. This is no longer possible. The compiler now generates an error (9078)when it detects this.
  • +
  • We have added error trapping code to the compiler that should route internal errors to compiler error XS9999. If you see such an error, please let us know.
  • +
  • DIM arrays of literal strings are now initialized properly.
  • +
  • There was a problem when switching between dialects when using the shared compiler. It would sometimes no longer detect dialect specific keywords. This has been fixed.
  • +
  • Fixed a problem where incorrect code was producing an error "Failure to emit assembly"
  • +
  • Fixed a problem in code that uses _CAST to cast a 32 bits value to 16 bits
  • +
  • Fixed a problem with overloaded indexed properties where the index parameter in a subclass has a different type than the index parameter in the super class.
  • +
  • Changed implementation of several aliased operations (ALIAS->FIELD and (ALIAS)->(Expression))
  • +
  • Changed preprocessor handling of extended strings ( (<token>) )
  • +
  • The Roslyn code was not marking some variables as 'assigned but not read' to be compatible with the old C# compiler. We are now flagging these assignments with a warning. This may produce a lot of warnings in your code that were not detected before.
    To support this we have received some requests to "open up" the support for 1 based indexes in the compiler. In the past the compiler would only allow 1 based indexing for variables of type System.Array or of the XBase ARRAY Type.
    We have now added a couple of interfaces to the runtime. If your type implements one of these interfaces then the compiler will recognize this and allow you to use 1 based indexes in your code and then the compiler will automatically subtract 1 from the numeric index parameter. The XSharp ARRAY type and ARRAY OF type now also implement (one of) these interfaces/
    The interfaces are:
       INTERFACE IIndexer
           PUBLIC PROPERTY SELF[index PARAMS INT[]] AS USUAL GET SET
       END INTERFACE

       INTERFACE IIndexedProperties
           PROPERTY SELF[index AS INT   ] AS USUAL GET SET
           PROPERTY SELF[name  AS STRING] AS USUAL GET SET
       END INTERFACE
      INTERFACE INamedIndexer
         PUBLIC PROPERTY SELF[index AS INT, name AS STRING] AS USUAL GET SET
      END INTERFACE
  • +
    + Runtime + +
  • Fixed some problems in the OrderInfo() function
  • +
  • Fixed several problems with DB..() functions in the runtime
  • +
  • Fixed several problems with the macro compiler
  • +
  • Fixed a problem with the handling of default parameters in late bound calls to methods
  • +
  • Improved error messages for missing methods and/or properties in late bound code.
  • +
  • The Select() function was changing the current workarea. This has been fixed.
  • +
  • Converting a USUAL to a STRING was not throwing the same exceptions as VO. It was always calling ToString() on the USUAL. Now the behavior is the same as in VO.
  • +
  • F_ERROR has been defined as a PTR now and no longer as numeric
  • +
  • CreateInstance can now also find classes defined in namespaces
  • +
  • Fix problems with missing parameters in late bound code. Also added (limited) support for calling overloaded methods and constructors in late bound code.
  • +
  • Fixed problems with TransForm(), and several of the Str() functions.
  • +
  • XSharp.Core is now fully compiled as Safe code.
  • +
  • Fixed a problem with late bound assigns and access
  • +
  • NIL<-> STRING comparisons are now compatible with Visual Objects
  • +
  • Fixed problem with AEval() and missing parameters
  • +
  • Added Set() function. Please be careful when using header files for _SET defines. There are subtle differences between the definitions in Harbour, Xbase++ and VO/Vulcan.
    We recommend NOT to use the defines from the header file but to use the defines that are defined inside the X# runtime DLLs
  • +
  • Changed implementation of the functions used by the compiler for Aliased operations
  • +
    + RDD system + +
  • Added support for DBF character fields up to 64K.
  • +
  • Implemented the DBFCDX RDD
  • +
  • Fixed several problems related to the DBFNTX RDD
  • +
  • The DBF RDD was using the incorrect locking scheme for Ansi DBF files. It now uses the same scheme as VO and Vulcan.
  • +
  • Macro compiled index expressions are not of the type _CodeBlock and not of the type RuntimeCodeBlock (the RuntimeCodeblock is encapsulated inside the _CodeBlock object).
    That prevents problems when storing these expressions inside a USUAL
  • +
    + Visual Studio integration + +
  • Fixed an exception that could occur when typing a VAR expression
  • +
  • When the project system makes a backup of a project file, we are now making sure that Readonly flags are cleared before writing to or deleting existing files.
  • +
  • Reading intellisense data from C++ projects could send the intellisense engine into an infinite loop. This has been fixed.
  • +
  • The changes to the Form.Designer.prg are now written to disk immediately, to make sure that changes to the form are recompiled if you press 'Run' or 'Debug' from the window of the form editor
  • +
  • Improved support for intellisense for the VAR keyword.
  • +
  • Added support for FoxPro on the Project Properties page to prepare for the Compiler and Runtime changes for FoxPro.
  • +
  • .CH files are now also recognized as "X#" files in Visual Studio.
  • +
  • You can now control the characters that select an entry from a Completion List. For example the DOT and COLON now also select the current selected element. The complete list can be found on the Tools-Options-TextEditor-XSharp-Intellisense page.
  • +
  • Assemblies added to a project would not be properly resolved until the next time the project was loaded. This has been fixed.
  • +
  • Fixed a problem in the codedom parser which feeds the windows form editor. You can now inherit a form from another form in the same assembly. You will have to compile the project first (of course).
  • +
  • The .CH extension is now also registered as relevant for the X# project system.
  • +
  • Changed auto indentation for #ifdef commands
  • +
  • Fixed an exception that could occur during loading of project files with COM references.
  • +
  • Added templates for class libraries in XPP and VO Dialect
  • +
  • Sometimes a type lookup for intellisense was triggered inside a comments region. This has been fixed.
  • +
    + Tools + +
  • VOXPorter was not removing calling conventions when creating delegates. This has been fixed
  • +
  • VOXporter was sometimes generating project files with many duplicates of resource items. This has been fixed.
  • +
  • VOXporter now marks prefix identifiers that conflict with one of the new keywords with "@@"
  • +
  • The delay for the VOXporter welcome screen has been shortened.
  • +
    + + + Changes in 2.0.0.9 (Bandol Beta 9) + Compiler + +
  • The Lexer (the part of the compiler that recognizes keywords, literals etc) has been rewritten and is slightly faster.
  • +
  • The compiler now supports digit separators for numeric literals. So you can now write 1 million as:
    1_000_000
  • +
    + +
  • Fixed problem where static local variables were not initialized with "" even when compiler option -vo2 was selected
  • +
  • #ifdef commands using preprocessor macros such as __XSHARP_RT__ were not working correctly.
  • +
  • The Xbase++ dialect now also supports the 'normal' class syntax.
  • +
  • We had changed the 'Entrypoint' algorithm in Beta 8. This has been restored now and the -main command line option now works again as well. In stead the "body" of the Start method is now encapsulated in an anonymous function.
  • +
    + +
  • Duplicate include files no longer produce an error but a warning
  • +
  • Fix for problem with default parameter values with 'L' or 'U' suffix
  • +
  • Added compiler error when specifying default parameter values for methods/functions with clipper calling convention
  • +
  • DIM arrays of STRING were not initialized with "" when /vo2 was specified. This has been fixed.
  • +
  • Added support for Dbase style memory variables (MEMVAR, PUBLIC, PRIVATE, PARAMETERS). See the MEMVAR topic in the help file for more information. This is only available for certain dialects and also requires the /memvar commandline option
  • +
  • Added support for undeclared variables (this is NOT recommended!). This is only available for certain dialects and requires the /memvar AND the /undeclared commandline options
  • +
  • Fixed a problem for comparisons between USUAL variables and STRING variables
  • +
  • Fixed a problem with partial classes where the classname had different casing in the various declarations
  • +
  • Fixed a problem with numeric default parameters with L or U suffixes
  • +
  • Fixed a problem with line continuation semi colons followed by a single line comment with the multiline comments style.
  • +
  • Fixed a problem with methods containing YIELD statements in combination with compiler option /vo9
  • +
  • When a visibility modifier was missing on a generic method then this method was created as a private method. This has been fixed.
  • +
  • When choosing between overloaded functions in XSharp.RT and XSharp.Core the function in the XSharp.RT assembly would sometimes be chosen although the overload in XSharp.Core was better
  • +
  • CASE statements without CASE block but only a OTHERWISE block would crash the compiler. This has been fixed and an warning about an empty CASE statement has been added.
  • +
    + Runtime + +
  • Several changes to the Macro compiler, such as the parsing of Hex literals, case sensitivity of parameters (they are no longer case sensitive) and limited support for function overloading.
  • +
  • Several missing functions have been added, such as _Quit(),
  • +
  • The return value of several Ord..() functions was incorrect. This has been fixed.
  • +
  • Fixed a problem with CurDir() for the root directory of a drive
  • +
  • Fixed a problem with calling Send() with a single parameter with the value NULL_OBJECT.
  • +
  • Solved problem with incorrect parameters for DiskFree() and DiskSpace()
  • +
  • MemoRead() and MemoWrit() and FRead..() and FWrite..() now respect the SetAnsi() setting like the functions in the VO Runtime.
  • +
  • We have added 2 new functions to read/write binary files: MemoReadBinary() and MemoWritBinary()
  • +
  • Not all DBOI_ enum values had the same value as in Vulcan. This has been solved.
  • +
  • SetDecimalSep() and SetThousandSep() now also set the numeric separators in the current culture.
  • +
  • The USUAL -> STRING conversion now calls AsString()
  • +
    + +
  • Added support for Dbase style dynamic memory variables (MEMVAR, PUBLIC, PRIVATE, PARAMETERS). See the Memory Variables topic in the help file for more information.
  • +
  • The IsDate() function now also returns TRUE for USUALs of type DateTIme. There is also a separate IsDateTime() function. We have also added IsFractional() (FLOAT or DECIMAL) and IsInteger (LONG or INT64) and IsInt64()
  • +
  • Added missing Cargo slot to the Error class. Also improved Error:ToString()
  • +
  • Fix for problem in W2String()
  • +
  • And many more small changes.
  • +
    + Visual Studio Integration + +
  • We have added a new tab page in the Project Properties dialog: Dialect. This contains dialect specific language options.
  • +
  • 2 options from the Build options page (which is configuration dependent) have been moved to the Language page (which is build INdepedent), because that makes more sense:
  • + +
  • Include Path
  • +
  • NoStdDef
  • +
    +
    + +
  • We have also added a project property on the Language page to specify an alternative standard header file (in stead of XSharpDefs.xh)
  • +
  • The XSharp.__Array type was shown in the intellisense with the wrong name
  • +
  • We have added entries on the Project Properties dialog pages to enable MEMVAR support and to enable Undeclared variables
  • +
  • Fixed a problem in the CodeDom provider (used by the Windows Form editor) where fields with array types were losing their array brackets when writing back to the source.
  • +
  • When writing changes from the windows form editor we are no longer writing to disk but to the opened (sometimes invisible) windows of the .designer.prg. This should prevent warning messages about the .designer.prg file that was changed outside Visual Studio
  • +
  • Fixed a problem parsing source code where identifier names were starting with '@@'
  • +
  • The Debugger was showing UINT64 as typename for ARRAYs. This has been fixed.
  • +
  • Renaming forms in the Windows Forms editor was not working for forms with a separate .designer.prg. This has been fixed.
  • +
  • Fixed a (very old) problem where the OutPutPath property in the xsproj file was sometimes set to $(OutputPath).
  • +
  • Fixed an exception in the editor for empty source files or header files.
  • +
  • Fixed an exception when the error list was created for errors without errorcode
  • +
  • Commenting a single line in the editor will now always use the // comment format
  • +
    + Tools + +
  • No changes in this release.
  • +
    + + + Changes in 2.0.0.8 (Bandol Beta 8) + Compiler + +
  • The compiler source code has been upgraded to Roslyn 2.10 (C# 7.3). As a result of that there are some new compiler options, such as /refout and we also support the combination of the "PRIVATE PROTECTED" modifier that defines a type member as accessible for subclasses in the same assembly but not for subclasses in other assemblies
  • +
  • We have added support for Xbase++ class declarations. See the Xbase++ class declaration topic for more information about the syntax and what is supported and what not.
  • +
  • We have added support for simple macros with the &Identifier syntax
  • +
  • We have added support for late bound property access:
  • + +
  • The <Expression>:&<Identifier> syntax.
    This translates to IVarGet(<Expression>, <Identifier>).
  • +
  • The <Expression>:&(<Expression2>) syntax.
    This translates to IVarGet(<Expression>, <Expression2>).
  • +
  • Both of these can also be used for assignments and will be translated to IVarPut:
    <Expression>:&<Identifier> := <Value>
    This becomes IVarPut(<Expression>, <Identifier>, <Value>)
  • +
  • All of these will work even when Late Binding is not enabled.
  • +
    +
    + +
  • We have added a new compiler options /stddefs that allows you to change the standard header file (which defaults to XSharpDefs.xh)
  • +
  • We have added a new preprocessor Match marker <#idMarker> which matches a single token (all characters until the first whitespace character)
  • +
  • When you select a dialect now, then the compiler will automatically add some compiler macros. The VO dialect declares the macro __VO__, the Vulcan dialect declares the macro __VULCAN__ the harbour dialect declares the macro __HARBOUR__ and the Xbase++ dialect declares the macro __XPP__.
  • +
  • When compiling against the X# runtime then also the macro __XSHARP_RT__ will be defined.
  • +
  • We have added a new warning when you pass a parameter without 'ref' modifier (or @ prefix) to a method or function that expects a parameter by reference or an out parameter.
  • +
  • We have also added a warning that will be shown when you assign a value from a larger integral type into a smaller integral type to warn you about possible overflow problems.
  • +
    + Runtime + +
  • This build includes a new faster macro compiler. It should be fully compatible with the VO macro compiler. Some of the .Net features are not available yet in the macro compiler.
  • +
  • We moved most of the generic XBase code to XSharp.RT.DLL. XSharp.VO.DLL now only has VO specific code. We have also added XSharp.XPP.DLL for XPP
  • +
  • Fix Ansi2OEM problem with FRead3(), FWrite3() and FReadStr
  • +
  • Added  missing functions EnableLBOptimizations() and property Array:Count
  • +
  • Fixed problem with latebound assign with CodeBlock values
  • +
  • Fixed problem with AScan() and AEval() with missing parameters
  • +
  • Changed error return codes for DirChange(), DirMake() and DirRemove()
  • +
  • Send() was "swallowing" errors. This has been fixed
  • +
  • Fixed a problem with assigning to multi dimensional arrays
  • +
  • Fixed a problem with creating objects with CreateInstance() where objects are not in the "global" namespace
  • +
  • Fixed several problems in the RDD system and support functions.
  • +
  • Fixed several problems in the late binding support, such as IsMethod, IsAccess, IVarPut, IVarPutSelf etc.
  • +
  • Fixed several problems with TransForm()
  • +
  • Integer divisions for usuals containing integers now return either integers or else fractional numbers depending on the compiler setting of the main app.
  • +
  • We fixed several conversions problems during late bound calls
  • +
  • We have fixed several problems with the Val() and Str() functions.
  • +
  • The internal type names for DATE and FLOAT have been changed to __Date and __Float. If you rely on these type names please check your code !
  • +
  • DebOut32 was not outputting data to the debug terminal if the runtime was compiled in release mode. This has been fixed.
  • +
    + Visual Studio Integration + +
  • Fixed filtering on 'current project' in the error list
  • +
  • Type lookup for local variables was sometimes failing. This has been fixed
  • +
  • Fixed a problem with Brace Matching that could cause an exception in VS
  • +
  • Fixed a problem with Tooltips that could cause an exception in VS
  • +
  • Fixed a problem with uncommenting that could cause an exception in VS
  • +
  • New references added in VS would not always be included in the type search in the editor. This has been fixed.
  • +
  • Member prototypes for constructors now include the type name and curly braces
  • +
  • We have started work on improved code completion for variables declared with VAR
  • +
  • We have started with support for code completion for members of Generic types. This is not finished yet.
  • +
  • PRG files that are not part of a X# project and not part of a Vulcan project are now also colorized in the editor.
  • +
    + Tools + +
  • VulcanXPorter was always adjusting the referenced VO libraries and  was ignoring the "Use X# Runtime" checkbox
  • +
  • VOXPorter now has an option to copy the resources referenced in the AEF files to the Resources subfolder in the project
  • +
  • VOXPorter now also copies the cavowed, cavofed and cavoded template files to the properties folders in your project.
  • +
    + + + Changes in 2.0.0.7 (Bandol Beta 7) + Compiler + +
  • When calling a runtime function with a USUAL parameter the compiler now automatically prefers methods or functions with "traditional' VO types over the ones with enhanced .Net types. For example when there are 2 overloads, one that takes a byte[] and another that takes a string, then the overload that takes a string will get preference over the overload that takes a byte[].
  • +
  • Resolved a problem with .NOT. expressions inside IIF() expressions
  • +
  • Improved debugger break point generation for Invoke expressions ( like String.Compare())
  • +
  • Fixed a pre-processor error for parameters for macros defined in a #define. These parameters must have the right case now. Parameters with a different case will not be resolved any longer.
  • +
  • Fixed a pre-processor error where optional match patterns in pre-processor rules were repeated. This is too complicated to explain here in detail <g>.
  • +
  • The code generated by the compiler for Array operations now uses the new interfaces declared in the X# runtime (see below).
  • +
    + Runtime + +
  • We have added several missing functions, such as _GetCmdLine, Oem2AnsiA() and XSharpLoadLibrary
  • +
  • Fixed problems in CreateInstance, IVarGet, IVarPut(), CtoDAnsi() and more.
  • +
  • Added VO Compatible overload for FRead4()
  • +
  • No longer (cathed) exceptions are produced for empty dates
  • +
  • Ferror() was not always return the error of a file operation. This has been fixed
  • +
  • We have added a new FException() function that returns the last exception that occurred for a low level file operation
  • +
  • Casting a usual containing a PTR to a LONG or DWORD is now supported
  • +
  • Some new interfaces have been added related to array handling. The compiler no longer inserts a cast to Array inside the code, but inserts a cast to one of these interfaces depending on the type of the index parameter. The USUAL type implements IIndexer and IIndexProperties and dispatches the call to the objects inside the usual when this objects exposes the interface. This is used for indexed access of properties when using AEval or AScan on an ARRAY OF <type>
  • + +
  • XSharp.IIndexer
  • +
  • XSharp.INamedIndexer
  • +
  • XSharp.IIndexedProperties
  • +
    +
    + SDK Classes + +
  • We have added the Hybrid UI classes from Paul Piko (with permission from Paul)
  • +
    + Tools + +
  • The Vulcan XPorter now also has an option to replace the runtime and SDK references with references to the X# runtime
  • +
    + + + Changes in 2.0.0.6 (Bandol Beta 6) + Compiler + +
  • The compiler was sometimes still generating warnings for unused variables generated by the compiler. This has been fixed.
  • +
  • The compiler will now produce a warning that #pragmas are not supported yet (9006)
  • +
  • Added compiler macro __FUNCTION__ that returns the current function/method name in original casing.
  • +
  • Literal sub arrays for multidimensional arrays no longer need a type prefix when compiling in the Core dialect
  • +
  • Fixed problem with the Global class name that would happen when building the runtime assemblies (these have a special convention for the global class names)
  • +
  • When the calling convention of a method in an interface is different from the calling convention of the implementation (CLIPPER vs Not CLIPPER) then a new error (9067) will be generated by the compiler.
  • +
  • The calling convention for _DLL functions and procedures is now optional and defaults to PASCAL (stdcall)
  • +
  • The namespace alias for using statements was not working in all cases.
  • +
  • The compiler will now generate an error for code that incorrectly uses the VIRTUAL and OVERRIDE modifiers.
  • +
  • The compiler was throwing an exception for a specific kind of incorrect local variable initializer with generic arguments. This has been fixed.
  • +
  • Visibility modifiers on GET or SET accessors for properties were not working correctly (INTERNAL, PRIVATE etc). This has been fixed.
  • +
  • The compiler now handles PSZ(_CAST,...) and PSZ(..) differently. When the argument is a literal string, then the PSZ will only be allocated once and stored in a "PSZ Table" in your assembly. The lifetime of this PSZ is then the lifetime of your app. When this happens then the new compiler warning XS9068 will be shown.
    When the argument is a string stored in a local or global (or define) then the compiler can't know the lifetime of the PSZ. It will therefore allocate the memory for the PSZ with the StringAlloc() function. This ensures that the PSZ will not go out of scope and be freed. If you use this a lot in your application then you may be repeatedly allocating memory. We recommend that you avoid the use of the cast and conversion operators for PSZs and take control of the lifetime of the PSZ variables by allocating and freeing the PSZ manually. PSZ casts on non strings (numerics or pointers) simply call the PSZ constructor that takes an intptr (this is used on several spots in the Win32API library for 'special' PSZ values).
  • +
  • Named arguments are now also supported in the Vulcan dialect. This may lead to compiler errors if your code looks like the code below, because the compiler will think that aValue is a named argument of the Empty() function.

    IF Empty(aValue := SomeExpression())
  • +
  • If you were inheriting a static class from another class then you would get a compiler warning before. This is now a compiler error, because this had a side effect where the resulting assembly contained a corrupted reference.
  • +
  • The overload resolution code now chooses a type method/function over a method/function with clipper calling convention.
  • +
  • The Xbase++ dialect is now recognized by the compiler. For the time being it behaves the same as Harbour. We have also added the compiler macro __DIALECT_XBASEPP__ that will be automatically define to TRUE when compiling in Xbase++ mode.
  • +
  • Fixed a problem in the PDB line number generation that would cause incorrect line numbers in the debugger
  • +
    + Visual Studio integration + +
  • The source code editor was not always showing the correct 'active' region for #defines defined in #include files.
  • +
  • Opening a source file without entities (e.g. a header file) could result in an error message inside VS.
  • +
  • Fixed a null reference exception in the editor
  • +
  • Fixed a problem when un-commenting code in the editor
  • +
  • Improved load time performance for large solutions with many dependencies.
  • +
  • Fixed a problem where the intellisense engine could lock a DLL that was used by a project reference or assembly reference.
  • +
  • Fixed a problem where missing references (for example COM references that were not installed on the developers machine) could cause problems with the type lookup when opening forms in the windows forms editor.
  • +
  • Added an option to select the Harbour dialect on the project properties page.
  • +
    + The Build System + +
  • The Build system did not recognize that begin NAMESPACE lines in source code were commented out. This has been fixed.
  • +
    + VOXporter + +
  • We have added an option to sort the entities in alphabetical order in the output file.
  • +
  • We have added an option so you can choose to add the X# Runtime as reference to your application (otherwise the Vulcan runtime is used)
  • +
    + Runtime + +
  • The SetCentury setting was incorrect after calling SetInternational(#Windows). This has been fixed.
  • +
  • The Descend function for dates now returns a number just like in VO
  • +
  • The functions ChrA and AscA have been renamed to Chr() and Asc() and the original functions Chr() and Asc() have been removed. The original functions were using the DOS (Oem) codepage and this is not compatible with Visual Objects.
  • +
  • On several places in the runtime characters were converted from 8 bit to 16 bit using the System.Encoding.Default codepage. This has been changed. We use the codepage that matches the WinCodePage in the Runtimestate now. So by setting the Windows codepage in the runtime state you now also control the conversions from Unicode to Ansi and back
  • +
  • The Oem2Ansi conversion was incorrect for some low level file functions.
  • +
  • We have changed several things in the Late Binding support
  • +
  • All String - PSZ routines (String2PSz(), StringAlloc() etc) now use the Windows Codepage to convert the unicode strings to ansi.
  • +
  • If you library is compiled with 'Compatible String comparisons' but the main app isn't, then the string comparisons in the library will follow the same rules as the main app because the main app registers the /vo13  setting with the runtime. The "compatible" stringcomparison routines in the runtime now detect that the main app does not want to do VO compatible string comparisons and will simply call the normal .Net comparison routines.
    We therefore recommend that 3rd party products always use the Compatible String comparisons in their code.
  • +
    + +
  • Preliminary documentation for the runtime was generated from source code comments and has been included as chapter in this documentation.
  • +
    + The VO SDK + +
  • This build includes the first version of the VO SDK compiled against the X# runtime. We have included the following class libraries
  • + +
  • Win32API
  • +
  • System Classes
  • +
  • RDD Classes
  • +
  • SQL Classes
  • +
  • GUI Classes
  • +
  • Internet Classes
  • +
  • Console Classes
  • +
  • Report Classes
  • +
    +
    + +
  • All assemblies are named VO<Name>.DLL and the classes in these assemblies are in the VO namespace.
  • +
  • This SDK is based on the VO 2.8 SP3 source code. The differences between VO 2.8 SP3 and VO 2.8 SP4 will be merged in the source later,
  • +
  • The Libraries for OLE, OleServer and Internet Server are not included. The OleAutoObject class and its support classes is included in the XSharp.VO library. OleControl and OleObject are not included.
  • +
  • Preliminary documentation for these classes was generated from source code comments and has been included as chapter in this documentation.
  • +
    + The RDD system + +
  • This build includes the first version of the RDD system. DBF-DBT is ready now. Other RDDs will follow in the next builds. Also most of the RDD related functions are working in this build.
  • +
  • This build also includes the first version of the Advantage RDD. With this RDD you can access DBF/DBT/NTX files , DBF/FPT/CDX files and ADT/ADM/ADI files. The RDD names are the same as the RDD names for Vulcan. (AXDBFCDX, AXDBFNTX, ADSADT). We also support the AXDBFVFP format and the AXSQLCDX, AXSQLNTX, AXSQLVFP. For more information about the differences and possibilities of these RDD look in the Advantage documentation.
    We have coded the Advantage RDD on top of the Advantage Client Engine. Our RDD system detects if you are running in x86 or x64 mode and calls functions in Ace32 or Ace64 accordingly.
    To use Advantage you copy the support DLLs from an Advantage Vulcan RDD to the folder of your application. Look at the Advantage docs for Vulcan to see the list of the DLLs. The Advantage RDD is part of the standard XSharp.RDD.DLL which therefore replaces the AdvantageRDD.Dll for Vulcan.
  • +
  • The XSharp.Core DLL now also has RDD support. We have chosen NOT to implement this in functions, but as static methods inside the CoreDb class. Old code that uses the VoDb..() functions can be simply ported by changing "VoDb" to "CoreDb."
    The parameters and return values that are USUAL in VO and Vulcan are implemented as OBJECT in the CoreDb class.
    The ..Info() methods have 2 overloads. One that takes an Object and one that takes a reference to an object.
    The methods inside CoreDb return success or failure with a logical value like the VODB..() functions in VO. If you want to know what the error was during the last operation then you can access that with the method CoreDb._ErrInfoPtr() . This returns the last exception that occurred in a RDD operation.
  • +
  • At this moment the CoreDb class only has a FieldGet() that returns an object. We will add some extra methods that return values in a specified type in the next build (such as FieldGetString(), FieldGetBytes() etc). We will also add overloads for FieldPut() that take different parameter types.
  • +
  • The XSharp.VO DLL has the VoDb..() functions and the higher level functions such as DbAppend(), EOF(), DbSkip() etc.
    The VoDb..() functions return success or failure with a logical value. If you want to know what the error was during the last operation then you can access that with the method _VoDbErrInfoPtr() . This returns the last exception that occurred in a RDD operation.
  • +
  • You can mix calls to the VoDb..() functions and CoreDb...() methods. Under the hood the VoDb..() functions also call the CoreDb methods.
  • +
  • The higher level functions may throw an exception just like in VO. For example when you call them on a workarea where no table is opened. Some functions simply return an empty value (like Dbf(), Recno()). Others will throw an exception. When you have registered an error handler with ErrorBlock() then this error handler will be called with the error object. Otherwise the system will throw an exception.
  • +
  • Date values are returned by the RDD system in a DbDate structure, Float values are returned in a DbFloat structure. These structures have no implicit conversion methods. They do however implement IDate and IFloat and they can and will be converted to the Date and Float types when they are stored in a USUAL inside the XSharp.VO DLL. The DbDate structure is simply a combination of a year, month and date. The DbFloat structure holds the value of fields in a Real8, combined with length and the number of decimals.
  • +
  • More documentation about the RDD system will follow later. Of course you can also look at the help file and source code on GitHub.
  • +
    + + Changes in 2.0.0.5 (Bandol Beta 5) + Compiler + +
  • The strong named key for assemblies with native resources was invalid. This has been fixed
  • +
  • When an include file was included twice for the same source (PRG) file then a large number of compiler warnings for duplicate #defines would be generated. Especially when the Vulcan VOWin32APILibrary.vh was included twice then over 15000 compiler warnings would be generated per source file where this happened. This large number of warnings could lead to excessive memory usage by the compiler. We are now outputting a compilation error when we detect that the same file was included twice. We have also added a limit of 500 preprocessor errors per source (PRG) file.
  • +
  • A change in Beta 4 could result in compiler warnings about unused variables that were introduced automatically by the X# compiler. This warning will no longer be generated.
  • +
  • The compiler now correctly stores some compiler options in the runtime state of XSharp.
  • +
    + Runtime + +
  • Fixed a problem in the Ansi2OEM and OEM2Ansi functions.
  • +
  • Fixed a problem in the sorting for SetCollation(#Windows)
  • +
  • Fixed a problem with string comparisons in runtime functions like ASort(). This now also respects the new runtime property CompilerOptionVO13 to control the sorting
  • +
    + Visual Studio integration + +
  • The sorting of the members in the editor dropdown for members was on methodname and propertyname and did not include the typename. When a source file contained more than one type then the members would be mixed in the members dropdown
  • +
    + Build System + +
  • The default value for VO15 has been changed back from false to undefined.
  • +
    + + + Changes in 2.0.0.4 (Bandol Beta 4) + Compiler + +
  • POSSIBLY BREAKING CHANGE: Functions now always take precedence over same named methods. If you want to call a method inside the same class you need to either prefix it with the typename (for static methods) or with the SELF: prefix. If there is no conflicting function name then you can still call the method with just its name. We recommend to prefix the method calls to make your code easier to read.
  • +
  • The compiler was accepting just an identifier without a INSTANCE, EXPORT or other prefix and without a type inside a class declaration. It would create a public field of type USUAL. That is no longer possible.
  • +
  • Improved the positional keyword detection algorithm (this also affects the source code editor)
  • +
  • The || operator now maps to the logical or  (a .OR. b) and not to the binary or (_OR(a,b))
  • +
  • The VAR statement now also correctly parses

    VAR x = SomeFunction()
  • +
    + And will compile this with a warning that you should use the assignment operator (:=). + We have added this because many people (including we) copy examples from VB and C# where the operator is a single equals token. + +
  • Error messages about conflicting types now include the fully qualified type name.
  • +
  • The compiler no longer includes the width for literal Floats. This is compatible with VO.
  • +
  • A Default parameter of type Enum is now allowed.
  • +
    + Runtime + +
  • Added several functions that were missing, such as __Str() and DoEvents()
  • +
  • Fixed a problem in the macro compiler with non-english culctures.
  • +
  • Added several overloads for Is..() functions that take a PSZ instead of a string, such as IsAlpha() and IsUpper().
  • +
  • Added some missing error defines, such as E_DEFAULT and E_RETRY.
  • +
  • Fix for a problem with SubStr() and a negative argument
  • +
  • Fix for a problem with IsInstanceOf()
  • +
  • Fix for a problem with Val() and a hex value with an embedded 'E' character
  • +
  • Added implicit conversions from ARRAY to OBJECT[] and back.
  • +
  • Several changes to the code for Transform() and Unformat() to cover several exotic picture formats
  • +
  • Changes to the code for SetCentury() to automatically also adjust the date format (SetDateFormat())
  • +
  • Fixes for the Str() family of functions in combination with SetFixed() and SetDigitFixed().
  • +
    + Visual Studio integration + +
  • Fixed a problem when building projects in the latest build of Visual Studio
  • +
  • Several 'keywords' were not case synchronized before, such as TRUE, FALSE, NULL_STRING etc,
  • +
  • Keywords are not case synchronized on the current line as long as the user has the cursor on them or immediately after them. That means that when you type String and want to continue to change it to StringComparer then the formatter will no longer kick in and change "String" to the keyword case before you have the chance to complete the word.
  • +
  • The Control Order dialog inside the form editor was not saving its changes.
  • +
  • Added an option to include all entities from the editor, or just the members from the current selected type in the right dropdown of the editor
  • +
  • The editor was also matching braces inside literal strings and comments. This has been fixed.
  • +
  • Fixed a problem with the CodeDom parser where extended strings (strings containing CRLF tokens or other special tokens) were parsed incorrectly. This resulted in problems in the windows forms editor.
  • +
  • The member resolution code in the editor was not following the same logic as the compiler: When a function and a method with the same name exist it was resolving to the method in stead of the function. This has been fixed.
  • +
  • Fixed a problem when debugging in X64 mode.
  • +
  • Fixed an exception when comparing source code files with SCC integration.
  • +
  • Fixed several problems w.r.t. the XAML editor:
  • + +
  • Code is now generated with STRICT calling convention to avoid problems when compiler option "Impliciting CLIPPER calling convention" is enabled
  • +
  • WPF and other templates now include STRICT calling convention for the same reason
  • +
  • The XAML editor could not properly load the current DLL or EXE and had therefore problems resolving namespaces and adding user controls to the tool palette. This has been fixed.
  • +
    +
    + +
  • We have added an option to the Tools/Editor/XSharp/Intellisense options that allow you to control how the member combobox in the editor works. You can choose to only show methods & properties of the current type or all entities in the right combobox. The left combobox always shows all types in the file.
  • +
  • Some of the project and item templates have been updated. Methods and constructors without parameters now have a STRICT calling convention. Also the compiler option /vo15 has been explicitly disabled in templates for the Core dialect.
  • +
    + + + Changes in 2.0.0.3 (Bandol Beta 3) + Compiler + +
  • When 2 method overloads have matching prototypes the compiler now prefers the non generic one over the generic one
  • +
  • Fixed an exception that could occur when compiling a single line of source code with a preprocessor command in it.
  • +
    + Runtime + +
  • Added Mod() function
  • +
  • Added ArrayNew() overload with no parameters
  • +
    + +
  • Fixed problem in __StringNotEquals() when length(RHS) > length(LHS) and SetExact() == FALSE
  • +
  • Added missing string resource for USUAL overflow errors
  • +
    + Visual Studio integration + +
  • Improved keyword case synchronization and indenting. Also a source file is 'Keyword Case' synchronized when opened.
  • +
  • Opening a source file by double clicking the find results window no longer opens a new window for the same source file
  • +
  • Improved type lookup speed for intellisense
  • +
  • Fixed a problem that would prevent type lookup for types in the same namespace
  • +
  • Fix for QuickInfo problem introduced in the latest Visual Studio 2017 builds
  • +
  • QuickInfo tips are no longer shown in the debugger where they were overlapping with debugger tooltips
  • +
  • The comboboxes with methods and functions in the editor window no longer shows parameter names and full type names. Now it shows the shortened type names for the parameters
  • +
  • These same comboboxes now show the file name for methods and properties defined in another source file
  • +
  • Fixed problem in the window editor with generating code for tab pages
  • +
    + Vulcan XPorter + +
  • Project dependencies defined in the solution file were not properly converted
  • +
    + VO XPorter + +
  • Fixed a problem where resource names were replaced with the value of a define
  • +
    + + + Changes in 2.0.0.2 (Bandol Beta 2) + Compiler + +
  • The compiler now transparently accepts both Int and Dword parameters for XBase Array indices
  • +
  • When the compiler finds a weakly typed function in XSharp.VO and a strongly typed version in XSharp.Core then it will choose the strongly typed version in XSharp.Core now.
  • +
  • In the VO and Vulcan dialect sometimes an (incorrect) warning 'duplicate usings' was displayed. This is now suppressed.
  • +
  • The debugger information for the Start function has been improved to avoid unnecessary step back to line 1 at the end of the code
  • +
  • The debugger break point information for BEGIN LOCK and BEGIN SCOPE has been improved
  • +
  • The debugger break point information for multi line properties has been improved
  • +
  • /vo6, /vo7 and /vo11 are now only supported in the VO/Vulcan dialect
  • +
    + Runtime + +
  • Removed DWORD overloads for Array indexers
  • +
  • Fixed overload problem for ErrString()
  • +
  • Fixed overload problem for _DebOut()
  • +
  • Fixed problems in DTOC() and Date:ToString()
  • +
  • Fixed ASort() incompatibilities with VO
  • +
  • Fixed memory blocks now get filled with 0xFF when they are released to help detect problems
  • +
    + Visual Studio + +
  • Fix 'Hang' in VS2017 when building
  • +
  • Fix 'Hang' in VS2017 when a tooltip (QuickInfo) was displayed
  • +
  • Fixed problem with debugging x64 apps
  • +
  • You can no longer rename or delete the Properties folder
  • +
  • Selecting 'Open' from the context menu on the the Properties folder now opens the project properties screen
  • +
  • Updated several icons in the Project Tree
  • +
  • Enhancements in the Goto Definition
  • +
    + Build System + +
  • Fix problem with CRLF in embedded resource commandline option
  • +
    + + + Changes in 2.0.0.1 (Bandol Beta 1) + Compiler + New features + +
  • Added support for ARRAY OF language construct. See the Runtime chapter  for more information about this.
  • +
  • Added support for the X# Runtime assemblies when compiling in the VO or Vulcan dialects.
  • +
  • Added support for the "Pseudo" function ARGCOUNT() that returns the # of declared parameters in a function/method compiled with clipper calling convention.
  • +
  • Added a new warning number for assigning values to a foreach local variable. Assigning to USING and FIXED locals will generate an error.
  • +
    + Optimizations + +
  • Optimized the code generation for Clipper calling convention functions/methods
  • +
  • The /cf and /norun compiler options are no longer supported
  • +
  • The preprocessor no longer strips white space. This should result in better error messages when compiling code that uses the preprocessor.
  • +
  • Some parser errors are now more descriptive
  • +
  • Changed the method that is used to determine if we compile against CLR2 or CLR4. The compiler checks at the location either system.dll or mscorlib.dll. When this location is in a path that contains "v2", "2.", "v3" or "3." then we assume we are compiling for CLR2. A path that contains "V4" or "4." is considered CLR4. The /clr commandline option for the compiler is NOT supported.
  • +
  • The preprocessor now generates an error when it detects recursive #include files.
  • +
    + Bug fixes + +
  • Fixed a problem when using the [CallerMemberAttribute] on parameters when compiling in Vulcan or VO Dialect
  • +
  • Abstract properties should no longer generate a warning about a body
  • +
  • You can now correctly use ENUM values as array indexes.
  • +
  • Fixed a problem for Properties with PUBLIC GET and PRIVATE SET accessors.
  • +
  • Fixed an issue where assigning an Interface to a USUAL required a cast to Object
  • +
  • Fixed an issue where IIF expressions with literal types were returning the wrong type (the L or U suffix was ignored)
  • +
  • Fixed an issue where the declaration LOCAL x[10] was not compiled correctly. This now compiles into a local VO Array with 10 elements.
  • +
    + Visual Studio Integration + +
  • Build 1.2.1 introduced a problem that could cause output files to be locked by the intellisense engine. This has been fixed
  • +
  • The editor parser had problems with nested types. This has been fixed
  • +
  • Enum members were not included in code completion for enums inside X# projects
  • +
  • Some improvements in the code reformatting
  • +
  • Added option on the Tools/Options for the editor to include keywords in the "All tokens" completion list
  • +
    + +
  • Fixed a problem where assemblies that could not be loaded to retrieve meta information would be retried 'for ever'
  • +
  • Fixed a problem with retrieving type information from assemblies that contained both managed and unmanaged code.
  • +
  • Added some properties for referenced assemblies to the IDE Properties window
  • +
  • Fixed a problem with assembly references and the Windows Forms editor, introduced in one of the latest Visual Studio 2017 updates
  • +
  • When enabling XML output on the Project Properties window an incorrect filename was shown for assemblies that contain a '.'in the assembly name.
  • +
  • The editor parser now has better support for parameters of type REF and OUT
  • +
  • Added support for 'Embed Interop Types' in the property windows for Assembly References and COM references
  • +
  • Fixed a problem where the codemodel was sometimes locking output DLLs for Project references
  • +
    + Build System + +
  • Fixed a problem with the naming of the XML documentation file.
  • +
    + Runtime + +
  • Added XSharp.Core.DLL, XSharp.VO.DLL and XSharp.Macrocompiler.DLL.
    Most runtime functions are implemented and supported. See the X# Runtime chapter for more information
  • +
    + VO XPorter + +
  • SDK related options have been removed. They will be moved to a new tool later.
  • +
    + + + +
    diff --git a/docs/Help/Topics/Who-is-the-X-team.xml b/docs/Help/Topics/Who-is-the-X-team.xml index c0ab21f630..9b2532dc0a 100644 --- a/docs/Help/Topics/Who-is-the-X-team.xml +++ b/docs/Help/Topics/Who-is-the-X-team.xml @@ -1,6 +1,6 @@  - + Who is who in the X# team
    @@ -11,7 +11,7 @@ They are in alphabetical order: - +
    + + + + + + + + + + + + + + + @@ -304,6 +313,9 @@ + + + diff --git a/docs/Help_ZH-CN/Topics/Bring-Your-Own-Runtime-BYOR.xml b/docs/Help_ZH-CN/Topics/Bring-Your-Own-Runtime-BYOR.xml index d755c0ae8b..400c5a7882 100644 --- a/docs/Help_ZH-CN/Topics/Bring-Your-Own-Runtime-BYOR.xml +++ b/docs/Help_ZH-CN/Topics/Bring-Your-Own-Runtime-BYOR.xml @@ -1,50 +1,12 @@  - + 自备运行时 (BYOR))
    自备运行时 (BYOR))
    -
    Name @@ -68,6 +68,20 @@ Support, tools, examples, tutorials, runtime
    + Irwin Rodriguez + + Spain + + irwin@xsharp.eu + + Spanish translation, FoxPro compatibility +
    Robert van der Hulst diff --git a/docs/Help/Topics/dialect_VO.xml b/docs/Help/Topics/dialect_VO.xml index ad3a2793de..20c7a8826b 100644 --- a/docs/Help/Topics/dialect_VO.xml +++ b/docs/Help/Topics/dialect_VO.xml @@ -1,6 +1,6 @@  - + Visual Objects && @@ -29,7 +29,7 @@
  • The preprocessor adds a define __VO__ with a value of TRUE.
  • Adds the VOSTRUCT and UNION entity types.
  • Uses the _WINBOOL type for logical values inside VOSTRUCT and UNION entities.
  • -
  • The indexer on PSZ types start with element 1.
  • +
  • The indexer on PSZ types start with element 1.
    PLEASE NOTE that this is different from the Vulcan Dialect!
  • Runtime diff --git a/docs/Help/Topics/dialect_Vulcan.xml b/docs/Help/Topics/dialect_Vulcan.xml index 9dff22c00a..4bfd7537cd 100644 --- a/docs/Help/Topics/dialect_Vulcan.xml +++ b/docs/Help/Topics/dialect_Vulcan.xml @@ -1,6 +1,6 @@  - + Vulcan '@' @@ -16,6 +16,15 @@ Vulcan This dialect shares the features of "All Non Core Dialects". + + + + + +
    + Please note that in XSharp 3 the Vulcan dialect is only supported with the XSharp Runtime DLLs.
    Support for "Bring Your Own Runtime" is no longer available
    Also the compiler no longer automatically reads the setting for the location for the Vulcan Include files from the registry.
    If you use these files you need to make sure that the location where the files are stored is included in your project settings.
    +
    + The compiler and runtime have the following "special" behavior when compiling for the "Vulcan" dialect: Compiler @@ -46,9 +55,8 @@
  • Uses the _WINBOOL type for logical values inside VOSTRUCT and UNION entities.
  • -
  • The indexer on PSZ types start with element 0.
  • +
  • The indexer on PSZ types start with element 0.
    PLEASE NOTE that this is different from the VO Dialect!
  • - Runtime
  • When running in Ansi more (SetAnsi(TRUE), which is the default), the DBF header for DBFNTX gets the Ansi bit set.
  • diff --git a/docs/Help/Topics/opt-ins.xml b/docs/Help/Topics/opt-ins.xml index e5470296be..41d74e26ff 100644 --- a/docs/Help/Topics/opt-ins.xml +++ b/docs/Help/Topics/opt-ins.xml @@ -1,6 +1,6 @@  - + -ins -ins @@ -13,12 +13,12 @@ Syntax -ins[+|-] Arguments - + | - Specifying +, or just -ins, directs the compiler to automatically include namespaces from assemblies marked with the ImplicitNameSpaceAttribute. + + | - Specifying +, or just -ins, directs the compiler to automatically include namespaces from assemblies marked with the VulcanImplicitNameSpaceAttribute. Remarks Class Libraries can be compiled with a special attribute: - [assembly: ImplicitNamespaceAttribute( "SomeNameSpace )] + [assembly: VulcanImplicitNamespaceAttribute( "SomeNameSpace )] This attribute tells the compiler that classes that are placed inside that namespace should be automatically included when searching for classes, as if there was a #using SomeNameSpace statement in the source code. diff --git a/docs/Help/XSHelp.hmxp b/docs/Help/XSHelp.hmxp index 9ce99f81f2..9081ea8345 100644 --- a/docs/Help/XSHelp.hmxp +++ b/docs/Help/XSHelp.hmxp @@ -160,8 +160,8 @@ XSharp XSharp BV © 2015- <%YEAR%> <%AUTHOR%> - 2 - 24 + 3 + 0 0 en-us ANSI_CHARSET @@ -731,10 +731,10 @@ XSharp BV - {"destlang":"DE","defapiglossary":"","glossarycount":"0"} + {"destlang":"ZH-HANS","writelang":"EN-US","defapiglossary":"","glossarycount":"0"} - Cahors (2.24.0.0) + Gaia (3.0.0.0) XSharp diff --git a/docs/Help/helpproject.xsd b/docs/Help/helpproject.xsd index 6b90a81cf3..9afae9d975 100644 --- a/docs/Help/helpproject.xsd +++ b/docs/Help/helpproject.xsd @@ -1080,6 +1080,7 @@ + diff --git a/docs/Help_Spanish/XSHelp.hmxp b/docs/Help_Spanish/XSHelp.hmxp index 6c054713dc..450f8f8f84 100644 --- a/docs/Help_Spanish/XSHelp.hmxp +++ b/docs/Help_Spanish/XSHelp.hmxp @@ -731,7 +731,7 @@ XSharp BV - {"destlang":"DE","defapiglossary":"","glossarycount":"0"} + {"sourcelang":"EN","destlang":"ZH-HANS","writelang":"EN-US","defapiglossary":"","glossarycount":"0"} Cahors (2.24.0.0) diff --git a/docs/Help_ZH-CN/Maps/table_of_contents.xml b/docs/Help_ZH-CN/Maps/table_of_contents.xml index 84f4c4936d..b641538b58 100644 --- a/docs/Help_ZH-CN/Maps/table_of_contents.xml +++ b/docs/Help_ZH-CN/Maps/table_of_contents.xml @@ -283,6 +283,15 @@
    版本历史XSharp 3 已知问题历史XSharp 2历史 XSharp 1 及更早版本 将应用程序从 VO 迁移到 X# X# 运行时(Runtime)金块套装 XSharp.Core
    - - - -
    - X# 运行时现已可用。我们不再需要针对 Vulcan 运行时进行编译!目前,我们仍然支持 Vulcan 运行时,但在 X# 的未来版本中可能会放弃这一支持。 -
    - - - 通过我们称之为 “自带运行时”(Bring Your Own Runtime),在 XSharp 的这一版本中提供了对 VO 和 Vulcan 的支持。 - - 如果你拥有 Vulcan 的许可证,你可以将 <Vulcan.NET BaseFolder>\Redist\4.0 文件夹中的 DLL 复制到你的解决方案中的文件夹。 - 然后在项目中添加所需的 DLL 引用。 - 如果使用 Vulcan 运行时编译 VO/Vulcan 方言,必须添加的动态链接库: - - -
  • VulcanRT.DLL
  • -
  • VulcanRTFuncs.DLL
  • -
    - - 这两个文件绝对不会添加到你的 Vulcan 项目中,Vulcan 会自动添加对这些 DLL 的引用。XSharp 不会这样做,所以你应该自己添加它们。 - 可能需要添加的动态链接库,这取决于您在应用程序中使用什么: - - -
  • VulcanVOSystemClasses.dll
  • -
  • VulcanVORDDClasses.dll
  • -
  • VulcanVOGUIClasses.dll
  • -
  • VulcanVOInternetClasses.dll
  • -
  • VulcanVOSQLClasses.dll
  • -
  • VulcanVOConsoleClasses.dll
  • -
  • VulcanVOWin32APILibrary.dll
  • -
    - - 您通常不会添加到项目中的 DLL(Vulcan Runtime 会自动处理这些 DLL)。 - -
  • VulcanRDD.DLL
  • -
  • VulcanMacroCompiler.DLL
  • -
  • VulcanDBFCDX.dll
  • -
  • VulcanDBFFPT.dll
  • -
    + XSharp 3 不再支持"自带运行时"功能。若需使用非核心方言进行编译,必须添加对 X# 运行时的引用。 + 您仍可在项目中引用 Vulcan 运行时 DLL,但这些程序集中的类型和函数将被视为普通 .Net 程序集处理。 diff --git a/docs/Help_ZH-CN/Topics/Installation.xml b/docs/Help_ZH-CN/Topics/Installation.xml index 95e79a2ef2..7dc01038fa 100644 --- a/docs/Help_ZH-CN/Topics/Installation.xml +++ b/docs/Help_ZH-CN/Topics/Installation.xml @@ -1,6 +1,6 @@  - + 安装 component @@ -14,7 +14,7 @@ 安装 XSharp 后,你会在计算机上发现以下文件夹。 - +
    @@ -166,10 +165,10 @@ Templates @@ -196,6 +195,17 @@ 包含数字 2015 的 cmd 文件用于集成到 VS 2015 中。数字 1-6 的 cmd 文件用于安装到不同版本的 VS 2017 和 VS 2019 中 + + + + + diff --git a/docs/Help_ZH-CN/Topics/Known-Issues-in-XSharp-3.xml b/docs/Help_ZH-CN/Topics/Known-Issues-in-XSharp-3.xml new file mode 100644 index 0000000000..2c9da97694 --- /dev/null +++ b/docs/Help_ZH-CN/Topics/Known-Issues-in-XSharp-3.xml @@ -0,0 +1,17 @@ + + + + XSharp 3 已知问题 + +
    + XSharp 3 已知问题 +
    + 已知问题 + +
  • 在SDK项目中重命名项目有时也会失败。
  • +
  • Visual Studio 目前尚未提供在项目文件级别声明全局使用项的对话框
  • +
  • 支持多目标项目(即具有TargetFrameworks属性的项目),但在Visual Studio中打开时仅会构建一个框架。项目系统会将节点重命名为XTargetFrameworks,并添加包含当前活动框架的TargetFramework属性。保存时该操作会被逆转,项目文件中会将最后选定的活动目标框架存储为ActiveTargetFramework,以便下次打开项目时恢复。
  • +
  • 我们偶尔发现,将单一目标项目从一个版本切换到另一个版本可能会导致 Visual Studio 挂起。
  • +
    + +
    diff --git a/docs/Help_ZH-CN/Topics/Nuget-Packages.xml b/docs/Help_ZH-CN/Topics/Nuget-Packages.xml new file mode 100644 index 0000000000..b5b9007545 --- /dev/null +++ b/docs/Help_ZH-CN/Topics/Nuget-Packages.xml @@ -0,0 +1,119 @@ + + + + 金块套装 + +
    + 金块套装 +
    + XSharp 3 随附用于运行时的 NuGet 包。
    这些包包含针对 .Net Framework 4.6 和 .Net 8.0 的程序集及支持文件。
    + 具体包如下: + +
    目录 @@ -129,10 +129,10 @@
    - NetCore20 + NetCore - main + main\netcore 适用于 .Net Core 2.0 的 X# 编译器和脚本引擎版本(仅限 FOX 订阅) @@ -140,14 +140,13 @@
    - ProjectSystem + Nuget - main + main\nuget - VSIX 文件用于在 Visual Studio 中安装项目系统和调试器。 - 只有在 X# 支持团队告知您可以使用时,才能使用这些文件。 + XSharp Nuget 包
    - main + main\dotnet - 包含用于 Windows、服务器和菜单的 VO 兼容编辑器模板 + 包含用于通过命令行创建项目的模板,支持使用`dotnet new`命令以及Visual Studio中的"文件/新建"功能。
    + VFPXporter + + main + + VFP 导出器 +
    VOXPorter @@ -264,33 +274,33 @@
    - Visual Studio 2015
    假设您已将 VS 2015 安装在默认位置:c:\Program Files (x86)\Microsoft Visual Studio 14.0
    - X# 將会在以下子文件夹中 + Visual Studio 2019
    假设您已将 VS 2019 安装在默认位置:
    + c:\Program Files (x86)\Microsoft Visual Studio\<number>\<Version> + 那么 X# 将位于以下子文件夹中
  • Common7\IDE\Extensions\XSharp
  • - MSBuild 整合將在以下文件夾中 -
  • c:\Program Files (x86)\MSBuild\XSharp
  • +
  • MSBuild\XSharp
  • - main\vs2015 + main\vs1 ..
    main\vs6
    - 注意:您的计算机上只能有一个 VS 2015 "版本". + +
  • <number> 是 2019。
  • +
  • <版本> 可能为 Professional、Community、Enterprise 或 Buildtools 之一。您的计算机
    上可能安装了多个版本的 VS2017/VS2019。安装程序将显示所有检测到的实例。
  • +
    - Visual Studio 2017 和/或 2019
    假设您已将 VS 2017 安装在默认位置:
    - c:\Program Files (x86)\Microsoft Visual Studio\<number>\<Version> - 那么 X# 将位于以下子文件夹中 - -
  • Common7\IDE\Extensions\XSharp
  • -
    + Visual Studio 2022 与 2026 + 假设您已将 VS 2022 安装在默认位置:
    c:\Program Files\Microsoft Visual Studio\2022\<版本号>
    + 那么 X# 将位于子文件夹 -
  • MSBuild\XSharp
  • +
  • Common7\IDE\Extensions\XSharp
  • @@ -298,10 +308,8 @@ -
  • <number> 为 2017 或 2019。
  • -
  • <Version> 可以是专业版、社区版、企业版或 Buildtools 版之一。
  • +
  • <版本>可以是专业版、社区版、企业版或构建工具版。您的计算机
    上可能安装了多个版本的VS2022/VS2026。安装程序将显示所有检测到的实例。
  • -    您的计算机上可能有多个 VS2017/VS2019 版本。自 X# 2.4 起,安装程序将显示检测到的所有实例。.
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + 包装 + + 包含 + + 依赖于 +
    + XSharp.Core + + XSharp.Core.dll + + nothing +
    + XSharp.RT + + XSharp.RT.DLL
    XSharp.RT.Debugger.DLL
    + XSharp.MacroCompiler.dll
    XSharp.Data.DLL
    XSharp.RDD.DLL
    +
    + XSharp.Core +
    + XSharp.VO + + XSharp.VO.dll + + XSharp.RT +
    + XSharp.VFP + + XSharp.VFP.dll + + XSharp.RT +
    + XSharp.XPP + + XSharp.XPP.dll + + XSharp.RT +
    + XSharp.Harbour + + XSharp.Harbour.dll + + XSharp.RT +
    + XSharp.VOSDK
    For .Net framework 4.6
    +
    + VOConsoleClasses.dll
    VOSystemClasses.dll
    + VORDDClasses.dll + VOGUIClasses.dll
    VOSQLClasses.dll
    VOInternetClasses.dll
    VOWin32APILibrary.dll
    VOReportClasses.dll
    +
    + XSharp.VO +
    + XSharp.VOSDKTyped + + XSharp.VOConsoleClasses.dll
    XSharp.VOSystemClasses.dll
    + XSharp.VORDDClasses.dll + XSharp.VOSQLClasses.dll +
    + XSharp.VO +
    + +
    diff --git a/docs/Help_ZH-CN/Topics/VersionHistory.xml b/docs/Help_ZH-CN/Topics/VersionHistory.xml index 0d65c2c4bc..77a11b7518 100644 --- a/docs/Help_ZH-CN/Topics/VersionHistory.xml +++ b/docs/Help_ZH-CN/Topics/VersionHistory.xml @@ -1,6 +1,6 @@  - + 版本历史 Changes @@ -13,5622 +13,51 @@ 注:当一个项目有一个匹配的 GitHub 票据时,票据编号就会出现在项目后面的括号中,前缀为 #。 您可以访问 https://github.com/X-Sharp/XSharpPublic/issues/nnn 其中 nnnn 是票据编号。 如果您在 X# 中发现问题,我们建议您在 GitHub 上报告。我们会通知您问题的处理进度。 - Changes in 2.24.0.1 - 编译器
    Bug修复
    + 3.0.0.0版本变更 + XSharp 3 是相对于 XSharp 2 的重大更新。过去数月间,产品所有元素均已全面升级。X# 3 包含若干破坏性变更,因此您应重新编译并测试所有现有项目和解决方案。 + 破坏性变更 + 编译器 -
  • 为不带可见性修饰符的 VFP 类成员生成文档的功能失效(#1664)
  • +
  • 编译器不再支持"自带运行时"模式。若需使用VO或Vulcan方言编译,必须包含对XSharp.Core和XSharp.RT的引用。
    这并不意味着您无法将程序链接至Vulcan运行时DLL,但我们不再将Xbase类型映射至这些DLL中的类型。 因此USUAL将不再映射为Vulcan.__Usual。您仍可使用这些DLL中的类型、函数和类,但它们将不再获得特殊处理。若需调用Vulcan运行时函数,必须使用静态方法语法
  • + 运行时 -
  • 修正了默认参数值的类型与参数类型不匹配的问题。例如,为十进制参数使用Long默认值 (#1733)
  • +
  • X#运行时中若干函数与方法的签名已变更。对于采用AS USUAL定义参数的函数,我们普遍引入了新的IN关键字。新语法IN USUAL指示编译器采用引用传递变量,这将略微提升代码执行效率,同时告知编译器该参数在函数/方法内部不会被修改。
  • +
  • 此外,我们已将若干函数和类型在运行时 DLL 间进行迁移,因其原位置并非最优方案。
  • +
  • X# 3 同时提供 .NET 46 和 .NET 8 的运行时 DLL。并非所有 VOSDK DLL 都已移植至 .NET 8,因其包含无法在 AnyCPU 环境运行的代码。
  • - 生成系统
    Bug修复
    + 编译器
    新特性
    -
  • WriteCodeFragment 任务现在可以像 C# 编译系统一样,正确支持 _Parameter1 和 _Parameter2 等参数。
  • +
  • 全局使用
  • +
  • 全局命名空间
  • +
  • 类和结构的RECORD修饰符
  • - 运行时
    Bug修复
    + 错误修复 + 构建系统
    新功能
    -
  • 修正了对重载方法的后期绑定调用问题 (#1696)
  • -
    +
  • 构建系统现支持新SDK风格项目
  • +
  • 新增任务用于生成项目文件中声明的 GLOBAL USING 值对应的源代码。请注意,VS 集成目前尚无声明项目 GLOBAL USING 值的页面,该功能后续将添加。
  • +
  • MsBuild文件夹下Rules子文件夹中的XAML文件已废弃并删除,同时移除了.props和.targets文件中对这些文件的引用
  • +
  • 构建系统不再自动从Vulcan安装目录获取include文件夹
  • +
  • 为支持SDK风格项目和.Net 10,.props与.targets文件进行了大量改动。其中一项变更可自动建立文件间的依赖关系,例如VOBinary文件与其所属模块之间的关联。
  • + + 错误修复 + 运行
    时新特性
    -
  • 修正了 GoMonth() 函数(VFP 方言)的模糊调用错误问题 (#1724)
  • -
  • 修正了使用 VIA 子句时 COPY TO 命令的问题 (#1726)
  • -
    - Visual Studio 集成
    Bug修复
    - -
  • 从项目中删除文件时,该文件不会从 intellisense 数据库中删除。这一问题已得到修复。
  • -
  • Goto 定义不再包括 BuildAction 文件属性设置为 "None"的 prg 文件的源代码 (#1630)
  • -
  • 对于没有可见性修饰符的字段,Intellisense 无法显示 VFP 类中的字段(#1725)
  • -
  • ToggleLineComment 和 ToggleBlockComment 函数未正确保持前导空白 (#1728)
  • -
  • 修复了 AssemblyCustomAttributes 的代码生成问题
  • -
    - -
  • 修复了 VS 2017 和 VS 2019 中调试器表达式评估器的一个问题
  • -
    - 新特性 - -
  • 添加了从现有 VO 表单生成 Windows 窗体表单的上下文菜单选项 (#1366)
  • -
  • 代码生成器现在可自动生成 END CONSTRUCTOR、END METHOD 等代码。
  • -
    - VOXporter - 新特性 - -
  • 添加特殊标记 "VXP-NOCHANGE"、"{VOXP:NOCHANGE}",指示 VOXporter 完全不修改模块/prg 文件中的代码 (#1723)
  • -
    - XIDE - 常规 - -
  • 添加了 "查看->隐藏侧边栏"(SHIFT+F4)选项,可在集成开发环境中快速显示/隐藏左/右边栏
  • -
  • 启用"调试->查看 DB 工作区"调试窗口
  • -
  • 修复了在未使用图库模板时新应用程序默认为 CLR2 的问题
  • -
  • 为应用程序属性窗口中的 "要运行的应用程序 "选项添加了文件夹按钮
  • -
  • 添加了几个 "每日提示 "项目
  • -
  • ·新增“首选项/突出显示活动文件标题”选项
  • -
  • ·新增“首选项/按应用程序绘制文件标题”选项
  • -
  • ·在“文件->导航”菜单项中添加了键盘快捷键信息
  • -
  • ·在工具窗口的选项卡页面上下文菜单中添加了“停靠到窗格”选项
  • -
  • ·在编辑器文件的主 IDE 窗口上下文菜单中添加了“分离/连接”选项
  • -
  • ·在浮动窗口中的文件也添加了常规上下文菜单选项
  • -
  • ·工具窗口现在也可以通过中间鼠标按钮点击关闭
  • -
    - Changes in 2.23.0.2 - 编译器 - 新特性 - -
  • 添加了一个编译器警告:当将常量 "NIL" 分配给非 usual 类型变量时 (#1688)
  • -
    - Bug修复 - -
  • 修复了在插值字符串中出现语法错误时编译器崩溃的问题 (#1672)
  • -
  • 修复了当应用程序中存在具有相似名称的 prg 文件时静态实体的问题 (#1677)
  • -
  • 修复了父类中同名访问器和字段之间的冲突(#1679)
  • -
  • 修复了在 VFP 方言中将星号 (*) 注释行标记与分号 (;) 一起使用时的问题 (#1685)
  • -
    - 生成系统 - -
  • 将被抑制的警告从 DisabledWarnings 属性移动到 NoWarn (#1697)
  • -
    - 运行时 - 新特性 - -
  • 为数组添加了额外的排序函数 ASortFunc() 和 ASortEx(),支持 .Net 风格的排序 (#1683)
  • -
  • 允许注册特殊错误处理程序,用于在宏编译期间处理错误 (#1686)
    要使用此功能,请声明一个具有以下原型的函数或方法:

    DELEGATE CodeblockErrorHandler(cMacro as STRING, oException as Exception) AS ICodeBlock
  • -
    - -
  • 为 VFP 函数 GoMonth()、Quarter()、Week()、DMY() 和 MDY() 添加了非类型重载 (#1724)
  • -
  • 在 VFP 运行时库中实现了 Seek() 函数 (#1718)
  • -
  • 允许注册特殊错误处理程序,在宏编译过程中出现错误时调用 (#1686)
    要使用此功能,请声明具有以下原型的函数或方法:

    DELEGATE CodeblockErrorHandler(cMacro as STRING, oException as Exception) AS ICodeBlock
  • -
    -
    然后像这样将其注册为代码块错误处理程序:
    RuntimeState.CodeBlockErrorHandler := CodeBlockErrorHandler
    当函数/方法返回 NULL 时,就会抛出异常。
    当函数/错误处理程序返回一个代码块时,该代码块将用于评估宏。例如

    FUNCTION CodeBlockErrorHandler(cMacro AS STRING, oEx AS Exception) AS ICodeblock
      ? Mmacro
      ? oEx:Message
      // 出现类似错误时,Visual Objects 返回 NIL
    RETURN {|| NIL }

    FUNCTION Start() AS VOID STRICT
      RuntimeState.MacroCompilerErrorHandler := CodeBlockErrorHandler
      ? &("'aaa'bbb'")    // 单引号数量不均,错误。
                          // 返回 NIL,因为 ErrorHandler 返回的代码块为 NIL
    - Bug fixes - -
  • 修复了 COPY TO ARRAY / DbCopyToArray() 在处理类型为 "G" 的字段时的问题(#1530)
  • -
  • 修复了 ASort() 在使用 .Net Framework 4.5 排序例程时返回不一致结果的问题 (#1653)
  • -
  • 修复了 Integer() 函数依赖于 SetFloatDelta() 设置的问题 (#1676)
  • -
  • 修复了延迟绑定调用中默认方法参数的多个问题  (#1684)
  • -
  • 修复了 IVarGetInfo() 在覆盖的 ASSIGN 方法具有不同大小写时的问题 (#1692)
  • -
  • 修复了延迟绑定调用中 ENUM 参数的问题 (#1696)
  • -
  • 修复了延迟绑定代码中 FindMethod() 内部的异常(处理了具有相似名称的方法和赋值)(#1702)
  • -
  • 修复了 ProcName(x) 返回错误结果的问题 (#1704)
  • -
  • 修复了在 XBase++ 方言中通过对象实例调用类 access 方法的问题 (#1705)
  • -
  • 修复了在使用 DirChange() 更改当前目录后 File() 函数找不到文件的问题 (#1706)
  • -
  • 修复了 Directory() 函数的多个兼容性问题 (#1707 and #1708)
  • -
    - 宏编译器 - -
  • 宏中的整数除法现在返回 float 而不是 INT (#1641)
  • -
  • 允许宏编译器在 FoxPro 方言中访问 protected 和 private 成员 (#1662)
  • -
  • 修复了宏编译器处理 IN 参数的问题 (#1675)
  • -
  • 修复了脚本和 ExecScript() 的各种问题(#1646, #1682)
  • -
    - RDD System - -
  • 修复了打开没有扩展名的 dbf 文件时的问题 (#1671)
  • -
  • 修复了 DbServer:OrderScope() 在没有新值时总是返回 NIL 并将范围设置为 NIL 的问题 (#1694)
  • -
    - Typed VO SDK - -
  • 修复了 MouseMove( oMev) 未被 FixedText 调用的问题(#1680)
  • -
    - -
  • 为窗口类添加了一个属性 EnableDispatch。当设置为 TRUE 时,将调用 Dispatch() 方法。(#1721)
  • -
    - Visual Studio 集成 - Bug修复 - -
  • 修复了编辑器在显示带注释的多行语句的区域标记时的问题  (#1667)
  • -
  • 修复了 "is not null" 代码模式的错误高亮问题 (#1699)
  • -
    - XIDE - 常规 - -
  • 在 Project 窗口中添加了折叠所有节点的工具栏按钮
  • -
  • 在 Preferences 窗口和插件系统中添加了选择转义文字编辑器颜色的支持
  • -
  • 在查找结果窗口中添加了 复制所有内容/仅代码 的上下文菜单选项
  • -
  • 控件排序窗口现在支持使用键盘移动项目(选项卡顺序),通过使用 CTRL 或 SHIFT + 上/下键
  • -
  • 修复了错误地将 Func<T> 高亮为关键字的问题
  • -
  • 项目/应用程序导出现在还包括本地资源文件 (.rc)
  • -
  • 对每日提示窗口进行了一些改进
  • -
    - 文档 - Bug修复 - -
  • 修复了 CONSTRUCTOR、DESTRUCTOR、ENUM、EVENT、FUNCTION、METHOD OPERATOR、PROPERTY、STRUCTURE 主题的文档问题 (#1655)
  • -
    - Changes in 2.22.0.1 - 编译器 - Bug 修复 - -
  • 修正了 RECOVER USING 语句中未知变量错误行的问题 (#1567)
  • -
  • 修复了参数中的默认值导致编译器崩溃的问题 (#1647)
  • -
  • 修正了在操作系统中使用字体缩放时,VOWED 工具箱窗口中的文本会出现错乱的问题 (#1650)
  • -
  • 修正了向项目中添加 COM 引用时的错误 (#1654)
  • -
    - 生成系统 - -
  • 某些从 Vulcan 转换而来的项目文件可能会导致从错误列表中查找错误的问题。该问题已得到修复:在 Visual Studio 内构建时,属性 GenerateFullPaths 现在总是设置为 “true”。
  • -
  • LastXSharpResponseFile.Rsp 和 LastXSharpNativeResourceResponseFile 文件现在总是在临时文件夹中创建,而不是在临时文件夹中的 MSBuildTemp 子文件夹中创建。
  • -
    - 运行时 - Bug 修复 - -
  • ExecScript() 现在可调用新宏编译器中的脚本代码 (#1646)
  • -
    - 新特性 - -
  • 已将 SetCPU() 和 SetMath() 标记为过时
  • -
  • Bin2Ptr() 和 Ptr2Bin() 现在也能在 X64 模式下运行。返回或预期的字符串长度为 8 个字符。
  • -
    - RDD 系统 - -
  • 修正了当使用比最高索引值更高的底部作用域时,DbOrderInfo() 返回错误的键计数的问题 (#1652)
  • -
    - VOSDK - -
  • 修正了 DataDialog:ToolBar 返回值总是 NULL 的问题,即使分配了工具栏对象也是如此 (#1660)
  • -
    - VOXporter - 新特性 - -
  • 现在,从 .mef 导入时也会生成可视化编辑器的二进制文件和支持文件。 (#1661)
  • -
    - Visual Studio 集成 - Bug 修复 - -
  • 修正了用户扩展方法的 IntelliSense 问题 (#1421)
  • -
  • 修正了格式化文档中的 DEFINEs 问题 (#1642)
  • -
  • 修正了当程序集不存在时读取程序集信息的问题 (#1645)
  • -
  • 修正了 VFP 类项目模板中 DEFINE CLASS 语法的问题 (#1648)
  • -
  • 修复 Window 编辑器工具箱字体大小的问题 (#1650)
  • -
  • 修复在项目中添加 COM 引用的问题 (#1654)
  • -
    - XIDE - 常规 - -
  • 推出 “每日小贴士 ”功能
  • -
  • 项目窗口搜索器提示的显示时间从 2 秒增加到 5 秒
  • -
  • 在项目窗口中添加了使用 F3 重复上次搜索的功能
  • -
  • 为 Locals 详细信息编辑框添加了垂直滚动条
  • -
    - Editor - -
  • 修正了识别某些位置关键字(如 CONSTRUCTOR)的问题
  • -
  • 修正了 X# 特定数据类型(USUAL、FLOAT、DATE 等)的 intellisense 问题
  • -
  • 修正了从 X# 程序集读取名称中包含特殊字符的函数时的 intellisense 问题
  • -
    - 设计器 - -
  • 修复了在表单设计器中解锁控件的问题
  • -
    - 调试器 - -
  • -
    - 插件系统 - -
  • 已添加 ProjectItemBase:SelectNodeInProjectPad() 方法(适用于所有项目项类型)
  • -
  • 添加了属性 Editor:LineHeight、Editor:LineCount 和 Editor:FirstVisibleLine
  • -
  • 添加了方法 PluginService:GetEditorColor(eColor AS EditorColor) 和 PluginService:SetEditorColor(eColor AS EditorColor, oColor AS Color)
  • -
    - 文档 - Bug 修复 - -
  • [查看源代码] 链接指向的是 Github 上的功能分支。现在指向的是主分支。
  • -
  • 更新了关于插值字符串的帮助主题。
  • -
    - Changes in 2.21.0.5 - 2.21.0.5 中可能出现的中断性更改 - 所有方言 - 到目前为止,编译器根据方言为命令行选项提供了几种内置默认值。 - 这意味着当命令行选项不存在而选择了某种方言时,该选项就会自动启用。我们讨论的是以下选项: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - 方言 - - 选项 -
    - Core - - AllowNamedArgs -
    - Core - - AllowDot -
    - FoxPro - - AllowDot -
    - FoxPro - - AllowOldStyleAssignments -
    - FoxPro - - Vo9 -
    - FoxPro - - Vo15 -
    - FoxPro - - InitLocals -
    - Other - - Vo15 -
    - - 这让一些人(也让我们)感到困惑。例如,如果要禁用 /initlocals- 选项,就必须在使用 FoxPro 方言编译时明确添加该命令行选项。 - - 此外,如果项目文件中没有与编译器选项相匹配的特定属性,MsBuild 系统也不会将命令行参数传递给编译器。因此,如果项目文件不包含 <AllowDot> 节点,那么在使用 Core 语言编译项目时,命令行选项 /allowdot 将被启用,但在使用 VO 或 Xbase++ 语言编译项目时,命令行选项 /allowdot 将被禁用。这非常令人困惑! - - 为了解决这个问题,我们采取了以下措施 - -
  • 编译器将删除默认值。
  • -
  • 对于项目文件中未定义的选项,编译系统将生成带有“-”标志的命令行选项。这只会发生在 X# 特定的命令行选项上。我们从 Roslyn “继承”的编译器选项,如/debug、/optimize 等,仍将像以前一样工作。
  • -
  • 在 Visual Studio 中打开项目文件时,我们会检查上面列出的方言和选项。如果项目文件中缺少某个选项,我们就会添加该选项,并将其值设为 “true”。我们还将删除与方言无关的选项。例如:对于 Core 方言,foxpro 和 xpp 的特定设置将被移除。
  • -
    - - 这通常会导致与之前相同的编译结果。你可能看到的唯一区别是,当你用此版本打开项目文件时,文件会自动更新。 - FoxPro 方言 - 到目前为止,DEFINE CLASS 语法不仅可用于创建继承自 FoxPro 兼容 Custom 类的类,还可用于创建继承自其他 .Net 类的类。事实证明这有点复杂。 - 此外,还有一个 /fox1 编译器选项,可使 DEFINE CLASS 命令中的 AS ParentClass 子句成为可选项。没有 AS ParentClass 的类将自动从自定义类继承。 - - 我们做了以下更改: - -
  • AS BaseType 子句将像在 Visual FoxPro 中一样是强制性的
  • -
  • ParentType 必须是 Custom 类或从 Custom 类派生的类。
  • -
  • /fox1 编译器现已过时
  • -
    - - 如果要从 VFP 类层次结构之外的类(标准 .Net 类)继承,则必须使用 CLASS ... END CLASS 语法。END CLASS 语法。 - - 编译器 - Bug 修复 - -
  • 修正了字段/内存变量重复声明时的内部编译器错误 (#1475)
  • -
  • 修正了在启用 /fox2 的 VFP 方言中调用函数时的错误警告 (#1476)
  • -
  • 修正了 FLOAT 类型的最小/最大 IEnumerable 扩展方法的问题 (#1482)
  • -
  • 修正了 XBase++ 方言中acess/assign方法的 StackOverflowException 异常 (#1483)
  • -
  • 修复了读取带有文件结束标记的 clipper/harbour .prg 文件的问题 (#1485)
  • -
  • 修正了预处理器中扩展表达式匹配标记的问题 (#1487)
  • -
  • 修正了在 XBase++ 方言中通过引用传递数组引用或 ivar 的问题 (#1492)
  • -
  • 修正了针对包含在接口中的方法的 Evaluate() 函数中的 AmbiguousMatchException。 (#1494)
  • -
  • 修正了 /fox1 开关在某些情况下被忽略的问题 (#1496)
  • -
  • 编译系统现在会自动为使用 X# 编译的程序集添加 TargetFramework 属性 (#1507)
  • -
  • 修正了命名空间和属性同名时的歧义问题,以及禁用 /allowdot 选项时的若干问题 (#1515)
  • -
  • 修正了带有 TEXTMERGE 子句的 TEXT TO/ENDTEXT 中的问题 (#1517)
  • -
  • 修正了编译器错误报告中关于需要 /memvar 选项的误导性行号 (#1531)
  • -
  • 修正了与定义索引属性有关的一些问题 (#1543)
  • -
  • 修正了 /vo9(处理丢失的 RETURN 语句和返回值)编译器选项的若干问题 (#1544)
  • -
    - -
  • Fixed parser problem with END DEFINE, END PROCEDURE and END FUNCTION in the VFP dialect (#1564)
  • -
    - -
  • 修正了在 FoxPro 方言的 CLASS 语句中使用特性(attributes)的问题 (#1566)
  • -
    - -
  • 修正了宏编译器在编译强类型代码块时出现的问题 (#1591)
  • -
  • 修正了在 VFP 方言中使用 DEFINE CLASS 语法定义的特性(Attributes)被忽略的问题 (#1612)
  • -
    - -
  • 编译器在构建带有 .editorconfig 文件的解决方案时可能会崩溃。
  • -
  • 修正了为 FoxPro 风格类定义内的成员属性生成特性(attributes)输出的问题。
  • -
  • 修正了关于在 VFP 方言中定义不含 AS 子句的类的错误信息中的错字(#1611)
  • -
  • 添加了对无类型参数的泛型的支持,如 typeof(List< >) 和 typeof(Dictionary<,>) (#1623)
  • -
  • 更改与 FoxPro 兼容的 DEFINE CLASS(见上文)
  • -
  • 更改了处理命令行参数缺失的方式(见上文)
  • -
    - -
  • We have added the double colon (::) separator for interpolated strings to separate the expression from the format specifier. C# uses the single colon (:) but that character is also used as member access operator in X#.See the String Literals topic for more information.
  • -
    - 生成系统 - -
  • 我们修正了编译系统中的一个问题,该问题有时会导致重新编译,即使没有更改任何内容。
  • -
    - -
  • 修正了 machine.config 中的语言与内置系统中的语言定义不匹配的问题
  • -
  • 修正了导致 .xml doc 文件写入错误文件夹的问题
  • -
  • 更改了将丢失的项目文件属性转换为命令行参数的方式(见上文)
  • -
    - 运行时 - Bug 修复 - -
  • 修正了一些 DBSetFilter() 与 VO 不兼容的问题 (#1489)
  • -
  • 修正了 DBSetFilter() 在没有匹配记录时导致后续调用 DBSetFilter() 或 DBClearFilter() 失败的问题 (#1493)
  • -
  • 修正了 FoxPro COPY 命令中 WITH CDX 子句的问题(缺少实现) (#1497)
  • -
  • 修正了 SCATTER/GATHER MEMO MEMVAR 的问题 (#1510, #1534)
  • -
  • 修正了一个问题,即添加项目时,Collection(集合)类不会增加Count属性(FoxPro 方言)(#1528)
  • -
  • 修正了带有 FOR 子句的 APPEND FROM 命令的问题 (#1529)
  • -
  • 修正了在 FoxPro 方言中使用 Str() 时的宏编译器问题(导致 INDEX ON 命令出现问题)(#1535)
  • -
  • 修正了宏编译器在使用某些语言关键字(如 REF、FIELD、DEFAULT)作为标识符时出现的问题 (#1557)
  • -
    - -
  • 修复了 VFP 方言中 REPLACE、DELETE 和 UPDATE 命令的问题 (#1574, #1575, #1576, #1577)
  • -
    - -
  • 修正了 USUAL 类型中的一个问题,即浮点数值的 CompareTo 执行不正确 (#1616)
  • -
  • 修正了 USUAL 类型中 ! 运算符与 (LOGIC) cast 相比不能产生正确结果的问题。
  • -
    - -
  • 我们修复了 XSharp.VFP.UI 库中的几个问题
  • -
    - RDD 系统 - -
  • 修正了 DbZap() 与 DBFNTX 之间的一个问题 (#1509)
  • -
    - -
  • 修正了 DBFNTX 中 DBSetOrder(0) 始终返回 FALSE 的问题 (#1520)
  • -
    - -
  • 为与 VO 兼容,当工作区处于 EOF 时使用 FieldPut() 时,消除了运行时错误 (#1542)
  • -
  • 修复了 AXDBFCDX 驱动程序中 OrderDescend() 的问题 (#1608)
  • -
    - -
  • 修正了读取使用多字节编码存储的 DBF 文件的可变长度字段的问题。
  • -
    - -
  • 修正了用简体中文编码的 DBF 文件被解释为粤语的问题。
  • -
  • 修复了 DBF RDD 中的一个问题,即在获取记录或文件锁后,未重新加载 currentbuffer。
  • -
  • 我们修复了 DBF 文件大于 2 Gb(0x7FFFFFFF 字节)时的一个问题
  • -
  • 在 DBFCDX 驱动程序中创建 UNIQUE 索引时会排除 DBF 文件中的第一条记录
  • -
    - VOSDK - -
  • 修正了 Window:__CommandFromEvent 中的拼写错误,该错误会导致来自 SEUIXP 的命令产生运行时错误。
  • -
    - Visual Studio 集成 - Bug 修复 - -
  • 修复了保存/读取 OldStyleAssignment 编译器选项项目设置的问题 (#1495, #1582)
  • -
  • 修正了 VS2022 中的一个问题,即由于 VS 中的一个更改,编辑器中的几个功能不再工作 (#1545)
  • -
  • 修正了编辑器中 SCAN...END SCAN 的缩进问题 (#1549)
  • -
  • 修正了将 Windows 窗体用户控件的 .resx 文件放在解决方案资源管理器中不正确位置的问题 (#1560)
  • -
  • 修复了编辑器中代码片段在 VS 2022 17.11 版中不再工作的问题 (#1564)
  • -
    - -
  • Fixed problem with the parameter list auto-showing tooltip when using <Enter> to accept a method from the member completion list (#1570)
  • -
    - -
  • 修复了带有结束关键字(如 NEXT 和 ENDDO)的缩进行的问题(当这些关键字后跟有 “垃圾 ”时)。
  • -
  • 当 include 中的一个文件声明了实体(如 USING SomeNameSpace)时,在 VS 表单设计器中打开表单可能会失败(#1595,#1596)
  • -
  • 修正了调试器中以“$”字符开头的标识符(如异常对话框中的“$exception”)无法正确评估的问题(#1602)
  • -
  • 修正了使用 DEFINE CLASS  ... ENDDEFINE 声明的 VFP 样式的类的缩进问题(#1609)
  • -
    - 新特性 - -
  • 现在,在 VS 中构建任何项目类型时,TargetFramework 属性都会自动添加到程序集中 (#1507)
  • -
  • 已添加对 GotoBrace 命令的支持,该命令不仅适用于普通括号,还适用于 IF ... ENDIF 等关键字对  (#1522)
  • -
  • 现在,编辑器左上方有一个组合框,显示定义文件的项目。
  • -
  • 如果文件存在于多个项目中(作为链接文件),那么项目组合框将显示使用该文件的所有项目名称。
  • -
  • 从组合框中选择不同的项目时,缓冲区将重新绘制,因为每个项目的条件编译符号可能不同。
  • -
  • 在编辑器中使用 intellisense 时,查找引擎将使用所选的项目。因此,如果一个文件在 2 个项目中使用,那么将使用所选项目的引用和源文件来查找引用数据。
  • -
  • 添加了对 FoxPro 关闭关键字变化(如ENDFOR 和 ENDWITH)的正确缩进支持
  • -
  • 我们已将项目系统中与 X# 语言相关的若干功能移至语言服务,以便为 SDK 项目的新项目系统做好准备。
  • -
  • 我们在 “文件” 级别的完成列表中添加了对片段的支持
  • -
  • 我们不再为没有任何 X# 项目的解决方案创建 X# intellisense 数据库
  • -
  • 我们对 X# intellisense 数据库结构做了一些更改。当您打开一个已有数据库的解决方案时,数据库将被删除,所有源文件将被重新扫描(仅一次)。
  • -
  • X# 源代码编辑器顶部现在多了一个组合框,可列出包含文件的项目。当一个文件包含在多个项目中时,你可以看到所有项目。切换到新项目将改变 “评估上下文”。条件编译(#ifdef)会在编辑器中反映出变化。
  • -
  • 我们在编辑器中添加了对 Edit.NextMethod 和 Edit.PreviousMethod 命令的支持。这些命令通常没有快捷键,但您可以使用 Visual Studio 工具栏上的 “自定义 ”选项来分配它们。例如,您可以指定 Ctrl-DownArrow 和 Ctl-UpArrow。
  • -
  • 改进了 VOWED 中的 “克隆窗口 ”选择对话框 (#1508)
  • -
  • 在 VOWED 中选择多个控件时,现在最后选定的控件将成为 “属性 ”窗口中的 “活动 ”控件
  • -
  • 在 VOWED 中粘贴控件时,控件现在会转到控件顺序列表的底部
  • -
  • 在 “VOWED 控制顺序 ”对话框中添加了选项,以便在 “使用鼠标 ”时,在当前选定控件之后开始调整控件的控制顺序
  • -
  • 将 Mono.Cecil 库更新至 0.11.6
  • -
  • 当以前 “隐含”的属性丢失时,项目文件会被调整(见上文)
  • -
    - XIDE - 常规 - -
  • 在 intellisense 中用 Mono.Cecil 代替 System.Reflection,以提高性能和稳定性
  • -
  • 工具箱编辑器现在还使用 Mono.Cecil 从 dlls 中读取控件
  • -
  • 现在,在打开文件后直接关闭文件时(没有激活另一个文件),焦点会在打开新文件前返回到之前激活的文件。
  • -
  • 改进了对独立文件的支持,在属性窗口中增加了方言、引用等选项
  • -
  • 将各种 XIDE 支持文件的默认名称从 “vi ”改为 “xi”(.xiaef、xiapp 等)
  • -
  • 修正了意外调用旧版本 XIDE 资源编译器和工具箱编辑器的问题
  • -
  • 在生成(build)事件中添加了"%OUTPUTEXT%(输出程序集扩展名)宏
  • -
  • 在应用程序属性中添加了对 -allowdot 编译器选项的支持,所有应用程序默认启用该选项
  • -
  • 修正了无法正确保存编译器选项 /initlocals、/modernsyntax、/allowoldstyleassignments 和 /namedargs 的问题。
  • -
  • XIDE 主窗口状态栏中的剪贴板项现在可在工具提示中显示当前剪贴板内容
  • -
  • 剪贴板选择上下文菜单现在也可显示每个虚拟剪贴板的内容
  • -
  • 插件系统的一些小修正(您可能需要重新编译您的插件)
  • -
  • 为 “项目” 工具窗口中的项目节点添加了 “打开备用文件夹 ”上下文菜单选项
  • -
  • 为窗口资源编辑器添加了包含字符串和文本文件的选项
  • -
  • 为FoxPro、XBase++和Harbour方言添加了应用程序模板
  • -
  • 现在,“新建应用程序 ”对话框中显示的应用程序模板将根据每个图库文件模板的图库索引设置进行排序
  • -
  • 新增菜单选项 View|Load/Save/Reset Layout,用于在 IDE 窗口和工具窗口的不同布局之间切换
  • -
  • 在 template.cfg 中添加了一些新模板(代码片段)
  • -
  • 已添加项目对 /vo15 编译器选项的支持
  • -
  • 为 allowdot 编译器选项添加了独立文件默认设置(Preferences/Compiler)
  • -
  • 添加了在运行控制台应用程序时设置控制台位置的选项(Preferences/Advanced)
  • -
  • 在主菜单(File/Navigate and Edit/Advanced)中加入多个 “hidden”命令
  • -
  • 改进了在Watch工具窗口中删除项目的功能
  • -
  • 改进了 “About XIDE”对话框
  • -
    - - 编辑器 - -
  • 改进对代码中关键字的识别
  • -
  • 修复了代码中 2 个字母长函数的识别问题
  • -
  • 修正了 core 方言应用程序中定义的函数的 intellisense 问题
  • -
  • 已为 FOREACH VAR 添加 intellisense 支持
  • -
  • 修复了编辑器中 VAR locals 崩溃的问题
  • -
  • 修正了 LOCAL IMPLIED 的几个问题
  • -
  • 修正了在名称空间中解析已修改类的问题
  • -
  • 改进编辑器对 FoxPro、Harbour 和 XBase++ 方言的支持
  • -
  • 添加了对大量 FoxPro 关键字的编辑器支持
  • -
  • 添加了对 FoxPro 函数的编辑器支持
  • -
  • 编辑器现在可识别 FoxPro 方言中的行注释标记 &&
  • -
  • 添加了对使用 ? 后缀指定的可空类型(例如 INT?)的 intellisense 支持。
  • -
  • 已添加对 ?: 操作符的 intellisense 支持
  • -
  • 已添加对 IF <identifier> IS <type> VAR <local> 的 intellisense 支持
  • -
    - -
  • 已添加选项(Preferences/Editor/Edit) ,以自动调整包含下划线的数字字面量
  • -
  • 添加了带 REPEAT...UNTIL 和 BEGIN SCOPE...END 选项的上下文菜单 Surround
  • -
  • 添加了在编辑器中排序实体的选项(试验性)(Edit->Sort Entities)
  • -
    - - 设计器 - -
  • 现在,VOWED 属性窗口中的项目按名称排序
  • -
  • 现在可通过键盘上的 SHIFT+ 箭头键调整 WED 中控件的大小
  • -
  • 在设计器中加载 WindowsForms 表单时,所有 TabControl 现在都会初始选择其第一个 TabPage
  • -
  • 自动生成的事件处理程序方法名称现在在控件和名称中的事件部分之间包含下划线
  • -
  • 已添加选项(首选项/设计器),可在生成的代码中添加END(方法、构造函数等)语句
  • -
  • 已添加选项(首选项/设计器)以输入当前操作系统缩放设置(修复了在非默认设置下创建/移动控件时在错误位置显示套索线的问题)
  • -
  • 在 Windows.Forms 和 VO Window 编辑器中添加了锁定/解锁控件的工具栏按钮
  • -
  • 控件的锁定状态现在可在 Windows.Forms 设计器中保留(需要保存表单才能应用)
  • -
  • 修正了将 strip items 的 Text 属性设置为空的问题
  • -
    - -
  • 在 VOWED 控制顺序对话框中添加了选项,以便在 “使用鼠标 ”时,在当前选定控件之后开始调整控件的控制顺序。
  • -
  • 在 Windows.Forms 工具箱中添加了组件 SaveFileDialog、OpenFileDialog 和 FolderBrowserDialog
  • -
    - 调试器 - -
  • 调试时的异常对话框现在可正确显示异常信息
  • -
  • 修正了在排除已处理的异常时不正确中断的问题
  • -
  • 修复了调试器中可能发生的常见崩溃问题
  • -
    - 插件系统 - -
  • 插件系统的一些小修正(您可能需要重新编译插件)
  • -
  • 已添加 Plugin:OnAfterCompileApplication(oApp AS Application, eResult AS CompileResult) 回调方法
  • -
  • 添加了 Editor:SetSelection() 方法,用于在编辑器中选择文本
  • -
  • 从插件系统返回的实体对象不再包含END CLASS 和 END NAMESPACE 语句
  • -
    - 文档 - Bug 修复 - -
  • 文档多处的更正 (#1504, #1506, #1514)
  • -
    - 新特性 - -
  • 中文文档的多处更新
  • -
  • 添加了丢失的 SCAN...ENDSCAN 文档 (#1548)
  • -
  • 为 DBOrderInfo() 函数主题添加了缺失的可用常量 (#1565)
  • -
    - -
  • 修正了文档中有关 -memvar 选项的错误文本 (#1621)
  • -
    - Changes in 2.20.0.3 - 编译器 - Bug 修复 - -
  • 修复了在 FoxPro 方言中 USE 命令 的 AGAIN 子句问题 (#235)
  • -
  • 修复了启用 -namedargs 编译器选项的情况下在编译时调用带有命名参数的类型数组(typed array)构造函数的问题 (#1430)
  • -
  • 修复了 INSTANCE 关键字与类内部使用的不一致 (#1432)
  • -
  • 修复了 REPLACE UDC 可能会阻止使用名为 “replace” 的变量的问题 (#1443)
  • -
  • 修复了 -vo9(处理丢失的 RETURN 语句)编译器选项与分部类中的 ACCESSes 的问题 (#1450)
  • -
  • 修复了词法分析器在 FoxPro 方言中识别字符串内的续行符的问题 (#1453)
  • -
  • 修复了 memvar pragma 选项的问题 (#1454)
  • -
  • 修复了 -xpp1 编译器选项的问题。(#1243, #1458)
  • -
  • 修复了当涉及的对象未定义类型时,从定义成员的类中访问方法中 Hidden 类成员的问题(#1335, #1457)
  • -
  • 修复了单行代码行仅包含单逗号时的内部编译器错误 (#1462)
  • -
  • 修复了使用 USE 命令 时以方括号为包含文件名的字符定界符时产生的问题 (#1468)
  • -
    - 新特性 - -
  • 现在,您可以使用 NULL() 和 DEFAULT() 表达式以默认值初始化任何变量。这相当于 C# 中的 DEFAULT 关键字。
  • -
  • 我们添加了一个新的编译器选项 -modernsyntax (#1394)。这将禁用某些传统功能:
  • - -
  • && 作为行注释
  • -
  • * 在行首表示注释
  • -
  • 使用方括号的字符串
  • -
  • 括号表达式列表(因此更容易识别元组)
  • -
    -
    - -
  • 已添加对 IS NULL 和 IS NOT NULL 模式的支持 (#1422)
  • -
  • 在 Harbour 方言中添加了对文件宽 FIELD 语句(file wide FIELD statements)的支持 (#1436)
  • -
    - 运行时 - Bug 修复 - -
  • 修复了在 Transform() 函数中使用 PTR 参数时的运行时错误 (#1428)
  • -
  • 修复了传递 PSZ 参数时,多个 String 运行时函数抛出运行时错误的问题 (#1429)
  • -
  • 修复了在 ADS RDD 中使用 OrdKeyVal() 和 ADS/ADT 文件时的问题 (#1434)
  • -
  • 修复了在创建和使用长名称的 order 时,与各种 xBase 方言的不兼容问题 (#1438)
  • -
  • 修复了在 ADS RDD 中使用 OrderKeyNo() 时,如果设置 Ax_SetExactKeyPos() 为 TRUE,则会出现 VO 不兼容的问题 (#1444)
  • -
  • 修复了宏编译器在传递超过两个引用参数时的问题 (#1445)
  • -
  • 修复了 DBSetIndex() 设置记录指针在 eof 时的问题 (#1448)
  • -
  • 修复了从 OEM dbfs 读取字段时的问题 (#1449)
  • -
    - 新特性 - -
  • 实现了 DBFMEMO 驱动程序(#604)
  • -
  • 实现了 DBFBLOB 驱动程序(#605)
  • -
  • 添加了缺失的无参数 SetColor() 函数重载(#1440)
  • -
    - -
  • 此版本包含了新的 XSharp.VFP.UI.DLL ,该 DLL 由从 Visual FoxPro 导出的表单使用,通过 VFP Exporter 实现。
  • -
    - Visual Studio 集成 - Bug 修复 - -
  • 修复了 VS 2019 中“跳转到文件”命令的问题 (#1146)
  • -
  • 修复了局部函数的“转到定义”功能不工作的问题 (#1415)
  • -
  • 修复了在某些情况下类导航框显示错误当前条目的问题 (#1426)
  • -
  • 修复了设置 -namedargs(启用命名参数)选项在项目设置中存在的问题 (#1431)
  • -
  • 修复了外部程序集中的类型的代码生成器未为索引属性生成参数的问题 (#1442)
  • -
  • 修复了 VODBServer 编辑器未保存 [DBSERVER] 部分的 access/assigns 和其他实体的问题 (#1452)
  • -
  • 修复了在 VO 窗口编辑器中加载 cavowed.inf 文件提供的带有绝对或相对路径的补充文件的问题 (#1470)
  • -
  • 修复了 VS2022 调试器中不同 DLL 包含相同命名空间但大小写不同时的问题。
  • -
  • 修复了编辑器内的实体解析器未能正确确定包含本地函数或过程的实体结束的问题
  • -
  • 修复了编辑器内的实体解析器在未启用 /memvars 编译选项时,遇到行首的 param 标记时会出错的问题。
  • -
    - 新特性 - -
  • 我们已经在帮助菜单中为中文版本的文档添加了一个菜单项。
  • -
    - VOXporter - Bug 修复 - -
  • 修正了将属性转换为字符串字面量不正确的问题 (#1404)
  • -
    - 新特性 - -
  • 现在可以在任何模块的 VO 代码中定义特殊的 TEXTBLOCK 实体,名称为 “VXP-TOP” 或 “{VOXP:TOP}”,VOXporter 将自动在模块导出的 X# .prg 文件开头插入文本块的内容。这对指定 #using 语句(#1425)等顶级命令特别有用。
  • -
    - VFPXporter - -
  • 该版本的 X# 包含 VFP Exporter 。该工具可将 Visual FoxPro 项目文件转换为 Visual Studio 解决方案
  • -
    - XIDE - -
  • 当尝试在错误的 XIDE 版本中调试 32/64bit 应用程序时,添加了自动打开替代版本的选项。
  • -
  • 修正了编辑器中几个位置关键字的着色问题
  • -
  • 改进了编辑器对 TEXT...END TEXT 的支持
  • -
  • 已添加编辑器对 NOT NULL 代码模式的支持
  • -
  • 已添加对编译器选项 /namedargs、/initlocals、/modernsyntax 和 /allowoldstyleassignments 的项目支持
  • -
  • 现在,启动时按 SHIFT 键会将 IDE 的布局重置为默认位置(退出时不会保存)。
  • -
  • 已添加菜单命令 View->Save Current Layout(查看->保存当前布局)
  • -
  • 修正了在列选择中切换所选文本大小写 (CTR+U) 的问题
  • -
  • 修正了将带有 PROC 或 FUNC 等标识符的行误认为实体定义的若干问题
  • -
    - 文档 - Bug 修复 - -
  • 修复了 /namedargs 编译器选项主题中的拼写错误。
  • -
    - 新特性 - -
  • 我们添加了几个关于修饰符(modifiers) 的章节
  • -
  • 我们添加了(部分)翻译成简体中文的帮助文件。
  • -
    - Changes in 2.19.0.2 - 编译器 - Bug 修复 - -
  • 现在编译器在类型中定义重复字段名时会正确报告错误 (#1385)。
  • -
  • 修复了在泛型类型中定义多个类型约束的问题 (#1389)。
  • -
  • 修复了全局内存变量隐藏同名局部变量或参数的问题 (#1294)。
  • -
  • 修复了在找不到类型时出现虚假编译器错误消息的问题 (#1396)。
  • -
  • 修复了在 FoxPro 方言中缺少对 XSharp.VFP 的引用导致编译器崩溃的问题 (#1405)。
  • -
  • 修复了 -initlocals 编译选项错误地初始化类字段的问题 (#1408)。
  • -
  • 修复了预处理器中扩展匹配符号无法正确匹配以字符串字面量开头的表达式的问题。
  • -
    - 新特性 - -
  • 我们增加了对维度(FoxPro)类属性的支持,例如:

    DIMENSION this.Field(10)
  • -
  • 我们添加了对 FOREACH AWAIT 的支持,如以下示例(适用于 .Net Core、.Net 5 及更高版本)。
  • -
    -
    FOREACH AWAIT VAR data IN GenerateNumbersAsync(number)
         SELF:oListView1:Items:Add(data)
      NEXT
    - -
  • 我们已经添加了对合并成员访问的支持,例如在以下示例中,FirstName 和 LastName 都是 oPerson 对象的属性::
  • -
    - - ? oPerson:(FirstName+" "+LastName) -   - -
  • WITH 命令现在也能识别 AS DataType 子句。
  • -
    - -
  • XBase++ 类声明现在也允许使用 “END CLASS” 作为结束标记。
  • -
    - -
  • 现在,编译器在尝试将 Lambda 表达式转换为常规表达式时会报错 (#1343)
  • -
    - -
  • 我们增加了对元组(TUPLE)数据类型的支持。这包括声明局部变量、参数、返回值等。
  • -
  • 我们还支持将元组返回值分解为多个局部变量。更多信息,请参见元组帮助主题。.
  • -
    - 运行时 - Bug 修复 - -
  • 修复了从宏编译器调用 DoEvents() 的问题 (#872)
  • -
  • 修复了 __Mem2StringRaw()(文档未记录)函数的问题 (#1302)
  • -
  • 修复了在头部中包含不正确排序信息的 DBFCDX 索引文件打开问题 (#1360)
  • -
  • 修复了 OrdSetFocus() 在无参数调用时重置当前顺序的问题 (#1362)
  • -
  • 修复了在 DBPack() 后一些索引文件的问题 (#1367)
  • -
  • 修复了在所有记录都被删除的表上 Deleted() 返回 TRUE 的问题 (#1370)
  • -
  • 修复了以独占和只写模式打开并使用 FWrite() 等函数写入文件的问题 (#1382)
  • -
  • 修复了 SplitPath() 函数中的几个问题(与 VO 不兼容性) (#1384)
  • -
  • 现在,当在 dbf 头部中找不到代码页时,将使用 RuntimeState 中的 DOS 代码页,而不再使用硬编码的代码页 437 (#1386)
  • -
  • 在运行时的某些区域中使用的 Dictionary<,> 类被替换为 ConcurrentDictionary<,>,以避免多线程应用程序中的问题 (#1391)
  • -
  • 在使用 IDynamicProperties(FoxPro 方言)时,修复了 NoIVarget 的问题 (#1401)
  • -
  • 修复了 Hex2C() 使用小写字母时与使用大写字母时产生不同结果的问题。
    请注意,这个 bug 也存在于 VO 中,所以现在在 X# 中使用小写十六进制字母的 Hex2C() 的行为与 VO 不同 (#1402)
  • -
    - -
  • 访问已使用 Advantage RDD 打开的已关闭 DbServer 对象上的属性可能会在调试器中引起问题。现在,当服务器关闭时,DbServer 类将返回空值。
  • -
    - 新特性 - -
  • 实现了 CREATE CURSOR 命令 [FoxPro] (#247)。还实现了 CREATE TABLE 和 ALTER TABLE(FoxPro 方言)
  • -
  • 实现了 INSERT INTO 命令(FoxPro 方言,用于从值、数组、对象和内存变量中插入变量)。SQL 查询中的 INSERT INTO 尚不能使用 (FoxPro 方言)
  • -
    - -
  • 在 XSharp.VFP 中实现了 Str() 函数的新 FoxPro 兼容版本 (#386)
  • -
  • 现在,当打开索引文件失败时会抛出错误 (#1358)
  • -
  • 添加了 AscA() 函数,并使 Asc() 依赖于运行时中的 SetAnsi() 设置 (#1376)
  • -
    - 头文件 - Bug 修复 - -
  • 实现了几个缺失的命令 (#1407)
  • -
  • 修复了 SET DECIMALS TO 命令中的拼写错误 (#1406)
  • -
  • 为 GATHER 命令(FoxPro)添加了缺失的 NAME 和 MEMVAR 子句 (#1409)
  • -
  • 更新了几个命令,使一些标记变为可选,并更加兼容各种方言 (#1410, #1412)
  • -
  • 修复了在各种方言中 COMMIT 命令的各种不兼容性问题 (#1411)
  • -
    - Visual Studio 集成 - Bug 修复 - -
  • 修复了通过静态使用引用的类型中查找公共静态字段的问题 (#1307)
  • -
  • 修复了在块语句内定义的局部变量的 intellisense 问题 (#1345)
  • -
  • 修复了 intellisense 不正确地将代码中指定的类型解析为 usings 列表中的另一个类型的问题 (#1363)
  • -
  • 修复了在输入冒号后不正确显示静态方法的成员完成问题 (#1379)
  • -
  • 修复了特定代码导致编辑器冻结的问题 (#1380)
  • -
  • 修复了在某些情况下类导航栏未显示方法名称的问题 (#1381)
  • -
    - 新特性 - -
  • 增加了对 IEnumerable 和 DataTable 调试可视化器的支持 (#1373)。
    请注意,当浏览 X# 数组时,可视化器中的结果看起来非常丑陋,因为可视化器忽略了隐藏属性和字段的属性,以用于我们的 USUAL 类。
  • -
  • 调整了 Globals、Workareas 等调试器窗口,以遵循在 VS 中选择的全局主题 (#1375)。还向 Workarea 窗口添加了状态面板,这样您可以查看工作区状态或字段名称/值。
  • -
  • 为使用 USING VAR 或 USING (LOCAL) IMPLIED 声明的局部变量添加了 intellisense 支持 (#1390)。
  • -
  • 现在 intellisense 数据库使用了一个具有 ARM 支持的 SQLite 包,因此它也将在 Mac 和其他平台上工作 (#1397)。
  • -
    - VOXporter - 修复 - -
  • 修正了 VOXporter 用 {VOXP:UNC} 标记错误修改先前已注释代码的问题 (#1404)
  • -
    - 文档 - Bug 修复 - -
  • 运行时帮助中函数的文档描述有误。
    例如,“Left” 函数的主题标题原为 “Functions.Left Method”,现已更改为 “Left Function”。
  • -
  • 文档中的 “SingleLineEdit” 类被称为 “Real4LineEdit”,已进行修正。
  • -
    - 新特性 - -
  • 我们在 X# 编程指南中添加了有关多个主题的附加文档。
  • -
    - Changes in 2.18.0.4 - 编译器 - Bug 修复 - -
  • 修正了一些与 XBase++ 相关命令的预处理器问题 (#1213, #1288, #1337)
  • -
  • 修正了隐式访问静态类成员的问题(XBase++ 方言) (#1215)
  • -
  • 修正了 DIMENSION 命令(VFP 方言)的解析器错误 (#1267)
  • -
  • 修正了多行代码中 UDC 的预处理器问题 (#1298)
  • -
  • 现在,每个 “unused variable(未使用变量) ”警告都会在变量定义的确切位置报告,而不是总是在第一个位置报告(#1310)
  • -
  • 修正了 SET RELATION 命令 中错误的 “unreachable code(无法到达代码) ”警告 (#1312)
  • -
  • 修正了为编译器生成的 <Module>.$AppInit 和 <Module>.$AppExit 方法生成 XML 文档的问题 (#1316)
  • -
  • 修正了访问另一个对象的 Hidden 字段的问题(XBase++ 方言)(#1335)
  • -
  • 修正了使用显式类指示调用父方法的问题(Xbase++ 方言) (#1338)
  • -
  • 修正了代码 “SLen(c := SomeFunction())” 中错误调用函数两次的问题 (#1339)
  • -
  • 修正了父类方法在派生类中不可见的问题(Xbase++ 方言) (#1349)
  • -
  • 修正了 ::new() 在类方法中无法正常工作的问题(Xbase++ 方言) (#1350)
  • -
  • 修正了当在头文件中定义的标记出现错误时的异常情况
  • -
  • 修正了从 XBase++ 方法返回 super:Init() 时的编译器错误 (#1357)
  • -
  • 修正了同名 .prg 文件中的静态定义问题 (#1361)
  • -
    - 新特性 - -
  • 引入了未为 OUT 参数指定 OUT 关键字的警告 (#1295)
  • -
  • 更新了不带参数的方法和构造函数调用的解析器规则。这可能会加快编译速度。
  • -
  • 编译器不再 “内联” SLen()。如果您在应用程序中引用 XSharp.Core,SLen() 现在会被解析为 X# Core 中的 SLen() 函数。
    如果编译时没有使用 X# 运行时,或者编译时使用的是 Vulcan 运行时,那么现在就需要在代码中添加 SLen() 函数。
    这是 X# Core 中的代码,您可以将其用作模板
    FUNCTION SLen(cString AS STRING) AS DWORD
      LOCAL len := 0 AS DWORD
      IF cString != NULL
         len := (DWORD) cString:Length
      ENDIF
      RETURN len
  • -
  • 添加了对 Harbour 也支持的预处理器命令 #ycommand 和 #ytranslate 的支持。它们的工作方式与 #xcommand 和 #xtranslate 相同,但标记以区分大小写的模式进行比较 (#1314)
  • -
  • 某些 Xbase++ 特定功能的代码生成发生了变化。
  • -
  • 我们使用 IN <ursor> 子句增加了几个 UDC
  • -
    - -
  • 我们为 FoxPro CAST 表达式添加了 UDC 支持
  • -
  • 更多 SET 命令现在也支持 & 运算符
  • -
  • 编译器现在在更多位置支持“Late bound names(后期绑定名称)”,例如在 REPLACE 命令、With 命令等中。现在可以编译而无问题。
  • -
    - cVar := "FirstName"
    WITH oCustomer
      .&cVar := "John"
    END WITH
    and this too

    cVar := "FirstName"
    REPLACE &cVar with "John"
    - 运行时 - Bug 修复 - -
  • 修正了在清除关系之前错误关闭 dbf 文件的问题 (#1237)
  • -
  • 修复了文件创建后索引范围可见性不正确的问题 (#1238)
  • -
  • 修正了 FFirst()/FNext() 无法找到过滤器指定的所有文件的问题 (#1315)
  • -
  • 修正了 DBSetIndex()/VoDbOrdListAdd() 总是将控制顺序重置为 1 的问题 (#1341)
  • -
  • 修复了当键表达式类型为 DATE 时,在 DBFCDX 驱动程序中更新索引键的问题。
  • -
  • 修正了当 Str() 和 StrZero() 的内置最大字符串长度为 30 时的问题(#1352)
  • -
  • RegisteredRDD 类现在使用 ConcurrentDictionary。
  • -
  • 当目标表中缺少一个字段时,修正了 RDD TransRec() 方法中的一个错误 (#1372)
  • -
  • 修正了 Advantage RDD 中的一个问题,以防止在表关闭时调用 ADS 函数
  • -
  • 修复了 Advantage RDD 中的一个问题,即在读取名称不正确的字段时可能出现的问题
  • -
  • 当当前目录为 UNCPath 时,修正了 CurDir() 函数中的一个问题(\\Server\Share\SomeDir) (#1378)
  • -
    - 新特性 - -
  • 已添加对在 USUAL 类型中访问索引器的支持 (#1296)
  • -
  • 我们添加了一个 DbCurrency 类型,当读取货币型字段时,它会从 RDD 返回。
  • -
  • 实现了 TEXT TO FILE 命令 (#1304)
  • -
  • 现在,当创建索引顺序时 tagname > 最大长度时,RDD 会报告错误(对话框) (#1305)
  • -
  • 添加了一个接受 System.Type 参数的函数 _CreateInstance()
  • -
  • 后期绑定代码现在可以检测 Send()、IVarGet() 和 IVarPut() 的调用位置,并在调用代码与类成员声明类型相同时允许访问私有/隐藏字段。这在一些与 XBase++ 相关的更改中使用。
  • -
  • XBase++ 中的类已稍作调整。
  • -
  • 更改了多个 DBF / Workarea / Cursor 相关 UDC 的映射,使其与 FoxPro 更加兼容。
  • -
  • 我们为 FoxPro CAST 表达式添加了运行时支持
  • -
  • 我们对字典进行了一些小的代码优化 (#1371)
  • -
  • 当服务器关闭时,一些 DbServer 属性不再调用 RDD,而是返回空白值。
  • -
    - 类型化 SDK 类 - -
  • 添加了不带参数的 DbServer:Append() 重载 (#1320)
  • -
  • 添加了丢失的 DataServer:LockcurrentRecord() 方法(#1321)
  • -
  • 修复了以 ShellWindow 为所有者创建 DataWindow 时的运行时错误 (#1324)
  • -
  • 将 DataWindow:Show() 方法改为 CLIPPER,以便与现有代码兼容 (#1325)
  • -
  • 修复了在 VO 窗口上使用 ComboBox 时出现的异常 (#1328)
  • -
  • 修正了打开已分配服务器的 DataWindow 时的错误 (#1332)
  • -
  • 修正了以非类型化的 FileSpec 对象作为第一个参数实例化 DBServer 对象时的运行时错误 (#1348)
  • -
  • 修正了在组合框和列表框中显示项目的问题 (#1347)
  • -
  • 当服务器关闭时,一些 DbServer 属性不再调用 RDD,而是返回空白值。
  • -
    - Visual Studio 集成 - Bug 修复 - -
  • 修正了项目文件中 “allow dot(允许点)” 设置的问题(#1192)
  • -
  • $CALLSTACK 等几个宏无法以预期格式返回值。这一问题已得到修复 (#1236)
  • -
  • 修正了当 form.prg 第一行中存在块注释时的生成问题 (#1334)
  • -
  • 修正了在单行中对代码段进行块注释的问题 (#1336)
  • -
  • 修正了当项目文件包含 <GenerateAssemblyInfo>True</GenerateAssemblyInfo> 属性时项目生成失败的问题 (#1344)
  • -
  • 修正了解析器中的一个问题,该问题会导致表达式计算器中 DebuggerDisplay 属性的解析出错。
  • -
  • 新调试器窗口没有遵循当前窗口主题。现在已部分修复 (#1375)
  • -
    - VO 键入编辑器 - -
  • 修正了在 VOWED 中使用特定字体的 CheckBox 和 RadioButton 标题在设计时的显示问题 (#796)
  • -
  • 修正了 VOWED 编辑器将 prg 中的所有现有类更改为分部类的问题 (#814)
  • -
  • 修正了在 VOWED 中错误添加构造函数代码以实例化 DataBrowser 的问题,即使没有(未删除的)数据列也是如此 (#1365)
  • -
  • 修正了 VOMED 中源代码和资源文件中菜单项定义名称的几个问题 (#1374)
  • -
    - VOXporter - 新特性 - -
  • 引入选项(在现有代码中内嵌),用于注释、取消注释和删除原始 VO 代码中的行 (#1303)
  • -
    - - {VOXP:COM} // comment out line - - {VOXP:UNC} // uncomment line - - {VOXP:DEL} and // {VOXP:REM} // remove line - 安装 - 新特性 - -
  • 安装程序现在会检测是否安装了所需的 Visual Studio 组件 “Core Editor ”和“.Net Desktop Development”。
    如果发现一个或多个 VS 安装,但其中没有一个安装同时具备所需的组件,则会显示警告。
  • -
    - Changes in 2.17.0.3 - 编译器 - Bug 修复 - -
  • 修正了与 XBase++ 在使用类成员方面的不兼容问题 (#1215) UNCONFIRMED
  • -
  • 修正了/vo3 选项在 XBase++ 方言中无法正常工作的问题。还添加了对修饰符 final、introduce 和 override 的支持 (#1244)
  • -
  • 修正了在类字段上使用 NEW 修饰符的问题 (#1246)
  • -
  • 修复了几个与 XPP 方言 UDC 有关的预处理器问题 (#1247、#1250)
  • -
  • 修正了 VO 与方法和属性中 INSTANCE 字段的特殊处理不兼容的问题 (#1253)
  • -
  • 修正了调试器不稳定地跳转到不正确行的问题 (#1254,#1264)
  • -
  • 修正了嵌套语句在某些情况下显示错误行号的问题 (#1268)
  • -
  • 修正了没有 CASE 行的 DO CASE 语句会在编译器中产生内部错误的问题 (#1281)
  • -
  • 修复了几个预处理器问题 (#1284、#1289)
  • -
  • 启用后期绑定后,在使用 SUPER 调用不存在的方法时,修正了编译器缺失错误 (#1285)
  • -
  • 修正了 CONST 类字段缺值赋值时出现的发射模块失败错误 (#1293)
  • -
  • 修正了预处理器中重复匹配标记(如 SET INDEX TO 命令中的匹配标记)的问题。
  • -
  • 修正了一个问题,即当接口在编译时为 “未知” 和/或属性名不是 “Item ”时,带有明确接口前缀的属性定义可能导致编译器崩溃 (#1306)
  • -
    - 新特性 - -
  • 已添加对 “经典” INIT PROCEDURE 和 EXIT PROCEDURE 的支持 (#1290)
  • -
  • 当 case 块、if 块和其他块内的语句列表为空时,已添加警告。要抑制该警告,可在代码中添加 NOP 语句。
  • -
  • 我们对编译器中的词法和解析器进行了一些修改。这可能会减少内存占用量,并加快代码的编译速度。
  • -
    - 运行时 - Bug 修复 - -
  • 修正了 CToD() 中的几个问题(与 VO 不兼容) (#1275)
  • -
  • 已添加对 AAdd() 中第 3 个参数的支持,以指定在何处插入新元素 (#1287)
  • -
  • Default() 函数现在不再更新值为 NULL_OBJECT 的 usuals,以便与 Visual Objects 兼容 (#1119)。
  • -
  • 我们为 AdsSQLServer 类添加了参数支持 (#1282)
  • -
    - Visual Studio 集成 - 新特性 - -
  • 我们为以下项目添加了调试器面板窗口:
  • - -
  • Global variables
  • -
  • Dynamic memory variables (Privates and Publics)
  • -
  • Workareas
  • -
  • Settings
  • -
    -
    - -
  • 您可以在调试过程中通过 Debug/XSharp 菜单打开这些窗口。还有一个特殊的 “X# 调试器工具栏”,也只在调试期间显示。
  • -
  • 这些窗口只有在调试的应用程序使用 X# 运行时才会显示信息(因此无法与 Vulcan 运行时结合使用)。
    如果您正在调试使用 X# 运行时的其他语言编写的应用程序,那么这些窗口也会显示相关信息。
    我们计划在今后的版本中为这些窗口添加更多功能,例如当前选定区域的属性和当前选定工作区中的字段/值。
  • -
  • 我们为 X# 文件添加了对 “FileCodeModel ”的支持。WPF 设计器和 XAML 编辑器都会使用此功能。
    现在还修复了 XAML 编辑器中的“转到定义”  (#1026)
  • -
  • X# 项目的若干属性现在已缓存。这将使性能略有提高。
  • -
  • 我们为用户自定义命令添加了 “转到定义” 支持。例如,在 USE 命令的 USE 关键字上选择 “转到定义”,就会跳转到标准头文件中的定义。
  • -
    - Bug 修复 - -
  • 修正了 Type[,] 数组的成员完成问题 (#980)
  • -
  • 修正了当同名类不存在命名空间时命名空间内类的成员补全缺失 (#1204)
  • -
  • 修正了当实体在预处理行中有属性时自动缩进的问题 (#1210)
  • -
  • 修正了某些情况下静态成员的 intellisense 问题 (#1212)
  • -
  • 修正了代码或声明跨多行时的一些 intellisense 问题 (#1221、#1260)
  • -
  • 修正了命名空间内嵌套类的 intellisense 问题 (#1222)
  • -
  • 当使用类型转换时,修正了对 VAR local 类型的错误解析 (#1224)
  • -
  • 修正了编辑器中折叠/展开代码的几个问题 (#1233)
  • -
  • 修正了显示未知类型的假成员完成列表 (#1255)
  • -
  • 修复了使用 Ctrl + 空格键自动键入文本的一些问题(完整 Word) (#1256)
  • -
  • 修正了 Text .. EndText 语句的着色问题 (#1257)
  • -
  • 修正了泛型的工具提示提示的几个问题 (#1258、#1259、#1273)
  • -
  • 修正了委托签名不显示在 intellisense 工具提示中的问题 (#1265)
  • -
  • 修正了带有多行注释的代码的无效着色 (#1269)
  • -
  • 修正了键入 “self. ”后成员完成中的无效条目。(#1270)
  • -
  • 修正了在选项 X# Custom Editors\Other Editors\Disassembler 中指定的路径带有空格时调用反汇编器的问题 (#1271)
  • -
  • 修复了使用某些 UDC 调用时编辑器着色完全停止的问题 (#1272)
  • -
  • 修正了 FOR 语句中 CONSTANT local 变量不显示提示的问题 (#1274)
  • -
  • 修正了代码包含 LOOP 或 EXIT 关键字时的自动缩进问题 (#1278)
  • -
  • 修正了编辑器在特定情况下输入括号时出现的异常 (#1279)
  • -
  • 修正了在设计模式下尝试打开文件名以大括号开头的文件时出现错误的问题 (#1292)
  • -
  • VS 内的 “XSharp 网站 ”菜单选项已损坏 (#1297)
  • -
  • 修复了匹配相同标识符功能中可能导致 Visual Studio 运行速度减慢的问题
  • -
  • 修复了在调试过程中打开文件时可能发生的 VS 锁定问题。
  • -
  • 带有静态构造函数和普通构造函数的类的参数提示未得到正确处理。这一问题已得到修复。
  • -
    - -
  • 在打开项目时,如果缺少从属项(如 .resx 文件或 .designer.prg 文件)与其父项之间的从属关系,则可能出现异常,导致项目无法打开。这一问题已得到修复。
  • -
  • 当同一行出现两个编译器错误且错误代码相同时,有时会在 VS 输出窗口中显示,但不在错误列表中显示。这一问题已得到修复 (#1308)
  • -
    - VOXporter - 新特性 - -
  • 已添加对特殊标记 {VOXP:COM}、{VOXP:UNC} 和 {VOXP:DEL} 的支持。/ {VOXP:REM},以注释、取消注释和删除原始 VO 代码中的行 (#1303)
  • -
    - Changes in 2.16.0.5 - 编译器 - Xbase++ 方言的新特性 - 我们对 Xbase++ 类定义的生成方式进行了多项修改。请使用新版本并检查您的代码! - -
  • 现在我们为所有类生成一个类函数。它返回的对象与 Xbase++ 类的 ClassObject() 方法相同。
    无论使用 /xpp1 编译器选项与否,都会生成该类函数。
    Class 函数依赖于函数 __GetXppClassObject 和 XSharp.XPP.StaticClassObject 类,这两个函数都可以在 XSharp.XPP 程序集 (#1235) 中找到。
    通过类函数,您可以访问类变量和类方法。
  • -
  • 在 Xbase++ 中,您可以使用相同名称的字段(VAR)和属性(ACCESS / ASSIGN METHOD),甚至具有相同的可见性。而以前是不支持的。
    现在,编译器会自动将字段设为 protected(或 FINAL 类的 private),并使用 [IsInstance] 属性对其进行标记。
    在类的代码中,编译器会将名称解析为字段。在类外的代码中,编译器将把名称解析为属性。
  • -
  • 对于派生类,编译器现在会自动生成一个带有父类名称的属性,该属性被声明为父类,并返回等同于 SUPER 的属性。
  • -
  • 我们更正了 Xbase++ 方法的 FINAL、INTRODUCE 和 OVERRIDE 关键字 (#1244)
  • -
  • 我们更正了在 XBase++ 方言中访问静态类成员的一些问题 (#1215)
  • -
  • 现在,您可以使用 “::” 前缀访问类变量和类方法内部的类方法。
  • -
  • 当一个类被声明为另一个类的子类时,编译器会在子类中生成一个(类型化)属性来访问父类,就像 Xbase++ 所做的那样。该属性返回值为 “super”。
  • -
  • 我们现在支持变量和类变量的 READONLY 子句。这意味着必须在 Init() 方法(实例变量)或 InitClass() 方法(类变量)中分配变量。
  • -
    - - 其他方言的新特性 - -
  • 在 Visual Objects 中,您可以使用 INSTANCE 关键字声明字段,并添加与 INSTANCE 字段同名的 ACCESS/ASSIGN 方法。
    在以前的 X# 版本中,不支持这一功能。
    现在,编译器可以正确处理这种情况,在类的方法/属性内的代码中将名称解析为字段,在类外的代码中将名称解析为属性。
  • -
  • 现在,PPO 文件包含用户定义命令和翻译的原始空白。
  • -
    - Bug 修复 - -
  • 修正了 VO 方言中的一些方法重载解析问题 (#1211)
  • -
  • 修正了大量 DO CASE 语句和大量 IF ELSEIF 语句的内部编译器错误(堆栈不足) (#1214)。
  • -
  • 修正了插值/扩展字符串语法的一个问题 (#1218)
  • -
  • 修正了一些不正确的问题,允许使用冒号操作符访问静态类成员,或使用点操作符访问实例成员 (#1219,#1220)
  • -
  • 修正了使用 MemVarPut() 创建的内存变量的错误可见性 (#1223)
  • -
  • 修正了名称中带引号的 _DLL FUNCTION 无法正常工作的问题 (#1225)
  • -
  • 如果预处理器生成了日期和/或日期时间字面量,则无法识别这些字面量。这一问题已得到修复 (#1232)
  • -
  • 修正了预处理器匹配最后一个可选标记的问题 (#1241)
  • -
  • 修正了在 Xbase++ 方言中识别 ENDSEQUENCE 关键字的问题 (#1242)
  • -
  • 现在只有 USUAL 类型的参数才支持使用 NIL 的默认参数值。对其他参数类型使用 NIL 会产生(新的)警告 XS9117
    此外,将 NIL 赋值给符号,或将 NIL 作为参数用于期望使用符号的函数/方法调用,现在也会产生警告 (#1231)。
  • -
  • 修正了预处理器中的一个问题,即在结果流中两个相邻的标记没有合并为一个标记 (#1247)
  • -
  • 修正了预处理器中的一个问题,即当元素以左括号开始时,预处理器无法检测到可选元素 (#1250)
  • -
  • 修正了包含字面双引号的内插字符串的问题,如 i"SomeText""{iNum}"" "
  • -
  • 修正了 2.16 早期版本中引入的局部函数/程序问题。
  • -
  • 在解析时生成的警告可能会导致另一个关于预处理器定义的警告,即使在不需要预处理器定义的情况下也是如此。这一问题已得到修复。
  • -
  • 修正了 2.16 早期版本中引入的以 “a := NIL,b := NIL as USUAL” 声明的参数的默认参数值问题
  • -
  • 修复了 2.16 早期版本中调试器行为不稳定的问题。
  • -
  • 当您引用外部程序集中的类型时,该类型依赖于另一个外部程序集,但您没有对该另一个外部程序集的引用,那么编译可能会失败,而没有适当的解释。现在,我们会产生一个正常的错误,提示您需要添加对其他程序集的引用。
  • -
  • 对于没有 CLIPPER 调用约定的函数或方法,允许省略参数的类型。这些参数被假定为 USUAL 类型。
    现在会产生一个新的警告 XS9118.
  • -
    - 重大更改 - 如果您正在使用我们的解析器解析源代码,请检查您的代码。我们对处理 if ... else 语句和 case 语句的语言定义做了一些修改(两条规则共享一条新的 condBlock 规则)。这消除了语言中的一些递归。此外,还修改了一些 Xbase++ 的特定规则。请查看 language definition online - 运行时 - 新特性 - -
  • 添加了 DOY() 函数。
  • -
  • 添加缺失的 ADS_LONG 和 ADS_LONGLONG 定义.
  • -
    - -
  • 提高了网络驱动器上 CDX 跳转操作的速度 (#1165)
  • -
    - Bug 修复 - -
  • 修正了 DbSetRelation() 和 RLock() 的一个问题 (#1226)
  • -
  • 调整了从 NULL_PSZ 到字符串的隐式转换,现在返回 NULL 而不是空字符串。
  • -
  • 部分初始化代码已从 _INIT 程序移至 SQLConnection 类的静态构造函数,以便更方便地在非 X# 应用程序中使用该类。
  • -
  • 修正了使用 MemVarPut 函数创建的动态内存变量的可见性问题 (#1223)
  • -
  • 修正了独占模式下 DbServer 类的一个问题 (#1230)。
  • -
  • 从 NULL_PSZ 到字符串的隐式转换返回空字符串而非 NULL (#1234)。
  • -
  • 修正了当日、月或年的前缀为空格时 CTOD() 函数中的一个问题。
  • -
  • 修正了 ADS RDD 中 OrderListAdd() 的一个问题。当索引已打开时,RDD 不再返回错误。
  • -
  • 修正了 MemRealloc 中的一个问题,即对同一指针的第二次调用将返回 NULL_PTR (#1248)
  • -
    - VOSDK - -
  • SDK 类中的全局数组现在由 SQLConnection 类的构造函数初始化,以解决主应用程序不包含 SQL 类程序集链接时出现的问题。
  • -
    - Visual Studio 集成 - 调试 - -
  • 调试器表达式计算器现在也能求值后期绑定的属性和字段(如果在项目中启用了编译器选项)。
    如果这会产生负面影响,可以在 “工具/选项 调试/X# Debugger” 中禁用。
  • -
  • 现在,调试器表达式计算器将使用主程序(如果该程序是 X# 项目)中的编译器选项进行初始化。
    调试器选项对话框 上的设置现在仅在调试由非 X# 启动项目加载的 DLL 时使用。
  • -
  • 对于实例字段、属性和方法,调试器表达式计算器现在总是接受 “.” 字符,与项目选项中的设置无关。
    之所以需要这样做,是因为在向观察窗口添加表达式或更改属性或字段值时,VS 调试器中的几个窗口会自动插入 “.” 字符。
  • -
    - 新特性 - -
  • 已添加对在 DbServer 编辑器中导入索引的支持。
  • -
  • X# 项目系统现在可以记住在设计模式下 Windows 编辑器中打开的窗口,并在重新打开解决方案时正确地重新打开它们。
  • -
  • 我们为 Harbour 控制台应用程序和 Harbour 类库添加了模板。
  • -
  • 我们为 FoxPro 语法类和 Xbase++ 语法类添加了项目模板。
  • -
  • FoxPro 和 XBase++ 方言的类模板现在包含该方言的类定义。
  • -
  • 我们改进了 VS 编辑器对 PPO 文件的支持。
  • -
  • 我们更新了部分项目模板。
  • -
    - Bug 修复 - -
  • 修正了编辑器中 “:=” 运算符的成员列表显示不正确的问题 (#1061)
  • -
  • 修正了 VOMED 生成的菜单项 “定义” 名称与 VO 生成的名称不同的问题 (#1208)。
  • -
  • 修正了 VOWED 在某些情况下生成的代码行顺序不正确的问题 (#1217)。
  • -
  • 转回我们自己的 Mono.Cecil 版本,以避免在 Visual Studio 中有 Xamarin (MAUI) 工作负载的计算机上出现问题。
  • -
  • 修正了在表单设计器中打开包含用函数调用初始化的字段的表单时出现的问题 (#1251)
  • -
  • 关闭解决方案时处于 [设计] 模式的窗口,现在重新打开解决方案时可在 [设计] 模式下正确打开。
  • -
    - Changes in 2.15.0.3 - 编译器 - 新特性 - -
  • 使用 STACKALLOC 语法在堆栈(而非堆)上分配内存块 (#1084)
  • -
  • 为 XBase++ 方法添加了 ASYNC 支持 (#1183)
  • -
    - Bug 修复 - -
  • /allowdot 被禁用时,在使用点访问实例成员时,修正了一些特定情况下编译器缺失的错误 (#1109)
  • -
  • 修正了通过引用传递参数的一些问题 (#1166)
  • -
  • 修正了插值字符串的一些问题 (#1184)
  • -
  • 修正了宏编译器无法检测错误访问静态/实例成员的问题 (#1186)
  • -
  • 修正了 ELSEIF 和 UNTIL 语句错误信息中报告的行号不正确的问题 (#1187)
  • -
  • 当启用 /cs 选项时,修正了在属性设置器内使用名为 “Value ”的 iVar 的问题 (#1189)
  • -
  • 修复了缺少 Start() 函数时错误信息中报告的文件/行信息不正确的问题 (#1190)
  • -
  • 修正了某些情况下关于模棱两可方法的错误警告 (#1191)
  • -
  • 修正了嵌套方括号(在 SUM 和 REPLACE 命令中)的预处理器问题 (#1194)
  • -
  • 修正了 VO 方言中某些情况下错误的方法重载解析 (#1195)
  • -
  • 修正了 OBJECT/IntPtr 参数不正确的模糊调用错误 (#1197)
  • -
  • 修正了在某些情况下跨步代码时调试不稳定的问题 (#1200、#1202)
  • -
  • 修正了一个问题,即当开始和结束之间的代码包含编译器警告时,ENDIF、NEXT、ENDDO 等 “结束关键字”的缺失不会被报告 (#1203)
  • -
  • 修正了生成系统中的一个问题,即有时会显示关于不正确的 “RuntimeIdentifier” 的错误信息
  • -
    - 运行时 - Bug 修复 - -
  • 修正了 DBSort() 中的运行时错误 (#1196)
  • -
  • 修正了 ConvertFromCodePageToCodePage 函数中的错误
  • -
  • 更改 XSharp.RuntimeState 的启动代码可能导致代码页不正确
  • -
    - Visual Studio 集成 - 新特性 - -
  • 为 WED 添加了 VS 选项,以便使用乘法器手动调整生成资源中的 x/y 位置/大小 (#1199)
  • -
  • 新增选项页面,用于控制编辑器在 Complete Word (Ctrl+Space)命令中查找标识符的位置。
  • -
  • 对调试器表达式计算器进行了大量改进 (#1050)。请注意,该调试器表达式计算器仅适用于 Visual Studio 2019 及更高版本。
  • -
  • 添加了调试器选项页面,用于控制新的调试器表达式计算器如何解析表达式。
    您还可以更改这里的设置,禁止在调试时进行编辑。
  • -
  • 我们为 Visual Studio 源代码编辑器添加了上下文帮助。当您按下符号上的 F1 键时,我们将检查该符号。如果符号来自 X#,我们将打开帮助文件中的相关页面。如果来自 Microsoft,我们将打开 Microsoft 在线文档中的相关页面。
    在下一个版本中,我们可能会添加一个选项,让第三方也能注册他们的帮助集。
  • -
  • 如果在编辑器中选择了属于代码块一部分的关键字,如 CASE、OTHERWISE、ELSE、ELSEIF,那么编辑器现在将高亮显示该代码块中的所有关键字。
  • -
  • 跳转关键字 EXIT 和 LOOP 现在也作为其所属重复程序块的一部分突出显示。
  • -
  • 在编辑器中选择 RETURN 关键字后,与之匹配的 “实体” 关键字(如 FUNCTION、METHOD)也会高亮显示。
  • -
  • 在切换目标框架时,为 Application project options 页面添加了警告。
  • -
    - Bug 修复 - -
  • 当使用光标键在编辑器中移动到不同行时,修正了之前被破坏的自动同步大小写问题 (#722)
  • -
  • 修正了使用 Control+Space 完成代码时的一些问题 (#1044, #1140)
  • -
  • 修正了在某些情况下输入“:” 时的 intellisense 问题 (#1061)
  • -
  • 修复了多行表达式(方法/函数调用)中的参数工具提示 (#1135)
  • -
  • 修正了格式文档和 PUBLIC 修饰符的问题 (#1137)
  • -
  • 修正了在同一文件中定义多个分部类时转到定义无法正常工作的问题 (#1141)
  • -
  • 修正了自动缩进的一些问题 (#1142, #1143)
  • -
  • 修正了调试时在新行开头不显示标识符值的问题 (#1157)
  • -
  • 修正了某些情况下 LOGIC 的 intellisense 问题 (#1185)
  • -
  • 修正了一个问题,即完成列表可能包含从显示完成列表的位置不可见的方法 (#1188)
  • -
  • 修正了编辑器中嵌套类型的显示问题 (#1198)
  • -
  • 清理了多个 X# 项目模板,修复了调试/输出文件夹位置不正确的问题 (#1201)
  • -
  • 在 VS 编辑器中撤销大小写同步不起作用,因为编辑器会立即再次同步大小写 (#1205)
  • -
  • 重建 intellisense 数据库不再重启 Visual Studio (#1206)
  • -
  • 现在,“VO 菜单编辑器” 使用与原始 VO 应用程序中相同的菜单项 “定义值”(需要重新导入应用程序才能生效) (#1207)
  • -
  • 对我们的项目系统和语言服务的更改可能会导致 Visual Studio 某些版本中的 “在文件中查找 ”功能被破坏。 这一问题已得到修复。
  • -
  • 修正了转到定义对 protected 或 private 成员不起作用的问题
  • -
  • 修正了一个问题,即对于某些文件,编辑器顶部的下拉组合框无法正确同步。
  • -
    - 文档 - 更改 - -
  • 类型化 SDK 中的一些方法被记录为 Function。现在它们被正确地记录为 Method
  • -
  • 类的 “属性列表” 和 “方法列表” 现在包括对继承自父类的方法的引用。不包括从 .Net 类继承的方法,如从 System.Object 继承的 ToString()。
  • -
    - Changes in 2.14.0.2, 3 & 4 - Visual Studio 集成 - Bug 修复 - -
  • 修复了在 VS 2017 中打开 PRG 文件时 X# 编辑器出现的异常
  • -
  • 在有 XML 注释的条目后一行用回车键从完成列表中选择成员时,可能会在编辑器中插入额外的三斜线 (///) 字符。
  • -
  • 插入 XML 注释的三斜线命令无法正常工作。现已修复。
  • -
  • 修正了带前导 XML 注释的实体的实体分隔符未显示在正确行上的问题
  • -
  • 修正了源代码中没有构造函数的类型的速览定义问题
  • -
  • 修正了当关键字大小写不是大写时,执行接口操作的一个问题
  • -
  • 修正了在当前行中过早同步关键字大小写的问题。
  • -
  • 修正了 IF、DO WHILE 等关键字后的缩进问题
  • -
  • 修正了调试时选择行尾字词的问题
  • -
  • 修复了格式化文档可能锁定 VS 的问题
  • -
  • 修正了 GET 和 SET 等访问器未在属性块内缩进的问题
  • -
  • 修复了 “格式化文档” 在某些文档中不起作用的问题
  • -
  • 更改了 VS 内部负责关键词着色和衍生任务的后台扫描的优先级。
  • -
    - Changes in 2.14.0.1 - 编译器 - Bug 修复 - -
  • 修正了一个日期字面量问题,该问题会导致一条关于未知别名 “gloal ”的信息 (#1178)
  • -
  • 修正了 AssemblyFileVersion 和 AssemblyInformationalVersion 中前导 0 字符丢失的问题。如果属性中没有通配符 “*”,则会保留这些前导零 (#1179)
  • -
    - 运行时 - Bug 修复 - -
  • 2.14.0.0 的运行时 DLL 标记了 TargetFramework 属性。这造成了一些问题。运行时动态链接库不再设置该属性 (#1177)
  • -
    - Changes in 2.14.0.0 - 编译器 - Bug 修复 - -
  • 修正了当类型和局部变量具有相同名称时解析方法的问题 (#922)
  • -
  • 改进了编译器隐式生成的方法(INIT、隐式构造函数)的 XML 文档消息 (#1128)
  • -
  • 修正了带有默认参数值的 DELEGATE 的内部编译器错误 (#1129)
  • -
  • 修正了获取结构元素指针时内存地址偏移计算不正确的问题 (#1132)
  • -
  • 修正了 #pragma 警告指令无意中启用/禁用其他警告的问题行为 (#1133)
  • -
  • 修正了调试时标记当前执行的完整代码行的问题 (#1136)
  • -
  • 当声明全局内存变量时,修正了与 VO 值初始化不兼容的行为 (#1144)
  • -
  • 修正了 DO 的编译器规则无法识别“&”操作符的问题 (#1147)
  • -
  • 修正了与收缩转换警告有关的 ^ 操作符的不一致行为 (#1160)
  • -
  • 修复了 CLOSE 和 INDEX UDC 命令的若干问题 (#1162、#1163)
  • -
  • 修正了错误 XS0161 报告的错误行:并非所有代码路径都返回值 (#1164)
  • -
  • 修复了缺少 Start() 函数时错误信息中报告的错误文件名 (#1167)
  • -
  • UDC 中定义的命令的 PDB 信息现在会突出显示整行,而不仅仅是第一个关键字
  • -
  • 修复了 CLOSE ALL 和 CLOSE DATABASE UDC 中的一个问题。
  • -
    - 运行时 - 新特性 - -
  • 为 DbNotificationType 枚举添加了两个新值: BeforeRecordDeleted 和 BeforeRecordRecalled。还添加了 AfterRecordDeleted 和 AfterRecordRecalled,它们是已存在的 RecordDeleted 和 RecordRecalled 的别名 (#1174)
  • -
    - Bug 修复 - -
  • 已添加/更新 Win32API SDK 库中的若干定义 (#696)
  • -
  • 修正了 “SkipUnique” 无法正常工作的问题 (#1117)
  • -
  • 修正了当底部范围大于最高可用键值时的 RDD 范围问题 (#1121)
  • -
  • 修正了 Win32API SDK 库中 LookupAccountSid() 函数的签名 (#1125)
  • -
  • 改进了在索引表达式中尝试使用 Trim() 等函数(可改变键字符串长度)时的异常错误信息 (#1148)
  • -
  • 修正了当 IIF 语句中存在赋值时出现的宏编译器运行时异常 (#1149)
  • -
  • 修正了在后期绑定调用中解析正确重载方法的问题 (#1158)
  • -
  • 修正了 FoxPro 方言中参数化 SQLExec() 语句的一个问题
  • -
  • 修正了 Days() 函数中的一个问题,即使用了不正确的每日的秒数。
  • -
  • 修正了 Advantage RDD 中的一个问题,即 FieldGet 返回的字段尾部有 0 字符。现在这些字符会被空格取代。
  • -
  • 修正了 ADS RDD 中 DBI_LUPDATE 的一个问题
  • -
  • 修复了调试器显示 USUAL 类型的问题。
  • -
    - Visual Studio 集成 - 新特性 - -
  • 现在使用 “引用管理器 ”而不是 “添加引用对话框 “ 来添加引用 (#21,#1005)
  • -
  • 在 “解决方案资源管理器” 上下文菜单中添加了一个选项,用于在 form.prg 和 form.designer.prg 中拆分 Windows 表单 (#33)
  • -
  • 我们在工具/选项 TextEditor/X# 设置中添加了一个选项页,允许您启用/禁用 X# 源代码编辑器中的某些功能,如 “高亮显示单词”、“括号匹配 ”等。备份 Windows 窗体编辑器源代码的选项已从文本编辑器选项页移至自定义编辑器选项页。在 “工具/选项 ”对话框中搜索 “备份” 即可找到该设置。
  • -
  • 所有源代码项目的工具提示现在都包含位置(文件名和行/列)
  • -
  • 我们已在所有选项页面上添加了 “搜索关键字”。
  • -
    - Bug 修复 - -
  • 修正了当解决方案处于团队基础服务器 SCC 下时重命名文件的问题 (#49)
  • -
  • WinForms 设计器现在可忽略 form.prg 和 designer.prg 文件中指定的名称空间的差异(使用 form.prg 中的名称空间) (#464)
  • -
  • 修正了某些情况下类的鼠标下工具提示不正确的问题 (#871)
  • -
  • 修正了带有扩展方法的枚举类型的代码完成问题 (#1027)
  • -
  • 修正了枚举的一些 intellisense 问题 (#1064)
  • -
  • 修正了 VS 2022 中 Nuget 软件包导致首次尝试生成项目失败的问题 (#1114)
  • -
  • 修正了 XML 文档工具提示中的格式问题 (#1127)
  • -
  • 修正了在编辑器的代码完成列表中包含虚假的额外静态成员的问题 (#1130)
  • -
  • 修正了转到定义、速览定义、QuickInfo 提示和参数提示中未包含扩展方法的问题 (#1131)
  • -
  • 当在参数列表内使用 IIF() 等编译器伪函数时,修正了为参数提示确定正确参数编号的问题 (#1134)
  • -
  • 修正了调试时在带下划线的编辑器中用鼠标双击选择单词的问题 (#1138)
  • -
  • 修正了在调试时计算名称中含有下划线的标识符值的问题 (#1139)
  • -
  • 修正了标识符高亮导致 VS 编辑器在某些情况下挂起的问题 (#1145)
  • -
  • 修正了 WinForms 设计器中生成的事件处理程序方法的缩进 (#1152)
  • -
  • 修正了 WinForms 设计器在添加新控件时重复字段的问题 (#1154)
  • -
  • 修复了 WinForms 设计器移除 #region 指令的问题 (#1155)
  • -
  • 修正了 WinForms 设计器删除 PROPERTY 声明的问题 (#1156)
  • -
  • 修正了在某些情况下本地类型查找失败的问题 (#1168)
  • -
  • 修正了代码中扩展方法的存在导致成员列表无法填充的问题 (#1170)
  • -
  • 修正了在未选择项目的情况下完成成员完成列表时出现的问题 (#1171)
  • -
  • 修正了在类的静态成员类型上显示成员完成度的问题 (#1172)
  • -
  • 修正了单行实体(如 GLOBAL、DEFINE、EXPORT 等)后的缩进问题 (#1173)
  • -
  • 修正了扩展方法的参数提示问题 (#1175)
  • -
  • 修正了命名空间和嵌套类的工具提示问题 (#1176)
  • -
  • UDC 中的可选标记在源代码编辑器中未着色为关键字
  • -
  • 修正了 CodeDom 提供程序中的一个问题,即在为 WPF 项目生成代码时,由于依赖 Microsoft.VisualStudio.Shell.Design 15.0 版本,因此无法在生成服务器上加载。
  • -
    - Changes in 2.13.2.2 - 编译器 - Bug 修复 - -
  • 仅使用 INSTANCE 修饰符声明的类成员被生成为 public。现在已改为 protected,就像在 Visual Objects 中一样 (#1115)
  • -
    - 运行时 - Bug 修复 - -
  • IVarGetInfo() 返回的 PROTECTED 和 INSTANCE 成员值不正确。此问题已得到修复。(#1116)
  • -
  • Default() 函数将以 NULL_OBJECT 初始化的 usual 变量更改为新值。这与 Visual Objects 不兼容 (#1119)
  • -
    - Visual Studio 集成 - 新特性 - -
  • Rebuild Intellisense Database 菜单选项现在会在重启 Visual Studio 之前要求确认 (#1120)
  • -
  • 现在可以隐藏解决方案资源管理器中的 “Include Files” 节点(工具/选项 X# Custom Editors/Other Editors)
  • -
    - Bug 修复 - -
  • CATCH 子句中声明的变量的类型信息不可用。该问题已得到修复 (#1118)
  • -
  • 修复了参数提示的几个问题 (#1098、#1065)
  • -
  • 修复了当光标位于 “global” 实体(如非常大的大型项目中的函数或过程)中的未声明标识符上时的性能问题
  • -
  • 当 #include 语句的源代码包含相对路径时,“Include Files” 节点可能包含重复引用,例如
    #include "..\GlobalDefines.vh"
  • -
    - -
  • 在打开解决方案时,禁止在解决方案资源管理器中展开 “Include Files” 节点。
  • -
  • 单字词(如 i、j、k)没有通过 “高亮显示单词 ”功能高亮显示
  • -
  • 在 quickinfo 工具提示中,“ptr ”类型没有用关键字颜色标出
  • -
  • 在关键字大小写上,nameof、typeof 和 sizeof 关键字不同步
  • -
    - Changes in 2.13.2.1 - 编译器 - 新特性 - -
  • 现在,解析器可以识别 PUBLIC 和 PRIVATE 内存变量声明中的 AS <type> 子句,但会忽略这些子句并发出警告
  • -
  • 我们为使用 LPARAMETERS 声明的局部变量添加了 AS <type> 支持。函数/过程仍采用 clipper 调用约定,但局部变量采用声明的类型。
  • -
    - Bug 修复 - -
  • 在未选择 /memvar 编译器选项的情况下,PUBLIC 和 PRIVATE 关键字有时会被误解为内存变量声明。我们添加了解析器规则以防止这种情况发生:当未选择 /memvar 时,PUBLIC 和 PRIVATE 仅用作可见性修饰符
  • -
  • 修复选择函数和方法重载时出现的问题 (#1096、#1101)
  • -
  • 2.13.2.0 版引入了一个问题,可能会导致超大源文件出现严重的性能问题。2.13.2.1 版已修复了这一问题。
  • -
    - - 运行时 - Bug 修复 - -
  • 当运行时无法解决对重载方法的后期绑定调用时,它会产生一条包含所有相关重载方法列表的错误信息 (#875#1096)
  • -
  • 为 FoxPro 方言添加的 .NULL. 相关行为破坏了涉及 usuals 的现有代码。在 FoxPro 方言中,DBNull.Value 现在被视为 .NULL.,但在其他方言中则被视为 NULL_OBJECT / NIL。
  • -
  • VFP 库中 PropertyContainer 类的几个内部成员现在是 Public 成员
  • -
    - Visual Studio 集成 - Bug 修复 - -
  • 速览定义、转到定义等的查找代码过滤掉了实例方法,只返回静态方法。这一问题已得到修复 (#1111#1100)
  • -
  • 为修复键入时的缩进问题而做的几处修改 (#1094)
  • -
  • 修正了参数提示的几个问题 (#1098#1066#1110)
  • -
  • 最近为支持将 packages.config 转换为软件包引用的向导所做的更改对在 Visual Studio 内生成过程中还原 nuget 的操作产生了负面影响。这一问题已得到修复。(#1113#1114)
  • -
  • 修复了 CATCH、ELSEIF、FOR、FOREACH 等行中变量的识别问题 (#1118)
  • -
  • 修复了默认命名空间中类型的识别问题 (#1122)
  • -
    - Changes in 2.13.1 - 编译器 - 新特性 - -
  • FoxPro 方言中的 PUBLIC 和 PRIVATE 语句现在支持内联赋值,例如
    PUBLIC MyVar := 42
    除了名称为 “FOXPRO” 和 “FOX” 的变量外,没有初始化的 PUBLIC 值将是 FALSE。在 FoxPro 方言中,这些变量的初始化值为 TRUE
  • -
    - Bug 修复 - -
  • 修正了在 foxpro 方言中初始化 File Wide 公共文件的问题
  • -
  • 对于复杂表达式,错误信息的列号不一定正确。这一问题已得到修复 (#1088)
  • -
  • 修正了词法器中的一个问题,即当源代码包含跨多行的语句时(通过使用分号作为续行符),行号不正确 (#1105)
  • -
  • 修正了当一个或多个重载有一个 Nullable 参数时重载解析的问题(#1106),例如
      class Dummy    
         method Test (param as usual) as int
         .
         method Test(param as Int? as int
         .
      end class
  • -
  • 修正了在使用 /fox2 编译器编译选项(“兼容数组处理”)的 FoxPro 方言中,针对未知类型变量的后期绑定方法调用和/或数组访问的代码生成问题 (#1108)。
    这样的表达式  

      undefinedVariable.MemberName(1)

    被解释为数组访问,但也可能是方法调用。
    现在,编译器生成的代码会调用运行时函数,在运行时检查 “MemberName” 是否是方法或属性。
    如果它是一个属性,运行时将假定它是一个数组,并访问第一个元素。
    包含 2 个以上参数或非数字参数的代码,如

      undefinedVariable.DoSomething("somestring")

    不受影响,因为 “somestring” 不能是数组索引。
    提示:不过,我们建议始终声明变量并指定其类型。这有助于在编译时发现问题,并能更快地生成代码。
  • -
    - - 运行时 - 新特性 - -
  • 添加了在运行时解决方法调用或数组访问的功能 (#1108)
  • -
  • 为 XSharp.RT.Debugger 库中的工作区窗口(WorkareasWindow)添加了转到记录编号功能
  • -
    - Visual Studio 集成 - 新特性 - -
  • 现在,VS 项目树(在一个特殊节点中)显示项目使用的包含文件 (#906 )
    这包括项目本身的包含文件,也包括 XSharp 文件夹或 Vulcan 文件夹中的包含文件(如适用)。
  • -
  • 我们尽可能在项目树和其他几个位置使用 Visual Studio 的内置镜像。
  • -
  • 现在,我们在 VS 中的后台分析程序会在生成过程中暂停,以减少对生成的干扰。
  • -
  • 我们在缩进选项中添加了一个设置,这样您就可以控制类字段和属性的缩进,并将其与方法分开。
    因此,您可以选择缩进字段和属性,而不缩进方法。这一点也已添加到 .editorconfig 文件中
  • -
    - Bug 修复 - -
  • 修正了 “速览定义” 和 “转到定义” 的问题
  • -
  • 在查找函数时,我们有时会(意外地)将其他类中的静态方法也包括在内。
  • -
  • 在解析 QuickInfo 和速览定义的标记时,如果方法名称之后和开放括号之前有空格,则无法找到方法名称。
  • -
  • 修正了一个问题,即在保存时,项目范围内的资源和设置(从项目属性页面添加)无法获得文件后面的代码
  • -
  • 调用构造函数的行上的 “快速信息 ”和 “转到 ”定义现在将显示/转到该类型的第一个构造函数,而不再显示/转到类型声明
  • -
  • 当项目的生成过程因缺少资源或其他资源相关问题而失败时,错误列表不会正确更新。这一问题已得到修复 (#1102)
  • -
  • XSharpDebugger.DLL 未正确安装到 VS2017 和 VS2019 中。
  • -
    - Changes in 2.13 - 编译器 - 新特性 - -
  • 我们新增了一个编译器选项 /allowoldstyleassignments,允许在赋值时使用 “=” 运算符而不是 “:=”。
    该选项在 VFP 方言中默认为启用,而在所有其他方言中默认为禁用。
  • -
    - -
  • 我们修改了与数字转换有关的 /vo4 和 /vo11 命令行选项的行为。
    /vo4 之前,它只与整数之间的转换有关。现在,它已扩展到小数(如 float、real8、十进制和货币)和整数之间的转换。
    在原始语言(VO,FoxPro)中,您可以将带有整数值的分数赋给变量而不会出现问题。
    在.NET中,你不能这样做,但你必须在赋值时添加一个强制转换:
  • -
    - LOCAL integerValue as INT
    LOCAL floatValue := 1.5 as FLOAT
    integerValue := floatValue          // 无转换:如果不进行转换,将无法在 .Net 中编译
    integerValue := (INT) floatValue    // 显式转换:可在 .Net 中编译
    ? integerValue

    如果启用了编译器选项 /vo4,那么不带强制转换的赋值也能正常工作。
    编译器选项 /vo4 增加了一个隐式转换
    在这两种情况下,编译器都会发出警告:
    warning XS9020: 将 “float ”缩小转换为 “int ”可能导致数据丢失或溢出错误
    上述整数 integerValue 的值由 /vo11 编译器选项控制:
    默认情况下,.Net 将小数值转换为整数值时,会四舍五入为零,因此值为 1。
    如果启用编译器选项 /vo11,小数将四舍五入为最接近的偶数整数值,因此示例中 integerValue 的值将是 2。
    这并不是什么新鲜事。
    我们在 2.13 版中进行了修改,以确保 X# 数字类型的这种差异不再在运行时确定,而是在编译时确定。
    在早期版本中,这个问题是由运行时中 FLOAT 和 CURRENCY 类型的转换运算符处理的。
    这些类根据主程序中的  /vo11 设置选择四舍五入方法,该设置存储在 RuntimeState 对象中。
    但是,当程序集使用  /vo11 编译,而主程序不使用 /vo11 编译时,可能会产生不必要的副作用。
    例如,ReportPro 或 bBrowser 就可能出现这种情况。
    如果这样一个程序库的作者现在选择使用  /vo11 进行编译,那么他可以肯定,他代码中的所有这些转换都将根据他的选择四舍五入为零或四舍五入为最接近的偶数整数。
    - -
  • 编译时代码块的 DebuggerDisplay 属性已更改。现在你可以在调试器中看到编译时代码锁定的源代码。
  • -
    - Bug 修复 - -
  • 修正了 ASYNC/AWAIT 的代码生成问题 (#1049)
  • -
  • 修正了 VFP 方言中 CODEBLOCK 的 Evaluate() 的内部编译器错误 (#1043)
  • -
  • 修正了一个内部编译器错误,即在 END FUNCTION 语句后错误插入 UDC
  • -
  • 修正了预处理器中嵌套包含文件中 #region 和 #endregion 的问题 (#1046)
  • -
  • 修正了根据 DEFINE 出现的顺序计算 DEFINE 的一些问题 (#866,#1057)
  • -
  • 修正了嵌套 BEGIN SEQUENCE ... END SEQUENCE 语句的编译器错误 (#1055)
  • -
  • 修正了包含复杂表达式的代码块的一些问题 (#1056)
  • -
  • 当启用 /undeclared+ 时,修正了将函数分配给委托的问题 (#1051)
  • -
  • 修正了在 Fox 方言中定义 LOCAL FUNCTION 时的错误警告 (#1017)
  • -
  • 修正了 FLOAT 值上的 Linq 操作 Sum 的一个问题 (#965)
  • -
  • 修正了在匿名方法/lamda 表达式中使用 SELF 的问题 (#1058)
  • -
  • 修正了将一个 Usual 转换为定义为 DWord 的 Enum 时的 InvalidCastException (#1069)
  • -
  • 修正了在调用带有参数 nStart 的 AScan() 和类似函数时发出的错误代码 (#1062, #1063)
  • -
  • 修正了解决跨不同程序集的同一函数的正确表单重载的问题 (#1079)
  • -
  • 修正了针对特定 XBase++ 代码的 #translate 预处理器的意外行为 (#1073)
  • -
  • 修正了 “ARRAY OF ”意外行为的问题 (#885)
  • -
  • 修正了调用接受 ARRAY 作为第一个参数的函数的特定重载时出现的一些问题 (#1074)
  • -
  • 当在方法上使用 PUBLIC 关键字时,修正了一个假的 XS0460 错误 (#1072)
  • -
  • 修正了启用 “命名参数” 选项时的不正确行为 (#1071)
  • -
  • 修正了调用带有默认值 DECIMAL 参数的函数/方法时的 Access 违规行为 (#1075)
  • -
  • 修正了预处理器中 #xtranslate 无法识别正则匹配标记的一些问题。还修正了在预处理器中识别表达式标记内的双冒号(::)的问题。(#1077)
  • -
  • 修复了在 VFP 方言中声明数组的一些问题 (#848)
  • -
    - - 运行时 - Bug 修复 - -
  • 修正了 Mod() 函数中与 VO 的一些不兼容问题
  • -
  • 修正了当维度不匹配时,在 VFP 方言中复制到数组时出现的异常 (#993)
  • -
  • 修正了 SetDeleted(TRUE) 和 DESCEND 排序的寻道问题 (#986)
  • -
  • 修正了 DataListView 在使用 SetDeleted(TRUE) 时错误显示(空)已删除记录的问题 (#1009)
  • -
  • 修正了使用 SYMBOL 参数时 SetOrder() 失败的问题 (#1070)
  • -
  • 还原了 SDK 中 DBServer:FieldGetFormatted() 先前的一处错误更改 (#1076)
  • -
  • 修正了 StrEvaluate() 的若干问题,包括无法识别名称中含有下划线的 MEMVAR (#1078)
  • -
  • 修复有关 InList() 和字符串值的问题 (#1095)
  • -
  • 为了与 FoxPro 兼容,Empty() 函数现在对 .NULL. 值和 DBNull.Value 的值返回 false。
  • -
  • 修正了 GetDefault()/ SetDefault() 的一个问题,使其与 Visual Objects 兼容 (#1099)
  • -
    - - 新特性 - -
  • 增强 Unicode AnyCpu SQL 类 (#1006)
  • -
  • 已添加以只读模式打开 Sqlselect 的属性。这将防止 Append()、Delete() 和 FieldPut() 等操作。
  • -
  • 延迟创建 InsertCmd、DeleteCmd、UpdateCmd,直到真正需要时为止
  • -
  • 添加了回调机制,客户可以覆盖这些命令的命令文本(例如,将它们路由到过程)。
  • -
  • 当由于方法重载而无法解决后期绑定的方法调用时,现在会生成更好的错误信息,其中还包括找到的方法的原型 (#1096)
  • -
    - - - FoxPro 方言 - -
  • 添加了 ADatabases() 函数
  • -
    - Visual Studio 集成 - 新特性 - -
  • 现在,您可以通过 工具/选项文本编辑器/X# 选项 页面控制缩排方式。我们添加了多个选项来控制源代码的缩进。如果你想在公司内部执行缩进规则,也可以通过 .editorconfig 文件设置这些选项。
  • -
  • 我们现已在源代码编辑器中添加了大量代码格式化选项。有关可用选项,请参见 工具/选项/文本编辑器/X#/缩进 (#430)
  • -
  • 我们实施了 “标识符大小写同步” 选项。其工作原理如下: 编辑器会拾取源文件中首次出现的标识符(类名、变量名等),并确保同一源文件中所有其他出现的标识符都使用相同的大小写。这不会在源文件中强制使用大小写(那样会太慢)
  • -
  • 我们在 VS 颜色对话框中为匹配大括号、匹配关键字和匹配标识符添加了颜色设置。打开 “工具/选项 ”对话框,选择 “环境/字体和颜色”,然后在列表框中查找以 “X#”开头的颜色。您可以根据自己的喜好自定义这些颜色。
  • -
  • 使用 Vulcan 运行时的 X# 项目现在有了一个上下文菜单项,可以将其转换为 X# 运行时。标准 Vulcan 程序集将被替换为等效的 X# 运行时程序集。如果使用第三方组件,如 bBrowser 或 ReportPro,则需要自行替换这些组件的引用(#32)。
  • -
  • 我们在项目属性的语言页面中添加了一个选项,用于为编译器设置新的 /allowoldstyleassignments 命令行选项
  • -
    - - Bug 修复 - -
  • 修正了 TFS 下解决方案的 “获取最新版本” 问题 (#1045)
  • -
  • 修正了 WinForm 设计器更改 main-prg 文件格式的问题 (#806)
  • -
  • 修正了 WinForms 设计器中代码生成的一些问题 (#1042, #1052)
  • -
  • 修正了 DO WHILE 的格式问题 (#923)
  • -
  • 修正了灯泡 “生成默认构造函数” 功能的问题 (#1034)
  • -
  • 修复了调试器中工具提示的问题。现在我们解析从第一个标记到光标位置的完整表达式。(#1015)
  • -
  • 修正了使用 VAR 定义的 .Net 数组局部的一些剩余的 intellisense 问题 (#569)
  • -
  • 修正了缩进在某些情况下无法正常工作的问题 (#421)
  • -
  • 修正了自动排版的一个问题 (#919)
  • -
  • 关键字配对匹配的若干改进 (#904)
  • -
  • 修正了在 “ClassName{}”中输入圆点后,代码完成也会显示静态成员的问题 (#1081)
  • -
  • 修正了键入 .and. 时的性能问题。(#1080)
  • -
  • 修复了类型化新类/方法时导航栏的问题 (#1041)
  • -
  • 修正了关键字上不正确的信息工具提示 (#979)
  • -
  • 修正了使用 “清理解决方案” 时可能出现的 VS 冻结问题 (#1053)
  • -
  • 修正了表单设计器中事件处理程序中的圆点位置不正确的问题 (#1092)
  • -
  • 修复了表单设计器在创建新表单后无法打开表单的问题 (#1093)
  • -
  • 右键单击 packages.config 文件并选择 “迁移到 packagereferences ”选项不起作用,因为 Visual Studio 内部有一个硬编码的支持项目类型列表。我们现在要 “伪造” 项目类型,让 VS 满意并启用向导。
  • -
    - 生成系统 - -
  • 在 VS 中编译 X# 项目时,负责创建命令行的 XSharp.Build.Dll 无法正确地将 /noconfig 和 /shared 编译器选项传递给编译器。因此,即使启用了使用共享编译器的项目属性,也无法使用共享编译器。此外,编译器还会自动包含对 xsc.rsp 文件中列出的所有程序集的引用,该文件位于 XSharp\bin 文件夹中。
    您现在可能会遇到程序集因缺少类型而无法编译的情况。如果您使用的类型位于 xsc.rsp 中列出的程序集内,就会出现这种情况。您现在应该在 X# 项目中添加对这些程序集的明确引用。
  • -
    - Changes in 2.12.2.0 - 编译器 - Bug 修复 - -
  • 修正了代码生成中的一个错误,以处理带括号索引的 FoxPro 数组访问 (#988, #991)
  • -
  • 编译器会对使用 IS 声明的 locals 生成错误的警告。现已修复。
  • -
  • 编译器未就 ACCESS/ASSIGN 上 OVERRIDE 修饰符的无效使用报告错误,现已修复 (#981)
  • -
  • 修正了从各种数字数据类型转换为另一种数据类型时,在报告警告和错误的几种情况下的不一致行为 (#951、#987)
  • -
  • 修正了 iif() 语句在某些情况下出现的 “failed to emit module ”问题 (#989)
  • -
  • 修正了编译 X# 代码脚本时出现的问题 (#1002)
  • -
  • 修正了在宏编译器中为某些特定程序集使用类的问题 (#1003)
  • -
  • 修复在 AnyCPU 模式下向指针添加 INT 时的错误信息 (#1007)
  • -
  • 修正了将 STRING 转换为 PTR 语法的问题 (#1013)
  • -
  • 修正了向 CLIPPER 函数/方法传递单个 NULL 参数时 PCount() 的一个问题 (#1016)
  • -
    - 新特性 - -
  • 我们已在所有方言中添加了对 TEXT ... ENDTEXT 命令的支持。请注意,该命令有多种变体。其中一种变体适用于所有方言(TEXT TO varName)。其他变体取决于所选择的方言。我们已将对 TEXT ... ENDTEXT 的支持从编译器转移到预处理器。这意味着还有 2 个新的预处理器指令: #text 和 #endtext (#977, #1029)
  • -
  • 启用了新的编译器选项 /vo17,为 BEGIN SEQUENCE...RECOVER 命令实现了与 VO 更为兼容的行为 (#111、#881、#916):
  • - -
  • 对于包含 RECOVER USING 的代码,将检查是否存在封装异常。如果异常不是封装异常,运行时将调用一个函数(FUNCTION _SequenceError(e AS Exception) AS USUAL)来处理该错误。例如,它可以调用错误处理程序,或抛出错误
  • -
  • 如果没有 RECOVER USING 子句,编译器就会生成一个子句,并在生成的子句中检测 RECOVER 是在包裹异常还是正常异常的情况下完成的。对于包裹异常,编译器会获取值并在运行时调用一个特殊函数(FUNCTION _SequenceRecover(uBreakValue AS USUAL) AS VOID)。如果在调用生成的恢复时出现了 “正常 ”异常,则会调用上一小节中的 _SequenceError 函数。
  • -
    -
    - -
  • 我们新增了对 CCALL() 和 CCALLNATIVE() 的支持
  • -
  • #pragma 指令现在由预处理器处理。因此,您可以在代码的任何地方添加 #pragma 行:实体之间、实体内部等。
  • -
    - 运行时 - Bug 修复 - -
  • 更改了 AdsGetFTSIndexInfo 的原型 (#966)
  • -
  • 修复了 TransForm 和十进制类型的一个问题 (#1001)
  • -
  • 在 VFP 程序集中添加了几种缺失的返回类型
  • -
  • 修正了在 FoxPro 方言中浏览 DBFVFP 表的问题
  • -
  • 修正了处理 BREAK 命令在 BEGIN...RECOVER 周围语句中提供的值时的不一致性,这取决于使用的是早期还是晚期绑定调用 (#883)
  • -
  • 修正了将 System.Decimal 值赋值给 USUAL 变量时浮点格式的问题 (#1001)
  • -
  • 在 FoxPro 方言中,当复制到列数多于表列数的数组时,修正了 DbCopyToArray() 的运行时错误 (#993)
  • -
  • 修正了宏编译器中带有 +/- 符号的类型转换表达式和数字字面的问题 (#1025)
  • -
  • 修正了后期绑定代码中的问题,即字符串有时会被传入,但不会正确转换为符号
  • -
  • IVarPut()/IVarGet() 现在会在尝试使用不可访问(由于限制可见性修饰符)的属性 getter/setter(ACCESS/ASSIGN)时抛出适当的异常 (#1023)
  • -
  • 修正了使用 NEW 修饰符在子类中重新定义属性时,IVarGet() 和 IVarPut() 的一个问题 (#1030)
  • -
  • 删除或调用记录时,DbDataSource 现在会尝试锁定记录
  • -
  • Foreach 无法在包含从 IVarGet() 等后期绑定属性访问返回的集合的属性上正确工作(#1033)
  • -
    - 新特性 - -
  • 现在,您可以在运行时状态中注册一个委托,从而控制宏编译器如何缓存已加载程序集的类型 (#998)。
    该委托必须具备以下格式:

    DELEGATE MacroCompilerIncludeAssemblyInCache(ass as Assembly) AS LOGIC

    例如:

    XSharp.RuntimeState.MacroCompilerIncludeAssemblyInCache := { a  =>  DoNotCacheDevExpress(a)}
    FUNCTION DoNotCacheDevExpress(ass as Assembly) AS LOGIC)
      // 不缓存 DevExpress 程序集
      RETURN ass:Location:IndexOf("devexpress", StringComparison.OrdinalIgnoreCase) == -1
  • -
    - 兼容 VO SDK - -
  • 修正了 SetAnsi(FALSE) 导致带图片的单行编辑控件在输入缩略语时显示随机字符的问题 (#1038)
  • -
    - Typed VO SDK - SQLSelect 类有两个新属性。 - -
  • ReadOnly - 使 SQLSelect 变成只读
  • -
  • BatchUpdates - 控制如何处理更新
  • -
    - 只读 CURSOR 和延迟创建 command 对象 - 以前,SQLSelect 类会创建 DbCommand 对象,以便在打开结果集时立即更新、插入和删除对游标所做的更改。 - 当使用复杂查询选择数据时,这可能会导致问题,因为 DbCommandBuilder 对象无法确定如何创建这些语句。 - 现在,我们将这些命令的创建时间推迟到第一次需要时。 - 同时,我们还添加了一个只读属性,默认值为 FALSE。 - 如果将 ReadOnly 设置为 true,那么 - -
  • 调用 FieldPut()、Delete() 和 Append() 将产生 Gencode EG_READONLY 错误。
  • -
  • 不会为 SQLSelect 创建 Command 对象,因为游标无法更新。
  • -
    - 如果只读保持 FALSE,那么更新、插入和删除的命令对象将在第一次需要时创建。 - 这些命令是在 __CreateDataAdapter() 方法中创建的。 - 您可以重写该方法,并在需要时在自己的子类中创建命令。 - 命令创建和更新的工作原理如下: - -
  • 首先,使用 SQLFactory 类中的 CreateDataAdapter 方法创建数据适配器(DbDataAdapter 类型)
  • -
  • 然后,通过 SQLFactory 类的 CreateCommandBuilder 方法创建一个 CommandBuilder 对象( DbCommandBuilder 类型)
  • -
  • 然后通过 DbCommandBuilder 对象的 GetInsertCommand() 等方法创建插入、删除和更新命令对象(均为 DbCommand 类型)。DBCommandBuilder 对象接收 Select 语句,并根据 SQLSelect 命令创建带参数的命令
  • -
  • 这些命令对象被分配给 DataAdapter,然后以 SQLSelect 后面的 DataTable 作为参数调用 DataAdapter:Update() 方法。
  • -
    - 批量更新 - 通常,SQLSelect 中的更新会在将记录指针移动到新行或调用 Update() 时发送到服务器。 - 如果将 BatchUpdates 属性设置为 “true”,那么 SQLSelect 将延迟向服务器发送更新,并且不会在每次移动记录时发送更新,而是等到调用 Update() 方法时才发送更新,参数为 “true”。这将把所有缓冲的更改写入服务器。这也会触发 DBCommand 对象的创建(见前文)。 - 如果您的表有自动递增字段,那么您可能需要在之后调用 Requery() 来查看新分配的键值。 - Visual Studio 集成 - Bug 修复 - -
  • 修复了针对带有不同风味的项目的项目属性页面处理 (#992)
  • -
  • 尝试使用不存在的工作目录或程序文件名启动调试器时,现在会显示适当的错误 (#996)
  • -
  • 修正了表单设计器有时使用 #区域生成无效代码的问题 (#1020、#935)
  • -
  • WinForms 设计器现在默认在生成的 Dispose() 方法中添加 OVERRIDE 关键字修改器(已在模板中添加) (#1004)
  • -
  • 由于最新发布的 VS2022 中的线程模型发生了变化,错误信息有时不会显示在输出窗口和错误列表中。这一问题已得到修复
  • -
  • 修正了窗口窗体设计器代码生成中主窗体类内嵌套类的问题 (#1031)
  • -
  • 修正了 windows 表单编辑器无法打开带有基于 UDC 的命令的表单的问题 (#1037)
  • -
    - 源代码编辑器 - -
  • 全名的类型查找有时会失败,因为全名被定义为区分大小写(#978)
  • -
  • 嵌套类型查找有时会失败。现已修复。
  • -
  • 缩进选项现在也可以在 .editorconfig 文件中重写(#999)
  • -
  • 当编辑器加载源文件时,直到光标在缓冲区中移动之前,类型和成员的组合框才会被激活。(#995)
  • -
  • 编辑器中的成员组合框容易与包含本地函数或本地过程的代码混淆。
  • -
  • 修正了转换或带关键字的转换(如 DWORD( SomeExpression))中表达式的查找问题。转换括号内的表达式没有快速信息提示(#997)
  • -
  • 修正了 DATATYPE(<expression>) 转换表达式的 intellisense 问题 (#997)
  • -
  • 修正了在属性实现中使用 => 符号声明属性时导致导航栏内容不完整的问题 (#1008)
  • -
  • 修复了代码折叠和格式化中的几个问题 (#975)
  • -
  • 修正了在参数列表内键入逗号不会调用参数工具提示的问题(#1019)
  • -
  • 修正了检测 VAR 关键字的变量类型时出现的一些问题 (#903)
  • -
  • 修正了在字符串字面内部输入“: ”或“. ”时的 intellisense 问题 (#1021)
  • -
  • 修正了未知标识符有时会导致显示假成员完成列表的问题 (#1022)
  • -
  • 在编辑器中按 CTRL+SPACE 现在总是调用代码完成列表 (#957)
  • -
    - 新特性 - -
  • 在 VOWED 中添加了在选项卡控件中插入页面和重新排序页面的选项 (#1024)
  • -
  • 我们更新了 WPF 应用程序模板。主窗口现在称为 “MainWindow”。
  • -
  • 在 .editorconfig 文件中添加了以下新设置,以设置缩进选项 (#999)。
  • -
    - -
  • indent_entity_content (true or false)
  • -
  • indent_block_content (true or false)
  • -
  • indent_case_content (true or false)
  • -
  • indent_case_label (true or false)
  • -
  • indent_continued_lines (true or false)
  • -
    - - VOXporter - -
  • 如果在 VO 应用程序中启用了允许 MEMVAR/Undeclared vars 编译器选项,VOXporter 现在可以正确启用或禁用这些选项 (#1000)
  • -
    - Changes in 2.11.0.1 - 编译器 - Bug 修复 - -
  • 修正了 CLIPPER 调用约定委托时的内部编译器错误 (#932)
  • -
  • 修正了在运行时使用 usual 属性上的 null 运运算符 ?. 时出现的 AccessViolationException 异常 (#770)
  • -
  • [XBase++ 方言] 修正了带括号方法声明的解析问题 (#927)
  • -
  • [XBase++ 方言] 修复了解析 ANNOUNCE 和 REQUEST 语句(在 X# 中已过时)时出现的问题 (#929)
  • -
  • [XBase++ 方言] 修正了 INLINE ACCESS 和 ACCESS ASSIGN 语句的解析问题 (#926)
  • -
  • [VFP 方言] 修正了一个问题,即在解析包含 “M. ”变量用法的 FOR EACH 语句时,变量未在 FOR EACH 行中类型化 (#911) 。
  • -
  • 修正了当一个 UDC 产生多个声明时,PPO 文件包含两次某些输出的问题 (#933)
  • -
  • 修正了几个 UDC 中 “FIELDS ”子句的一些问题 (#931,#795)
  • -
  • 修正了预处理器中 #xtranslate 指令中括号的问题 (#963)
  • -
  • 修复了 #command 和 #translate 指令的多个问题 (#915)
  • -
  • 在某些情况下,编译器在从一种类型 casting/converting 为不兼容类型时,会产生不会抛出运行时异常的代码。该问题已得到修复(#961、#984)
  • -
  • 编译器在某些情况下未报告收缩转换警告,现已修复(#951)
  • -
  • 编译器未报告有符号/无符号转换警告。该问题已得到修复(#971)
  • -
  • 修正了一个可能导致 “Could not emit module” 错误信息的问题,该问题由 IIF() 表达式中的 NULL 值引起(#989)
  • -
    - 新特性 - -
  • 添加了编译器选项 /noinit ,以便不为没有 INIT 过程的库生成 $Init 调用,从而推迟加载 (#854)
  • -
  • 已添加 #stdout 和 #if 的预处理器支持 (#912)
  • -
  • 现在 #include 文件的全部内容都会写入 ppo 文件 (#920)
  • -
  • 如果因标识符被同名定义替换而导致解析器出错,编译器现在会生成第二个警告。
  • -
  • 如果头文件包含实际代码,并且在调试过程中调用了这些代码,那么调试器在调试这些代码时就会进入头文件。
    以前,所有语句都从包含头文件的地方链接到 #include 行。(#967)
  • -
  • 使用 /vo11 (兼容数字转换)编译器选项抑制编译器错误时,现在会看到一个 XS9020 “收缩”警告,表明可能会发生运行时错误或丢失数据。
  • -
  • 当使用 /vo4 抑制有符号整数和无符号整数之间的转换错误时,现在会出现 XS9021 警告,表示可能会丢失数据或发生溢出错误。
  • -
    - Visual Studio 集成 - 新特性 - -
  • 源代码编辑器现在还支持新的 #if 和 #stdout 预处理器命令 (#912)
  • -
  • 有了新的 “灯泡 ”选项,可以为类生成构造函数。
  • -
    - Bug 修复 - -
  • 修正了在项目属性中指定自定义预处理器定义的问题(#909)
  • -
  • 在生成代码时,VO 风格编辑器现在保留了方法/构造函数的现有 “CLIPPER ”子句 (#913)
  • -
  • 修正了类之间相互嵌套的错误解析 (#939)
  • -
  • 修正了在项目设置中使用 $(SomeName) 形式的嵌入式变量的问题 (#928)
  • -
  • 修正了从项目中删除项目项会失败的问题。
  • -
  • 修正了一个问题,即如何解析由其他开发语言的项目文件生成的 DLL,尤其是 SDK 风格的 C# 项目 (#950)
  • -
  • 修正了在出现无法识别的标识符后快速信息工具提示的问题 (#894)
  • -
  • 修正了编辑器在自动键入属性后错误添加括号的问题(#974)
  • -
  • 修正了在 #endif 指令后创建新行时编辑器反应极慢的问题 (#970)
  • -
  • 修复了 .Net 数组类型的一些 intellisense 问题 (#569)
  • -
  • 修复了设计时 DevExpress DocumentManager 控件的一个问题 (#976)
  • -
  • 当 “显示来自......的输出 ”设置为 “扩展 ”时,修正了输出窗口中的参数为空异常 (#940)
  • -
    - 运行时 - 新特性 - -
  • 为 array 类添加了 IEnumerable 构造函数 (#943)
  • -
  • 实现了缺失的函数 AdsSetTableTransactionFree() 和 AdsGetFTSIndexInfo() (#966)
  • -
  • 将函数 GetRValue()、GetGValue() 和 GetBValue() 从 Win32API 库移至 XSharp.RT,以便 AnyCPU 代码可以使用它们 (#972)
  • -
  • [VFP 方言] 实现了函数 APrinters() (#952)
  • -
  • [VFP 方言] 实现函数 GetColor() (#973)
  • -
  • [VFP 方言] 实现函数 Payment()、FV() 和 PV() (#964)
  • -
  • [VFP 方言] 实现了 MKDIR、RMDIR 和 CHDIR 命令 (#614)
  • -
    - Bug 修复 - -
  • 修复了 SDK 中 ListView TextColor 和 TextBackgroundColor ACCESSes 的一个问题 (#896)
  • -
  • 修复了软查找在发现 strict  键时不尊重顺序范围的问题 (#905)
  • -
  • 修正了 DBUseArea() 对不同文件夹中文件的搜索逻辑。此外,SetDefault() 不再使用当前目录初始化(为了兼容 VO)(#908)
  • -
  • 修正了创建长度大于 255 的字符字段的 dbfs 问题 (#917)
  • -
  • 修正了在某些情况下缓冲读取系统在读取、关闭、覆盖然后重新打开 dbf 时出现的问题 (#968)
  • -
  • 修正了一个 VO 兼容性问题,即当打开索引文件时,DBSetIndex() 如何更改活动顺序 (#958)
  • -
  • 修正了当源文件和目标文件结构相同并包含备注文件时,数据库追加、复制等操作的一个问题(#945)
  • -
  • 修正了在索引文件不存在或未打开的情况下 DBOrderInfo(DBOI_ORDERCOUNT) 的错误结果 (#954)
  • -
  • [VFP 方言] 为 Program( [,lShowSignature default=.f.] ) 添加了可选参数 (#712)
  • -
  • [VFP 方言] 修复了 Type() 函数的几个问题(#747、#942)
  • -
  • [VFP 方言] 修正了 ExecScriptFast() 的一个问题 (#823)
  • -
  • [VFP 方言] 修正了 SQLExec() 不能将记录指针放在第一条记录上的问题 (#864)
  • -
  • [VFP 方言] 修正了 SQLExec() 在使用 null 值时的一个问题 (#941)
  • -
  • [VFP 方言] 修正了从 SqlExec() 返回的缓冲区中的写入错误 (#948)
  • -
  • [VFP 方言] 修复了 DBFVFP RDD 和 null 列的一个问题 (#953)
  • -
  • [VFP 方言] 修正了 SCATTER TO 和 APPEND FROM ARRAY 的一个问题 (#821)
  • -
    - Typed SDK - -
  • 修正了标准打开对话框中文件名属性的一个问题
  • -
  • 修正了菜单构造函数中的 FOREACH 会导致处理异常的问题
  • -
    - RDD - Bug 修复 - -
  • 修正了 DBFVFP RDD 中计算 nullable 键的键值大小的问题 (#985)
  • -
    - VOXporter - Bug 修复 - -
  • 修正了错误检测字面字符串和注释中函数指针的问题 (#932)
  • -
    - - Changes in 2.10.0.3 - 编译器 - Bug 修复 - -
  • 修正了 FoxPro 方言中 COPY TO ARRAY 命令的一些问题 (#673)
  • -
  • 修正了在 SWITCH 语句中使用 System.Decimal 类型的问题 (#725)
  • -
  • 修正了 FoxPro 方言中 Type() 的内部编译器错误 (#840)
  • -
  • 修正了生成 XML 文档的问题(#783、#855)
  • -
  • 启用 /vo3(所有成员均为虚拟)时,防止 SEALED 类成员出现警告 (#785)
  • -
  • 修正了将 “ARRAY OF <type>”变量赋值和比较 NULL_ARRAY 的问题 (#833)
  • -
  • 修正了使用 @ 操作符通过引用传递参数和/或将其用作 AddressOf 操作符时的一些问题(#810、#899、#902)
  • -
  • 修正了当函数/方法的参数为指针类型时,使用 @ 运算符解析通过引用传递的参数的问题(#899,#902)
  • -
    - 新特性 - -
  • 添加了编译器选项(-enforceoverride) 以便在覆盖父成员时强制修改 OVERRIDE(#786#846)
  • -
  • 在非本地上下文中使用 String2Psz() 和 Cast2Psz() 时,编译器会报错(因为这些 PSZ 会在退出当前实体时被释放) (#775)
  • -
  • 函数过程现在支持 ASYNC 修饰符 (#853)
  • -
  • 现在,您可以通过编译器命令行参数 -noinit 来抑制 $Init1() 和 $Exit() 函数的自动生成 (#854)  
    VS "属性" 对话框尚未支持该选项
  • -
  • 为 USUAL 变量也添加了对 ASTYPE 运算符的支持 (#857)
  • -
  • 允许在 PUBLIC var 声明中指定 AS <type> 子句(编译器忽略,但编辑器将来会用于 intellisense)(#853)
  • -
  • AS <datatype> OF <classlib> 子句现在也支持其他几个 FoxPro 兼容命令,如 PARAMETERS 和 PUBLIC。
    由于这些变量在运行时是无类型的,因此编译器会忽略该子句并发出警告。
  • -
    - 生成系统 - Bug 修复 - -
  • 在 X# WPF 项目上运行 MsBuild 可能会失败 (#879)
  • -
    - Visual Studio 集成 - 新特性 - -
  • 我们为 VS 2022 添加了 Visual Studio 集成
  • -
  • 我们新增了对软件包引用的支持
  • -
  • 现在,当用户键入“///”时,编辑器会自动插入 XML 注释。(#867, #887)  条件:
  • - -
  • 光标必须位于实体开始前的一行上
  • -
  • 光标不得位于注释行之前
  • -
    -
    - -
  • 现在,类的工具提示还包括有关父类和已实现接口(如果有)的信息 (#860)
  • -
  • 我们为编译器内置的伪函数(如 PCount() 和 String2Psz())添加了工具提示、参数补全等功能。
  • -
  • 我们添加了第一个版本的灯泡提示。现在,我们只需实现缺失的接口成员,并将字段转换为属性。更多实现和配置选项将陆续推出
  • -
  • 我们添加了一个新对话框来配置源代码格式,并提供了选项效果的可视化示例。
  • -
  • 我们增加了将 X# VS 集成的操作记录到 Windows 调试窗口和/或日志文件的功能。
    如果您遇到无法解释的问题,我们会与您联系,告诉您如何启用这些选项,这样您就可以向我们发送日志文件,显示在 Visual Studio 内部出现问题之前发生了什么。我们为此使用了 Serilog。
  • -
  • 高亮显示单词功能现在不区分大小写,不再高亮显示注释、字符串或非活动编辑器区域中的单词。
  • -
  • 我们在编辑器中加入了 "括号补全"
  • -
    - Bug 修复 - -
  • 修复了格式化文档命令的一些问题(#552)
  • -
  • 修复了参数工具提示的几个问题(#728、#843)
  • -
  • 修正了代码完成列表显示未定义的变量/标识符的问题 (#793)
  • -
  • 修正了链式表达式的成员补全和参数工具提示 (#838)
  • -
  • 修正了某些情况下对 VAR 本地变量类型的识别 (#844)
  • -
  • 修正了 VOSTRUCT 变量的成员完成和工具提示信息问题 (#851)
  • -
  • 修正了忽略 XML 注释中换行符的问题 (#858)
  • -
  • 修正了一些有关 CHAR 属性的 WinForms 设计器问题 (#859)
  • -
  • 修正了调用 SUPER() 构造函数时转到定义无法正常工作的问题 (#862)
  • -
  • 当解决方案路径中包含空格时,修复了重建 intellisense 数据库命令的错误 (#865)
  • -
  • 当同时运行多个 VS 版本时,外部程序集类型的转到定义失败。
  • -
  • 修正了 VOSTRUCT 有时会混淆解析器的问题 (#868)
  • -
  • 修正了更多有关 quickinfo 和成员完成的问题 (#870)
  • -
  • 修正了 Windows 窗体设计器中的一个问题 (#873)
  • -
  • 修正了不使用 MEMBER 关键字的 ENUM 的智能感应问题 (#877)
  • -
  • 修正了继承 exception 类型的成员完成问题 (#884)
  • -
  • 如果 XML 主题有 <see> 或其他类型的子元素,则编辑器中不会显示这些子元素。这一问题已得到解决 (#900)
  • -
  • 在编辑器中,不平衡的大括号有时会与关键字匹配。这一问题已得到修复 (#892)
  • -
  • 分隔线有时会闪烁。这一问题已得到修复(#792)
  • -
  • 在解析局部变量时,我们没有处理包含文件。这可能导致在条件块 (#ifdef SOMEVAR) 中声明的局部变量找不到。这一问题已得到修复。现在,即使在解析源文件的一部分时,编辑器解析器也会包含头文件以及代码中的 #defines 和 #undefines (#893)
  • -
  • #include 行现在包含在编辑器的字段/成员组合框中(当字段显示时)。它们也会保存到 intellisense 数据库中。
  • -
  • 当光标停留在非活动预处理器区域 (#ifdef) 上时,编辑器会尝试显示 QuickInfo 工具提示。现在这种情况不再发生。
  • -
    - 运行时 - Bug 修复 - -
  • 修复了同时更新时可能出现的 DBFCDX 损坏问题 (#585)
  • -
  • 修正了打开带有允许 NULL 字段索引的 FoxPro 表的问题 (#631)
  • -
  • BlobGet() 函数返回的是逻辑值而不是实际字段值 (#681)
  • -
  • 在索引表达式中有大量字段的情况下,创建索引的速度大大提高 (#711)
  • -
  • 修正了 FieldPutBytes() 和 FieldGetBytes() 的一些问题 (#797)
  • -
  • 在某些情况下,带有第三个参数 (lLast) TRUE 的 DBSeek() 行为不正确 (#807)
  • -
  • 修复了创建索引时可能发生的 NullreferenceException 异常 (#849)
  • -
  • 改进了 Error.WrapRawException() 方法生成的文本的缩进(#856)
  • -
  • 修正了.Net Array <-> USUAL 转换时的运行时问题(#876)
  • -
  • 即使不支持信息枚举,DbInfo() 也会返回 TRUE (#886)。
  • -
  • 还修正了 DBFNTX 可能损坏的问题 (#889)
  • -
  • 在 FoxPro 中,当代码块返回 NIL 或 VOID 时,DbEval() 可能会失败 (#890)
  • -
  • 修复了 Softseek 和降序索引的一个问题。
  • -
  • 修正了范围表达式不正确可能导致意外结果的问题。现在,服务会在范围不正确的情况下进入(并停留在)EOF。
  • -
  • 修正了在宏表达式中使用括号运算符访问 FoxPro 数组的问题(#805)。
    请注意,要使主程序正常运行,必须在编译主程序时使用 /fox2
  • -
    - - Changes in 2.9.1.1 (Cahors) - 编译器 - Bug 修复 - -
  • 修正了 2.9.0.2 中引入的一个问题,即定义符号在与 /vo8 编译器选项结合使用时不遵守 /cs 编译器选项 (#816)
  • -
  • 当启用 /fox2 编译器选项时,修正了对象初始化器内部赋值表达式的内部编译器错误 (#817)
  • -
  • 修正了 VOSTRUCTs 中日期的一些问题 (#773)
  • -
  • 修正了预处理器中的一个问题,即在 UDC 中间使用 FIELDS <f1> [,<fn> ] 这样的列表规则时会出现这个问题。
  • -
  • 修正了 SET CENTURY &cOn 等 UDC 的编译问题,因为 cOn 不是作为标识符而是作为关键字进行解析的。
  • -
    - 新特性 - -
  • 预处理器中有一个新的结果标记(NotEmpty 结果标记),它的作用与常规结果标记相同,但在输入中找不到匹配标记(可选)时,会向输出写入一个 NIL 值。
    由于 IIF 表达式内部的部分可能不是空的,因此当您想将结果作为 IIF() 表达式的一部分输出时,可以使用此方法。
    结果标记如下 <!marker!>
  • -
  • 以前不允许在 UDC 中使用受限匹配标记作为第一个标记。这一问题已得到解决。现在可以编写这样的规则,它将输出关键字(SCATTER、GATHER 或 COPY),然后是经过字符串化的选项列表。
  • -
    - #command <cmd:SCATTER,GATHER,COPY> <*clauses*> => ?  <"cmd">, <"clauses">
    FUNCTION Start AS VOID
       SCATTER TO TEST   // 被预处理为 ? "SCATTER" , "TO TEST"
       RETURN
    - Visual Studio 集成 - Bug 修复 - -
  • 修正了 2.9.0.2 中引入的 WPF 项目代码生成问题 (#820)
  • -
  • 修正了生成后 VS 冻结的问题 (#819)
  • -
  • 修正了包含 SELF 属性的源文件的代码折叠和导航栏的一些问题 (#825)
  • -
  • 修复了表单设计器在表单 prg 包含嵌套类时发出无效代码的问题 (#828)
  • -
  • 修正了一个问题,即代码自动完成功能在打开左侧结尾括号时显示错误的成员 (#826)
  • -
  • 修复了点击泛型类时 VS 崩溃的问题 (#827)
  • -
  • 修正了 SET CENTURY &cOn 等表达式的关键字着色问题,在这些表达式中,&cOn 用关键字颜色着色。
  • -
  • 嵌套函数调用的参数提示需要在嵌套函数名称前多留一个空格 (#728)
  • -
  • 修复了表单设计器删除 form.prg 中委托和其他嵌套类型的问题 (#828)
  • -
  • 在 ClassView / ObjectView 窗口中加载类型的后台程序降低了 VS 的性能。目前已将其禁用。
  • -
  • 修复了泛型的类型查找。
  • -
  • 将鼠标悬停在构造函数关键字上显示的是类的工具提示,而不是构造函数的工具提示。这一问题已得到修复。
  • -
  • 修正了 Windows 窗体代码生成器中的一个问题,即带有特殊值的字面字符(如“\0”) (#859)
  • -
  • 修正了在后台初始化项目系统时(例如没有打开 X# 项目时)项目系统出现的异常 (#852)
  • -
  • 修复了 LONGINT 和 SHORTINT 关键字的代码自动补全缺失 (#850)
  • -
  • 上下文菜单选项 “在反汇编器中查看 ”现在只针对 X# 项目显示
  • -
  • 修正了 ARRAY OF <type> 的代码生成器问题 (#842)
  • -
  • 修复了在编辑器中点击代码时的性能问题 (#829)
  • -
  • 修正了在查找嵌套类型失败时加载 Windows 窗体的问题。
  • -
    - - 新特性 - -
  • 我们在解决方案资源管理器的项目上下文菜单中添加了一个上下文项,用于编辑项目文件。这将在需要时卸载项目,然后打开文件进行编辑。
  • -
  • 现在,“工具/XSharp ”菜单中的 “重建 intellisense 数据库” 菜单选项会卸载当前解决方案,删除 intellisense 数据库,然后重新打开解决方案,以确保数据库正确重建。
  • -
  • 我们对在后台解析解决方案源代码的过程进行了一些更改。
  • -
  • 泛型名现在以 Name`n 格式存储在 intellisense 数据库中,例如 IList`1 表示 IList<T>
  • -
    - 运行时 - 新特性 - -
  • 添加了丢失的 ErrorExec() 函数(#830)
  • -
  • 已添加对 BlobDirectExport、BlobDirectImport、BlobDirectPut 和 BlobDirectGet 的支持 (#832)
  • -
  • 修正了创建带有自定义文件扩展名的 DBF 文件时出现的问题。还增加了对 _SET_MEMOEXT 的支持 (#834)
  • -
  • 当您对两个不同类型的 USUAL 进行数字运算时,我们将确保不再丢失小数值(#808)。例如,LONG + DECIMAL 的结果将是 DECIMAL。 有关使用混合类型时可能的返回值,请参见本帮助文件中 USUAL 类型页面的表格
  • -
    - - - Bug 修复 - -
  • 修正了 _PrivateCount() 引发 InvalidateOperationException 的问题 (#801)
  • -
  • 修正了编辑器中成员补全有时会显示错误类型方法的问题 (#740)
  • -
  • 修正了 ACopy() 函数的一些问题 (#815)
  • -
  • 修复了 VOSTRUCTs 中与日期有关的几个遗留问题 (#773)
  • -
    - 宏编译器 - 新特性 - -
  • 添加了对 & 运算符的支持 (#835)
  • -
  • 为后期绑定的方法调用添加了对引用参数的支持(同时支持 @ 和 REF) (#818)
  • -
    - VOXporter - Bug 修复 - -
  • 修正了在 PUBLIC 声明前添加“@@”不正确的问题
  • -
    - - Changes in 2.9.0.2 (Cahors) - 编译器 - 新特性 - -
  • 解析器现在支持多类型的类变量声明和全局声明(#709)
  • -
    - EXPORT var1 AS STRING, var2, var3 as LONG - GLOBAL globalvar1 AS STRING, globalvar2, globalvar3 as LONG - -
  • 如果您正在使用我们的分析程序,您应该注意 ClassVarList 规则已经消失,ClassVars、VoGlobal 和 ClassVar 规则已经更改。
  • -
    - -
  • 我们添加了一条命令,用于在 foxpro 数组中填充单个值
  • -
    - STORE <value> TO ARRAY <arrayName> - - -
  • 创建包含 DATE 字段的 VOSTRUCT 或 UNION 时,编译器现在将使用新的 __WinDate 结构,该结构与 Visual Objects 中 VOSTRUCT 或 UNION 中的 DATE 值存储方式二进制兼容 (#773)
  • -
  • 现在可以在 FoxPro 方言中使用括号(而不是方括号)访问 ARRAY 元素。必须启用编译器选项 /fox2 才能起作用 (#746)
  • -
  • 我们增加了对在调用函数/方法代码中访问 WITH 块表达式的支持(仅适用于 FoxPro 方言)。因此,您可以在调用代码中键入 .SomeProperty 并访问属于 WITH BLOCK 表达式的属性。要使用此功能,必须启用 “后期绑定”,因为编译器不知道调用代码中表达式的类型(#811)。
  • -
    - - Bug 修复 - -
  • 当您对父类中不存在(虚)方法的方法使用 NEW 或 OVERRIDE 修饰符时,现在会产生一个错误(#586,#777)
  • -
  • 修正了数组中 USUAL 变量的逻辑 AND 和 OR 问题 (#597)
  • -
  • 某些编译器生成的代码(如后期绑定代码)的错误信息和警告并不总是指向正确的行号,而是指向方法或函数正文的第一行。这一问题已得到修复。(#603)
  • -
  • 修正了 IIF 表达式返回值不正确的问题 (#606)
  • -
  • 修正了编译器在 DECLARE METHOD 行中解析多个方法名时出现的问题 (#708)
  • -
  • 修正了 FoxPro 方言中的一个问题,即向数组赋值以填充数组 (#720)
  • -
  • 修复了当结构包含 DATE 类型成员时计算 VOSTRUCT 大小的问题 (#734)
  • -
  • 之前的问题会导致运行时错误 (#735)
  • -
  • 修正了代码中的一个问题 (#736)
    var aLen := ALen(Aarray)
  • -
  • 针对带有类型返回值的方法,修复了用 STRICT 覆盖 CLIPPER 方法时编译器崩溃的问题 (#761)
  • -
  • 当接口实现的大小写与定义的大小写不同时,会显示错误信息 (#765)
  • -
  • 修复了代码块内函数参数不正确时编译器崩溃的问题 (#759)
  • -
  • DEFINE 的递归定义可能导致编译器内部出现无限循环,从而引发 StackOverflowException(#755)
  • -
  • 修正后期绑定调用和 OUT 参数的问题 (#771)
  • -
  • 如果使用 4 级或更低的警告级别进行编译,则不会显示某些将值类型与空值进行比较的警告。现在我们已将默认警告级别改为 5。(#772)
  • -
  • 修正了同一实体中多个 PRIVATE &cVarName 语句导致编译器崩溃的问题 (#780)
  • -
  • 修正了通过引用传递 USUAL 参数时可能损坏 USUAL NIL 值的问题 (#784)
  • -
  • 修正了在 FoxPro 方言中将已声明的 PUBLIC 变量创建为 PRIVATE 的问题 (#753)
  • -
  • 修复了使用类型定义作为默认参数时出现的问题 (#718)
  • -
  • 修正了类型化 DEFINE 可能产生错误类型常量的问题 (#705)
  • -
  • 修正了从 #warning 和 #error 指令文本中移除空白的问题 (#798)
  • -
    - 运行时 - 新特性 - -
  • 我们为 Empty() 函数添加了几个强类型重载,这些重载应该会提高性能 (#669)
  • -
  • 我们在 RuntimeState 类中添加了一个事件处理程序。该事件处理程序名为 “StateChanged”(状态改变),预计将使用一个签名如下的方法:
    Method MyStateChangedEventHandler(e AS StateChangedEventArgs) AS VOID
    StateChangeEventArgs 类型具有设置枚举、OldValue 和 NewValue 的属性。
    如果您需要在 X# 运行时和外部应用程序(如 Vulcan 应用程序、VO 应用程序或外部数据库服务器,如 Advantage)之间同步状态,则可以使用此功能。
  • -
  • 我们添加了一个新的(内部)类型 __WinDate,用于在 VoStruct 或 Union 中存储日期值。该字段与 VO 存储在结构体和联合体内的 Julian 日期二进制兼容。
  • -
  • 我们在 RuntimeState 中添加了一个条目,编译器会在其中存储主程序当前的 /fox2 编译器设置。
  • -
  • 已添加运行时支持,支持通过分配单个值来填充 FoxPro 数组。
  • -
    - - Bug 修复 - -
  • 修正了 Descend() 函数中的一个问题(与 VO 不兼容)(#779) - 重要提示:如果在 dbf 索引表达式中使用 Descend(),则需要重键这些索引!
  • -
  • 返回 PSZ 值的后期绑定代码没有正确地将该值存储在 USUAL 内(#603)
  • -
  • 修正了缓存 IO 中可能导致低级文件 IO 问题的一个问题 (#724)
  • -
  • 在未打开表的区域调用 VODbAlias() 函数时,现在会返回 String.Empty,而不是 NULL。(#733)
  • -
  • 修正了 MExec() 函数的兼容性问题 (#737)
  • -
  • 在代码块中无法正确识别 M-> 前缀 (#738)
  • -
  • 显式 DATE -> DWORD 转换会返回不正确的 NULL_DATE 值。
  • -
  • 修正了后期绑定调用和 OUT 参数的问题 (#771)
  • -
  • 添加了一个新的 __WinDate 类型,用于在 VOSTRUCT 或 UNION 中存储 DATE 值。(#773)
  • -
  • 修正了 FoxPro 数组的几个问题
  • -
  • 为操作 __ArrayBase<T> 的函数删除了 T 上的 TypeConstraints
  • -
  • 修正了 Directory() 包含按短名匹配而不按长名匹配的文件的问题 (#800)
  • -
    - RDDs - -
  • 使用 DBFCDX 驱动程序创建新 DBF 时,不会再自动删除现有 CDX 文件 (#603)
  • -
  • 修复了在 DBFCDX 中更新备注内容的问题 (#782)
  • -
  • 修复了创建 DBFCDX 索引文件时出现的运行时异常,文件名较长 (#774)
  • -
  • 修正了 DBSeek() 在使用 OrderDescend() 时甚至无法找到已删除记录的问题。
  • -
  • 修复了 OrderCreate()  中 ADS RDD 中缺少调用 AdsClearCallbackFunction() 的问题 (#794)
  • -
  • 修正了 VODBOrdCreate 函数在 cOrder 参数包含空字符串时失效的问题 (#809)
  • -
    - 宏编译器 - -
  • 修正了预处理器中的一个问题
  • -
  • 添加了对使用 @ 操作符通过引用传递参数的支持
  • -
  • 在宏编译器中添加了对 M->、_MEMVAR-> 和 MEMVAR-> 前缀的支持
  • -
  • 当宏编译器发现 2 个或更多同名函数时,它现在会使用与编译器相同的优先级规则:
  • - -
  • 首先使用用户代码中的函数
  • -
  • "特定" 运行时(XSharp.VO、XSharp.XPP、XSharp.VFP、XSharp.Data)中的函数优先于 XSharp.RT 和 XSharp.Core 中的函数。
  • -
  • XSharp.RT 中的函数优先于 XSharp.Core 中的函数
  • -
    -
    - Visual Studio 集成 - 在本次生成中,我们开始使用 GitHub 上的 “Community toolkit for Visual Studio extensions”。该工具包包含针对 VS 扩展编写者代码的 “最佳实践”,就像我们一样。因此,现在有更多代码以异步方式运行,这将带来更好的性能。 - 我们还开始删除 32 位特定代码,这些代码在迁移到 VS 2022(Visual Studio 的 64 位版本,预计将于 2021 年 11 月发布)时会成为问题。 - 新特性 - -
  • 为编辑器添加了多项新功能
  • - -
  • 编辑器现在可以显示实体之间的分隔线。您可以在选项对话框中启用/禁用该功能(#280)
  • -
  • QuickInfo 工具提示中的关键词现在已着色 (#748)
  • -
  • 转到定义 “现在也适用于 ”外部 "类型。编辑器会生成一个临时文件,其中包含外部类型的类型信息。在选项对话框中,您还可以控制生成的代码是否包含注释(从外部 DLL 附带的 XML 文件中读取)。(#763)
  • -
  • 您可以通过 “工具/选项 ”菜单项(PUBLIC、EXPORT 或 NONE)控制 PUBLIC 可见性所使用的关键字。
  • -
  • 您可以通过 “工具/选项 ”菜单项(PRIVATE 或 HIDDEN)控制用于 PRIVATE 可见性的关键字。
  • -
    -
    - -
  • 现在,VS 内的各种代码生成器都遵循源代码编辑器的大写规则。
  • -
  • 现在, intellisense 数据库的视图可返回源代码和外部程序集中的唯一命名空间
  • -
  • 工具菜单中的 X# 特定菜单项已移至单独的子菜单中。
  • -
  • 为 WinForms 设计器添加了选项,以便在保存时生成 form.prg 和 form.designer.prg 文件的备份(.bak)文件 (#799)
  • -
    - Bug 修复 - -
  • 修复了编辑器中的几个问题:
  • - -
  • 我们对编辑器进行了多项改进以提高速度(#689、#701)
  • -
  • 修正了 FOREACH 循环中变量类型查找的一个问题 (#697)
  • -
  • 未显示从完成列表中选择的方法的参数提示(#706)
  • -
  • 当关键字后面没有空格时,关键字大小写同步不起作用 (#722)
  • -
  • 转到定义总是转到定义函数的文件的第 1 行/第 1 列 (#726)
  • -
  • 类中常量成员的代码自动完成 (#727)
  • -
  • 用于 DEFINES 的 QuickInfo(#730、#739)
  • -
  • 使用操作符“. ”完成 VOSTRUCT 成员 (#731)
  • -
  • 在这些情况下,ENUM 和 FUNC 关键字现在被识别为标识符,而不是大小写同步(#732)。
  • -
  • 修复了打开文件时的一个问题 (#742)
  • -
  • 修复了默认值 NULL、NULL_DATE 和 NULL_OBJECT 的参数提示显示 (#743)
  • -
  • 修复构造函数的参数提示错误 (#744)
  • -
  • 嵌套类并非总能被 intellisense 正确处理(#745)
  • -
  • 修正了使用 ARRAY OF <something> 声明的变量的类型查找问题 (#749)
  • -
  • 当缓冲区包含无效代码时,编辑器有时会 “冻结”(#751)
  • -
  • 不存在的命名空间会产生错误的完成列表(#760)
  • -
  • 修正了在某些情况下输入无效代码时出现的编辑器异常 (#791)
  • -
    -
    - -
  • Windows 窗体的代码生成器将制表符替换为空格。这一问题已得到修复。(#438)
  • -
  • 修复了表单设计器损坏包含 EXPORT ARRAY OF <type> 的代码的问题
  • -
  • 修复了表单设计器中的一个问题,即在编辑器中删除事件处理程序时,某些代码会被删除 (#812)
  • -
  • 修正了表单设计器将 EXPORT、INSTANCE 和 HIDDEN 关键字转换为 PUBLIC 和 PRIVATE 的问题 (#802)
  • -
    - VO-兼容编辑器 - -
  • 现在,所有兼容 VO 的编辑器都支持完整的撤消/重做功能。还为菜单编辑器添加了剪切/复制/粘贴功能
  • -
  • 修复了设计和测试模式下 VOWED 控件的若干视觉问题 (#741)
  • -
  • 修复了在 “属性 ”窗口有焦点时,Alt-Tab 键跳出编辑器时 VS 崩溃的问题 (#764)
  • -
  • 调整了 ComboBoxEx 控件,使其具有与 VO 中相同的固定高度。还允许以前的行为,即当用户手动将高度增加 50 像素以上时,将使用此高度(#750)
  • -
  • 为 “属性 ”窗口中菜单编辑器的 “Button Bmp” 属性添加位图缩略图
  • -
  • 已添加对在菜单编辑器中指定色带的支持。要使用的色带(位图)需要在菜单主项的属性中指定为文件名 (#714)
  • -
  • 修正了窗口编辑器中事件代码生成的一些问题(#441、#46)
  • -
    - - Changes in 2.8.3.15 (Cahors) - 编译器 - 新特性 - -
  • 现在,您可以在变量名或数字之间使用 .AND. 逻辑运算符和 .OR. 逻辑运算符,而无需前导或尾部空白 (a.AND.b)
  • -
  • FoxPro 方言中的 PRIVATE 声明不再允许初始化器。
  • -
  • 在 FoxPro 方言中添加了对 FoxPro NULL 日期({ / / }、{ - - } 和 { .. }))的支持
  • -
    - Bug 修复 - -
  • 修正了在 DIM 数组中使用 DEFINE 作为维数的问题 (#638)
  • -
  • 修正了 FoxPro PUBLIC ARRAY 命令的一个问题(ARRAY 关键字不再是强制性的)(#662)。
  • -
  • 修正了以 DEFAULT(Usual) 表达式作为函数/方法调用参数的问题 (#664)
  • -
  • 修正了用 LOCAL 声明声明变量并用 DIMENSION 命令标注尺寸的问题 (#683)
  • -
  • 修正了不同 X# 运行时程序集中同名重载的问题,该问题会导致 FRead() 出现问题(#686)
  • -
  • 修正了通过引用传递 PRIVATE 和 PUBLIC 内存变量的问题 (#691)
  • -
  • 修正了 PARAMETERS 语句的一个问题 (#691)
  • -
  • 修正了因 .AND. 和 .OR. 处理方式的更改而导致的实数问题 (#704)。
  • -
  • 修复了类声明中 DECLARE METHOD / ACCESS / ASSIGN 行的解析问题。
  • -
  • 修正了混合整数类型(如 int 和 word)的二进制运算符(+、-、*、/)的截断结果问题
  • -
    - 运行时 - Bug 修复 - -
  • 运行时状态中的 _shutdown 标志现在会在系统关闭时设置。
  • -
  • 修正了 FoxPro ALen() 函数的一个问题 (#650)
  • -
  • 在多个位置添加了默认值(#678)
  • -
  • 修正了由 RDD 打开的文件上的 FRead() 会进入无尽循环的问题 (#688)
  • -
  • 修正了文件处于 EOF 状态时 FieldGet() 的一个问题 (#698)
  • -
  • 修正了当范围为空且另一工作区或另一工作站添加了与范围匹配的记录时的范围问题 (#699)
  • -
  • 修正了 Skip(0) 之后的 BOF 设置问题 (#700)
  • -
    - 宏编译器 - 新特性 - -
  • 现在,您可以在变量名或数字之间使用 .AND. 运算符,而无需前导或尾部空白
  • -
  • 在 FoxPro 方言中添加了对 FoxPro NULL 日期({ / / }、{ - - } 和 { . . })的支持
  • -
  • 宏编译器不再重新格式化包含 .AND. 和 .OR. 的字符串 (#694)
  • -
  • 我们新增了一个试验性的更快脚本编译器。该脚本编译器只允许编译语句,而不允许编译函数、类等。
    这种新的脚本编译器比现有的脚本编译器快得多,使用的内存也少得多。
    要调用此脚本编译器,请使用新函数 ExecScriptFast(),其参数与 ExecScript() 相同。
    您可以编译多行脚本。编译器应能识别所有接收参数的语句,包括 PARAMETERS 和 LPARAMETERS。
    如果您在代码中使用脚本,我们很乐意听取您的反馈意见。
    示例代码应能正常工作:
  • -
    -
    FUNCTION Start() AS VOID
    LOCAL ctest AS STRING
    TRY
       cTest := "? 'Hello world'"
       ExecScriptFast(cTest)
       cTest :=String.Join(e"\n",<STRING>{;
           "PARAMETERS a,b,c",;
           "RETURN CallMe(a,b,c)"})
       ? ExecScriptFast(cTest,1,2,3)
       cTest :=String.Join(e"\n",<STRING>{;
           "LPARAMETERS a,b,c",;
           "RETURN CallMe(a,b,c)"})
       ? ExecScriptFast(cTest,1,2,3)

    CATCH e AS Exception
       ? e:ToString()
       END TRY

    wait
    RETURN


    FUNCTION CallMe(a,b,c) AS USUAL
       ? "在函数内部,接收参数",a,b,c
       RETURN a+b+c
    -
    请测试这一新功能,并告诉我们您的想法。
    - Visual Studio 集成 - 新特性 - -
  • 当光标位于实体之外时(例如文件开头的 USING 语句),“高亮显示单词 ”现在可以高亮显示整个文件中的单词。
  • -
    - Bug 修复 - -
  • 修正了在兼容 VO 的 Windows 编辑器工具箱中显示自定义控件名称的问题
  • -
  • 修正了从与 VO 兼容的 Windows 编辑器的 cavowed.inf 中加载设置时出现额外空格的问题
  • -
  • 修正了赋值语句后的完成列表不正确的问题 (#658)
  • -
  • 修正了编辑器中删除代码后出现的异常 (#674)
  • -
  • 修正了将文件附加到外壳窗口时 VS IDE 中的 “冻结 ”问题 (#676)
  • -
  • 修正了在使用 AllowDot 的 VO Dialect 中用圆点代替冒号时出现的问题 (#679)
  • -
  • 修正了在类内显示完成列表的问题 (#685)
  • -
  • 修复了编辑器中的一个性能问题 (#689)
  • -
  • 修正了在编辑器中显示函数重载的问题 (#692)
  • -
  • 修正了 intellisense  在 !、.NOT.或其他运算符之后出现的问题 (#693)
  • -
  • 修正了完成列表中显示不正确方法的问题 (#695)
  • -
    - 工具 - -
  • 修正了 VOXPorter 中有关资源和复制到资源子文件夹的问题
  • -
    - - Changes in 2.8.2.13 (Cahors) - 编译器 - -
  • 修正了扩展方法未标记为 STATIC 的问题 (#660)
  • -
  • 修正了 IIF() 表达式在返回 OBJECT 时被赋值为十进制的问题。
  • -
  • pragma 命令没有检查当前方言
  • -
  • 修正了预处理器中的一个异常
  • -
  • FoxPro LOCAL ARRAY 生成的不是 LOCAL 变量,而是 PRIVATE 变量。
  • -
  • XSharp.RT 中的函数如果在 XSharp.VO、XSharp.VFP 或 XSharp.RT 中被覆盖,将不再产生警告。不在 XSharp.RT 中的版本将优先使用
  • -
  • 在 FOREACH 循环中枚举 USUAL 变量时,现在会调用一个运行时函数,该函数会返回 USUAL 中的 ARRAY,否则会出错。
  • -
  • 启用 /vo7 时,现在支持从 OBJECT -> NUMERIC 的隐式转换。
  • -
    - 运行时 - -
  • 现在,在 FOREACH 循环中枚举 USUAL 变量将调用一个运行时函数,该函数将返回 USUAL 中的 ARRAY,否则将抛出错误 (#246)
  • -
  • 修正了一个问题,即创建索引时有一个 “val ”块和 0 条记录 (#619)
  • -
  • 与 FoxPro 相比,修正了与 ALen() 函数和数组处理不兼容的问题 (#642)
  • -
  • 我们更正了 FoxPro AIns() 函数中的一些问题 (#650)
  • -
  • 我们添加了 ShowFoxArray() 函数,当您在 FoxPro 数组上调用 ShowArray() 时,将自动调用该函数(#650)。
  • -
  • 已添加对 OClone() 的支持
  • -
  • _Quit() 函数现在会关闭所有数据库,然后杀死当前正在运行的进程 (#665)
  • -
  • 修正了 DbOrderInfo 的一个问题 (#666)
  • -
  • 修正了货币值的一元减运算符问题 (#670)
  • -
  • 修正了整数函数在接收到货币值时出现的问题(#671)
  • -
  • 我们新增了 MemCheckPtr() 的实现 (#677)
  • -
    - 宏编译器 - -
  • 修正了在使用 Assembly.Load() 加载新程序集后调用函数的问题
  • -
  • 已添加对通过引用传递变量的支持(尚未支持使用 Clipper 调用约定的函数)(#653)
  • -
    - VO SDK - -
  • 修正了 GUI 类中 GetObjectByHandle() 的一个问题(#677)
  • -
    - Visual Studio 集成 - -
  • 修复了 VS 内部 “生成” 页面上的一个异常 (#654)
  • -
  • 项目系统没有为 XML 文档生成写回正确的属性 (#654)
  • -
  • 头文件中的 intellisense 可能会崩溃(#657)
  • -
  • 我们在编辑器的成员组合框中添加了 #defines 和用户定义的命令(#command、#translate),作为全局类型的成员。现在,您还可以对使用 #define 定义的值执行转到定义。
  • -
  • 我们更正了枚举的成员完成问题 (#656)
  • -
  • 我们修复了 Windows 窗体编辑器中的一个问题,如果另一个 VS 扩展加载了旧版本的 Mono.Cecil (#661)
  • -
  • 启用项目选项 “允许点 ”时,代码自动完成不会显示实例成员(#679)
  • -
  • "header" 新项目模板的扩展名是 .VH。现已改为 .XH
  • -
  • 修复因 CAVOWED.INF 不正确而导致 VO 兼容窗口编辑器崩溃的问题
  • -
  • 方法或函数调用括号内的代码自动完成功能无法正常工作
  • -
  • 当没有更改文件时,提高了 Visual Studio 中的生成速度(#675)
  • -
    - 工具 - -
  • VO Xporter 在输出文件夹的 .xsproj 文件中生成了 2 行 (#672)
  • -
    - - - Changes in 2.8.1.12 (Cahors) - 编译器 - -
  • 修正了插值字符串的问题(#598、#622):
  • - -
  • 脚本编译器现在能正确设置运行时中当前活动方言的 AllowDot 编译器选项(Core 和 FoxPro:AllowDot = true)
  • -
  • 当使用 DOT(.) 作为实例方法分隔符进行编译时,插值字符串内部会使用“: ”字符作为格式字符串的前缀。
  • -
  • 使用 COLON (:) 作为实例方法分隔符进行编译时,冒号不能用于分隔表达式和插值字符串内的格式字符串。在这种情况下,我们现在支持在表达式和格式字符串之间使用双冒号(::)。例如
  • -
    -
    - LOCAL num as LONG
    num := 42
    ? i"num = {num::F2}" // 该数字为两位小数
    WAIT
    - -
  • 现在可以在 VOSTRUCT 和 UNION 中使用 DATE 字段 (#595)
  • -
  • 修正了 “UnconvertedConditionalOperator ” assertion 错误 (#616)
  • -
  • 当使用命名空间 “xsharp ”时,修正了编译器中的 assertion 错误 (#618)
  • -
  • 修正了 COM 程序集中定义的方法的 “failed to emit” 问题,这些方法带有默认参数和通过引用传递的参数 (#626)
  • -
  • 修正了一个处理默认参数和方法调用的问题 (#629)
  • -
  • 修正了 _SizeOf() 运算符无法计算 VOSTRUCT 正确大小的问题(#635)。
    请注意,_SizeOf() 只能在应用程序编译为 x86 或 x64 模式时在编译时计算。为 AnyCpu 编译时,我们将在运行时计算 _SizeOf()。
  • -
  • 修正了一个问题,即对于 USUAL 类型的变量,“IS Pattern” 并非总能正常工作 (#636)
  • -
    - 运行时 - -
  • 实现了 FoxPro Evl() 函数(#389)
  • -
  • 即使没有打开区域,DbCloseArea() 也会返回 TRUE。这与 VO 不兼容。现在我们将返回 FALSE。(#611)
  • -
  • 宏编译器无法在动态加载的程序集中找到函数 (#607)
  • -
  • 当 DBF 文件以 “只读 ”方式打开并创建索引时,由于 RDD 试图在 DBF 标头中设置 “production index ”标志,因此在关闭文件时会出现运行时错误。对于以 “只读 ”方式打开的文件,不再设置该标记 (#610)
  • -
  • 修正了 DbOrderInfo(DBOI_KEYCOUND) 中的一个异常(已捕获) (#613)
  • -
  • 修正了工作区调试窗口的一个问题 (#625)
  • -
  • 当索引不可用时,DbOrderInfo() 返回不正确的值 (#627)
  • -
  • 修正了 TransForm() 和符号参数的一个问题 (#628)
  • -
  • 修正了 StrZero 函数的一个问题 (#637)
  • -
  • 修复了 AELement() 函数的一个问题 (#639)
  • -
    - RDD 系统 - -
  • 当索引表达式包含 “nullable ”字段时,修正了使用 SqlExec() 函数创建的工作区/游标上的索引问题 (#630)
  • -
    - 宏编译器 - -
  • 宏编译器在查找稍后加载的程序集内的函数时遇到问题(#607)
  • -
    - Visual Studio 集成 - -
  • 修复从常规页面保存方言的问题
  • -
  • 快速信息和转到定义对同一类内的成员不起作用,如果这些成员的前缀不是 SELF:
  • -
  • 修复使用“? ”语法的允许 null 值的类型的代码完成问题 (#567)
  • -
  • 方法组合框未正确同步(#602)
  • -
  • Todo 注释并不总是能被正确解析,当它们是另一个词的一部分或不是该行的第一个词时,它们也会被包含在内。这一问题已得到解决。(#617)
  • -
  • 修复 “警告作为错误 ”无法从 “生成” 页面保存的问题 (#621)
  • -
  • 修复编辑器窗口分割后开始出现的问题(#641)
  • -
  • 从完成列表中选择 “分配 ”类型的成员后,编辑器错误地插入了一个“(”字符(#643)
  • -
  • 在实体(函数、方法)的声明行键入“(”会触发参数补全。这一问题已得到修复。(#643)
  • -
  • 构造函数调用时未显示参数提示(#645)
  • -
  • 完成列表错误地包括静态成员 (#646)
  • -
  • 外部类型的 QuickInfo 不包括参数的 “AS Type”(#647)
  • -
  • 修正了为尚未完全加载的项目解析器选项时出现的问题(#649)
  • -
  • 在编辑器中,局部变量并非总能以正确的类型被识别(#651)
  • -
    - 安装 - -
  • 安装程序将错误版本的 XSharp.CodeAnalysis.dll 添加到了全局程序集缓存中。这一问题已得到修复。
  • -
    - - Changes in 2.8.0.0 (Cahors) - 编译器 - 常规 - -
  • 我们已迁移到最新版本的 Roslyn 源代码。
  • -
  • 通过引用将类型化变量传递给具有 clipper 调用约定(未类型化参数)的函数/方法时,无法更新局部变量。这一问题已得到修复。
  • -
  • /vo7 编译器选项未启用时,在 VO 方言的程序中使用 @ 操作符可能会生成产生 “无法装箱 ”错误的代码。(#551)
  • -
  • 已优化 NULL_PSZ 和 NULL_SYMBOL 的生成代码 (#398)
  • -
  • 当使用 PSZ 类型的元素时,结构和 UNIONS 上生成的 VoStructAttribute 大小错误。这一问题已得到修复。
  • -
  • 修正了将 NULL 转换为 LOGIC 时的内部编译器错误
  • -
  • _SIZEOF() 操作符现在将为 VOSTRUCTS 和 UNIONS 生成一个常量。(#545)
  • -
  • 使用关键字作为字段名可能会导致问题。例如,FIELD->NEXT 就处理不当。现在编译器允许这样做了。当然,您也可以使用 @@ 前缀来告诉编译器,在特定情况下,您指的不是关键字,而是一个标识符。
  • -
    - -
  • 包含表达式列表的括号表达式无法正确编译。这一问题已得到修复。
    如果您想在一个 IIF() 表达式中包含多个表达式,就会出现这种情况。
     
      LOCAL l AS LOGIC
      LOCAL v AS STRING
      l := TRUE                
      v := "abcd"
      ? iif (l, (v := Upper(v), Left(v,3)), (v := Lower(v), Left(v,4)))              
    由于 Roslyn(C# 编译器)不允许在条件表达式中使用表达式列表,因此我们现在将括号表达式转换为对局部函数的函数调用。括号表达式中的表达式将成为新局部函数的主体,编译器将调用生成的局部函数。
  • -
  • 现在,如果在有同名成员的类中调用 Function,编译器会发出警告。例如
  • -
    - - CLASS Test
    METHOD Left(sValue as STRING, nLen as DWORD) AS STRING
      RETURN "Test"
    METHOD ToString() AS STRING
      RETURN Left("abc",2)   // 这会产生警告,说明调用的是函数 Left() 而不是方法 Left()。
                             // 如果要调用该方法,则必须在调用前加上 SELF:
    END CLASS
    - 新的语言特性 - -
  • 我们增加了对 LOCAL FUNCTIONLOCAL PROCEDURE 语句的支持。
    这些函数和过程会成为另一个函数、过程、方法等的语句列表的一部分。它们有以下限制:
  • - -
  • LOCAL FUNCTION 必须以 END FUNCTION 结束,LOCAL PROCEDURE 必须以  END PROCEDURE 结束。
  • -
  • 支持普通函数的全部 “签名”,包括参数、返回类型、类型参数和类型参数约束。
  • -
  • 它们不能有属性(它们不是编译到方法中,而是编译到一种特殊的 Lambda 表达式中)
  • -
  • local function 的唯一有效修饰符是 UNSAFE 和 ASYNC
  • -
  • 由于它们不能具有属性,我们也不支持无类型参数,因此所有参数都必须是类型参数
  • -
  • 如果需要一个参数数量可变的 local function,可以定义默认参数值或使用 PARAMS 数组
  • -
  • Local functions 可以访问周围代码中的局部变量。Roslyn 创建了一个特殊结构,用于存储 Local functions 与其周围代码共享的变量
  • -
    -
    - - -
  • 已添加对表达式体成员的支持。通过表达式体定义,您可以以非常简洁、易读的形式提供成员的实现。只要任何受支持成员(如方法或属性)的逻辑由单个表达式组成,您就可以使用表达式体定义。表达式体定义的一般语法如下:
    MEMBER => expression
    一个表达式体方法由一个单一表达式组成,该表达式返回一个值,其类型与方法的返回类型匹配,或者对于返回 void 的方法,执行某些操作。例如,重写 ToString 方法的类型通常包括一个单一表达式,该表达式返回当前对象的字符串表示形式。
    例如
  • -
    - CLASS MyClass
    METHOD ToString() AS STRING => "My Class"
    END CLASS

    这段代码的结果与以下代码完全相同

    CLASS MyClass
    METHOD ToString() AS STRING
      RETURN "My Class"
    END CLASS
    - 因此,可以说 => 操作符取代了 RETURN 关键字。 - - -
  • 我们添加了对 C# 的 NULL 合并操作符 (??) 以及 NULL 合并赋值操作符 (??=) 的支持。
    该操作符对 != null 进行检查。该运算符只适用于引用类型,不适用于 USUAL、DATE 等值类型和 INT 等内置类型。
  • -
    - FUNCTION Start() AS VOID
    LOCAL s := NULL AS STRING
    s := s ?? "abc"            // ?? 是 NULL 合并操作符
    s ??= "abc"               // 这与之前的结果相同,但更紧凑
    ? s
    RETURN
    // 因此,这将无法编译
    LOCAL i := 0 AS LONG
    i := i ?? 42      // 操作符“?? ”不能应用于 “int ”和 “int ”类型的操作数
    // 但这可以编译
    LOCAL i := NULL AS LONG?   // Nullable LONG
    i := i ?? 42      
    - -
  • 我们为带有 INIT 访问器的属性添加了支持。通过这些访问器,您可以为属性赋值,但只能在构造函数中进行。该属性只能在类/结构的构造函数之外读取。
  • -
  • 我们添加了一个新的编译器选项 /enforceself。使用该选项后,类内对实例方法的所有调用都必须以 SELF(或 SUPER)作为前缀。在 FoxPro 方言中,也支持此选项。请注意,某些生成的代码(如 Windows 窗体编辑器中的代码)并不使用 SELF:,应用此编译器选项可能会迫使您更改生成的代码,或者可能会迫使您在代码中添加 #pragma options(“enforceself”, disable) 以禁用该文件的选项。
  • -
  • 我们添加了一个新的编译器选项 /allowdot 。通过该选项,您可以控制是否允许使用 DOT(“.”)运算符访问实例成员。Core 和 FoxPro 方言的默认值是 /allowdot+。其他方言的默认值为 /allowdot-。也可以通过 #pragma 来使用: #pragma options(“allowdot”, enable)
  • -
  • 源代码中的 XML 注释不再需要完全限定的 cref 名称(#467)
  • -
    - 预处理器 - -
  • 预处理器现在会自动声明一个名称为 <udc> 的匹配标记。该匹配标记将包含预处理器与 UDC 匹配的所有标记。例如,它可以用来将原始源代码作为字符串添加到结果中:
    #command INSERT INTO <*dbfAndFields*> FROM MEMVAR => __FoxSqlInsertMemVar(<"udc">)
  • -
  • 通配符标记(如上一条中的 dbfAndFields 标记)现在也可以出现在 UDC 中间。它们将继续匹配,直到找到通配符标记(上例中为 FROM 关键字)后的第一个标记。
  • -
  • 标准头文件(来自 XSharp\Include 文件夹)现在也作为资源包含在编译器中。当文件丢失时,这些文件将从资源中加载。
  • -
  • 预处理器没有为 __FOX2__ 生成宏。这一问题已得到解决(但现已过时,请参见 FoxPro 方言)
  • -
  • 当通配符标记与 stringify 结果标记一起包含时,这些标记之间的空白会正确地包含在 UDC 的输出中。
  • -
    - FoxPro 方言 - -
  • 上一个版本中添加的允许将括号作为 FoxPro 方言数组分隔符的功能有太多副作用。我们暂时删除了这一功能。您必须再次使用带方括号的数组参数。
  • -
    - -
  • 不再需要 /fox2 编译器选项(编译器会忽略该选项)。
    编译器现在会检查运行时函数是否被标记为 NeedsAccessToLocalsAttribute,(XSharp.Internal 名称空间中定义的 NeedsAccessToLocalsAttribute)。
    如果编译器发现一个函数标有此属性,如 Type() 函数或 SQLExec() 函数,那么它将在函数调用前后添加一些代码,以允许这些函数访问堆栈上的局部(变量)。只有启用了 /memvar 编译器选项,并且仅在 FoxPro 方言中才会发生这种情况。
    NeedsAccessToLocalsAttribute 有一个强制参数,用于指示函数是要写入局部(变量)还是只读取局部(变量)。
    当函数需要写入局部(变量)时,编译器会在调用后生成额外的代码,以确保在需要时更新局部(变量)。
  • -
    - -
  • 我们为 FoxPro 嵌入式 SQL 语句添加了一个标准头文件。该头文件应能解析嵌入式 SQL,但会输出尚未支持嵌入式 SQL 的警告。
  • -
  • 我们添加了对 FoxPro 数组的支持,在运行时为数组类型添加了一个特殊的子类型,并支持 DIMENSION 和 (Re)DIMENSION 以及通过分配单个值来填充数组。(#523)
  • -
    - 运行时 - 常规 - -
  • 修正了 FSeek() 和 FSeek3() 返回值的一个问题
  • -
  • AsHexString() 和 AsString() 对 PTR 值的显示结果与 Visual Objects 不一致。
  • -
  • 修复了 DBFCDX RDD 的 SetScope() 在前一个作用域为空时的问题 (#578)
  • -
  • 调整了 Secs() 函数,使其更兼容 Visual Objects。
  • -
  • Array 和 Array Of 的枚举器现在会返回内部数据克隆的枚举器,以防止在代码中修改数组时出现运行时错误。
  • -
  • 现在,各种 Xbase 类型(DATE、FLOAT、CURRENCY、BINARY、ARRAY、USUAL 等)都标有 [Serializable] 属性并实现了 ISerializable。它们都能与 BinaryFormatter() 类正常工作,因为该类不仅能存储值,还能存储 stream 中的值。大多数类型还能与 JsonSerializer 一起使用,但并非所有值都能通过 Json 序列化器正确反序列化。(#529)
  • -
  • Date 类型上的 CompareTo() 操作符不能正确排序数值,因为它对结构中元素的内存布局做出了错误的假设。这一问题已得到修复。
  • -
  • 我们对 DbUseArea() 和 DbSkip() 等函数的错误处理进行了一些更改。在发生错误(例如文件无法打开)时,这些函数的处理方式并不总是与 Visual Objects 相同。现在,我们还添加了一个与 Visual Objects 中默认错误处理程序类似的错误处理程序,该处理程序的对话框包含 “放弃”、“重试 ”和 “忽略 ”按钮。只有当错误对象的属性 “CanRetry ”设置为 “TRUE ”时,重试按钮才会启用(#587, #594)
  • -
  • 修正了 Val() 与小数位数超过一位的字符串不兼容的问题 (#572)
  • -
  • 修正了 “反向” 比较日期的问题 (#543)
  • -
  • 我们添加了几个函数,它们可以弹出对话框,显示当前打开的工作区、设置、全局变量以及私有和公共内存变量。请参见 DbgShowGlobals(),  DbgShowWorkareas(), DbgShowMemvars() 和 DbgShowSettings()
  • -
    - RDD 系统 - -
  • 当工作区只读打开时,DbCommit 和 DbCommitAll 会失败。该问题已得到修复。(#554)
  • -
  • 当 FoxPro CDX 文件有多个标志,而其中一个标志的索引表达式无效时(例如,Visual Objects 接受缺失的结尾括号),RDD 系统根本无法打开 CDX。现在我们打开 CDX,但索引表达式已损坏的标记除外。(#542)
  • -
  • 已添加对 Advantage GUID 和 Int64 列的支持。GUID 以字符串形式返回,INT64 以 INT64 形式返回。我们还添加了 ACE 头文件中一些缺失的 DEFINE 值。
  • -
  • 修复了 DBFNTX 驱动程序中负锁定偏移不正确的问题。
  • -
  • 我们修复了几个与索引 “信息”(KeyCount、KeyNo)等有关的 “奇特 ”问题,这些问题涉及带作用域、降序索引等的索引(#423、#578、#579、#580、#582、#583、#593、#599)。
  • -
  • 修正了从不同线程和不同工作站打开 MEMO 文件(Fpt 和 DBT)时出现的问题 (#577)
  • -
  • 我们更正了一个锁定和损坏问题,当两个站频繁写入同一个 CDX 文件时,可能会出现该问题。(#575, #592)
  • -
  • 提高锁定失败时的锁定速度。(#576)
  • -
  • SetOrder(0) 对 ADS 表不起作用 (#570)
  • -
  • 更改了几个 ADS 方法原型,使其具有正确的 IN / OUT 修饰符 (#568)
  • -
    - 宏编译器 - -
  • 修正了 FoxPro 方言中以 VariableName.PropertyName 形式为表达式赋值的问题
  • -
  • X# 宏编译器允许在宏中引用 GLOBAL 和 DEFINE 值。这使得编译器与 VO 不兼容,当索引与 GLOBAL 或 DEFINE 同名的字段时会出现问题。宏编译器已不再支持引用 GLOBAL 或 DEFINE。(#554)
  • -
  • 宏编译器在变量名被括号包围时遇到了问题。编译器将其视为类型转换。现已修复。(#584)
  • -
    - Visual Objects SDK - -
  • 为 Win32APILibrary 程序集添加了一些缺失的定义,如 DUPLICATE_SAME_ACCESS。
  • -
  • DbServer:Filter 有时会返回 NIL 而不是空字符串 (#558)
  • -
    - - VO 方言 - -
  • 我们新增了对 SysObject 的支持 (#596)
  • -
    - Xbase++ 方言 - -
  • 修正了 2.7 中引入的 XPP Collation 表问题
  • -
    - FoxPro 方言 - -
  • /fox2 编译器选项添加了 NeedsAccessToLocalsAttribute 属性
  • -
  • 调整了向 Type() 和 SqlExec() 等函数公开 LOCAL 变量值的代码。
  • -
  • 有几个函数已经标记了新属性,这样它们就能 “看到” 局部变量。
  • -
  • 添加了带单个参数的 TransForm() 重载。
  • -
  • 修正了 SQLExec() 函数和包含“:”(冒号)字符的 sql 语句的一个问题。
  • -
  • 我们添加了 Bit..() 函数(感谢 Antonio)
  • -
  • 我们添加了 CapsLock()、NumLock() 和 InsMde(感谢 Karl-Heinz)。
  • -
  • 我们改进了 FoxPro 数组代码 (#523)
  • -
    - - 运行时脚本 - 此版本通过 ExecScript() 函数引入了运行时脚本功能。此时,如果使用运行时脚本,则必须包含完整宏编译器(XSharp.MacroCompiler.Full.dll)及其支持动态链接库(XSharp.Scripting.dll , XSharp.CodeAnalysis.dll ), - 我们正在开发一个轻量级的运行时脚本版本,它将包含在下一个版本中。 - 更多信息参见 运行时脚本 - Visual Studio 集成 - 此版本中的 Visual Studio 集成不再支持 Visual Studio 2015。仅支持 Visual Studio 2017 和 2019。 - 常规 - -
  • 在子文件夹中生成的新代码模板的命名空间名称以 “global:: ”开头。这一问题已得到修复。
  • -
  • 已添加对 LOCAL FUNCTION 和 LOCAL PROCEDURE 的支持。
  • -
  • 从文件夹中的类模板添加项目时,命名空间前缀为 “global::”。这一问题已得到修复。
  • -
  • 当磁盘上的 intellisense 数据库文件损坏时,就会发生错误。现在该文件已被删除,所有代码信息都已重新收集。
  • -
  • 工具/选项 “对话框中的 ”编辑器 “选项现在标记为 ”X#“,而不再是 ”XSharp"。
  • -
  • 我们在 “工具/选项 ”下添加了一个窗口,您可以在这里为我们的 VO 兼容编辑器设置几个值,如 grid 大小、粘贴偏移等。请在工具选项对话框中查找 X#。
  • -
  • 我们在编辑器的格式选项中添加了两个新选项:“修剪尾部空白 ”和 “插入最后换行符”。
  • -
  • 加载 MsTest 项目并不总是有效。打开项目时将调整 MsTest 项目的项目文件。(#563)
  • -
  • 我们新增了对 t4 模板(扩展名为 .tt 的文本文件,其中包含用于生成代码的脚本)的支持
  • -
  • 添加现有 .resx 文件不会使其成为父 form.prg 的子节点 (#197)
  • -
  • 项目属性对话框已完全重新设计。
  • -
    - - 源代码编辑器 - -
  • 较长的 “QuickInfo ”工具提示现在会多行显示,以便于阅读。
  • -
  • 重构了 “类型查找 ”代码,以提高源代码编辑器的运行速度
  • -
  • 对于使用 VAR 关键字声明的变量,如果存在嵌套的大括号和/或小括号,源代码编辑器中的成员补全并不总是有效。(#541, #560)
  • -
  • 修正了项目引用的成员完成问题 (#540)
  • -
  • 修正了在取消注释行块时出现的异常,如果行块中有一行是空行。
  • -
  • 我们增加了对 .editorconfig 文件的支持。请参阅文档文件中有关 .editorconfig files 的章节。
  • -
  • 折叠最后一个实体 om 后编辑器无法正常工作(#564)
  • -
  • 修正了续行注释后语法高亮显示的问题(#556)
  • -
  • 为委托添加了参数补全(#581)
  • -
  • 修正了 QuickInfo 工具提示中某些西里尔字符的问题(#504)
  • -
    - - 代码生成器 - -
  • 字符字面现在总是以 “c ”为前缀,值 > 127 则以十六进制符号书写,以确保它们在所有代码页中都能正常工作。
  • -
    - Windows 窗体设计器 - -
  • 我们修复了 DevExpress 控件的几个问题。
  • -
  • 修正了与 X# 关键字同名的控件的问题 (#566)
  • -
  • 修正了具有 DWORD 类型属性的控件的一个问题 (#588)
  • -
  • 修正了字符字面代码生成中的一个问题 (#550)
  • -
  • .designer.prg 不再需要有 “INHERIT FROM ”子句。(#533)
  • -
    - 对象浏览器 - -
  • 当您首先执行搜索时,转到定义不起作用 (#565)
  • -
    - VO 兼容窗体设计器 - -
  • 在 WED 中添加了支持,可正确直观地显示未定义预期控件类继承的自定义控件
  • -
  • 修正了 cavowed.inf 中无法识别非数据感知自定义控件的问题
  • -
  • 已添加对克隆 Windows 的支持(#508)
  • -
  • 修正了复选框的显示问题 (#573)
  • -
  • 修正了代码生成中的一个问题 (#553)
  • -
  • 在 “工具/选项 ”中有一个菜单选项,可设置多项设置(#279,#440)
  • -
    - 调试器 - -
  • 调试器现在完全支持 64 位调试
  • -
  • 已添加对 CURRENCY 和 BINARY 新类型名称的支持
  • -
    - 模板 - -
  • 我们对多个 VS 项目模板和项目模板进行了调整 (#589)
  • -
  • 我们新增了 X# t4 模板(.tt 文件)
  • -
    - - Changes in 2.7.0.0 (Cahors) - 编译器 - 常规 - -
  • 修正了 Nullable 类型的一个问题,这些类型在赋值时缺少显式转换
  • -
    - -
  • 修正了在类层次结构中调用父类构造器时跳过父类层次而调用祖类构造器的问题。
  • -
    - -
  • /usenativeversion 命令行选项未检查 +/- 开关。现已修复。
  • -
  • 修正了在文件名中包含嵌入式 DOT 的源文件(my.file.prg)中 PCall() 和 PCallNative() 的一个问题
  • -
  • 我们在 XSharp\Include 文件中添加了一个新的头文件,它可以帮助添加自定义用户定义命令或定义,你可以将其包含在每个项目中。我们的 XSharpDefs.xh 将自动包含该文件(CustomDefs.xh)。
    该文件的默认内容只是一些注释。
    安装程序不会覆盖该文件夹中的文件,卸载产品时也不会删除该文件。
    您可以选择在项目文件下的包含文件夹中自定义该文件。不过,您也可以将同名文件添加到项目文件夹或项目/解决方案的通用包含文件夹中。最后一个位置可以让您将头文件与其他源代码一起置于源代码控制之下。
  • -
    - FoxPro 方言 - -
  • 编译器现在允许在 LOCAL、PRIVATE 和 PUBLIC 声明中使用 M Dot (M.) 前缀。(LOCAL m.Name)
  • -
  • 在 Foxpro 对话框中,编译器现在也接受小括号作为数组分隔符 (aMyArray(1,2))
  • -
  • 编译器现在允许(或忽略)PRIVATE、PUBLIC、PARAMETERS 和 LPARAMETERS 声明中的 AS Type OF Classlib 子句。
  • -
    - -
  • 支持 TRY CATCH 的 CATCH 子句中的 TO 关键字
  • -
  • 已添加对 ASSERT 命令和 SET ASSERT 的支持
  • -
    - -
  • 已添加对 SET CONSOLE 和 SET ALTERNATE 的支持
  • -
  • 使用单个等号运算符对宏进行赋值时不起作用(&myVar = 42)。这一问题已得到修复。
  • -
  • 已添加对零长度二进制字面量 (0h) 的支持
  • -
    - 生成系统 - -
  • 添加了一个项目属性,用于控制本地资源编译器是否抑制 RC4005 错误(重复定义)。
  • -
    - 运行时 - 常规 - -
  • IsMethod() 现在对重载方法返回 TRUE。
  • -
  • AbsFloat() “丢失” 了小数位数的设置。现已修复。
  • -
  • Binary:ToString() 在二进制值小于 15 时使用了个位数。现已修复。
  • -
  • 添加了隐式运算符,可将常量赋值给二进制。
  • -
  • 添加了将包含整数的 USUAL 值隐式转换为 Intptr 的功能。
  • -
  • 一些低级函数现在会在操作失败时设置操作系统错误编号 FERROR_EOF,就像在 VO 中一样。
  • -
  • 后期绑定代码中的异常并不总是显示错误发生的正确位置。这一问题已得到修复。
  • -
  • 我们增加了对 DataSessions 的支持。运行时中打开的工作区/cursor列表现在称为 “DataSession”(旧名称 “工作区 ”仍然可用)。
    您可以拥有多个 datasessions。您还可以使用 RuntimeState 类上的一个新方法 SetDataSession 来切换 RuntimeState 中的 “活动” datasessions。
    FoxPro 数据库在自己的 datasession 中打开。
    通过添加观察表达式,可以在调试器中检查打开的 DataSessions: XSharp.RDD.DataSession.Sessions
    每个 DataSession 都与一个线程相关联。当线程停止或中止时,DataSession 将被关闭,同时也会关闭其所有表。
    程序关闭时,所有 DataSessions 都会关闭,包括它们的表。这是通过 AppDomain:ProcessExit 事件处理程序完成的。
  • -
  • 在独占模式下打开文件的低级文件 IO 函数(包括 RDD 系统)现在使用 “缓冲 IO”。这将提高性能。
  • -
  • 删除了 Stream 和 MemoryStream 相互转换的函数(未文档化)。取而代之的是上一条中的缓冲区 I/O。
  • -
  • 我们为 FoxPro CursorProperties、DatabaseProperties 和 SQLProperties 添加了 System.Enum 类型。
  • -
  • 我们添加了一个 DatabasePropertyCollection 类型。该类型用于向字段添加 “附加 ”属性,如 FoxPro 表的 DBF 字段。.
  • -
    - 终端 API - -
  • 我们新增了对备用文件的支持。SET ALTERNATE TO SomeFile.txt。还可设置 ALTERNATE ONSET ALTERNATE OFF
  • -
  • ? 命令 现在尊重 Set Console 和 Set Alternate 的会话。
  • -
  • 我们新增了对 SET COLOR 命令的支持。只使用设置中的第一个颜色,闪烁属性将被忽略并解释为 “高亮”。例如 SET COLOR TO w+/b
  • -
  • 我们增加了一个 CLEAR SCREEN 命令
  • -
    - FoxPro 方言 - -
  • 添加了 Assert 对话框
  • -
  • 已添加对 DBC 文件的支持。这包括 SET DATABASE to 命令、DbGetProp() 以及读取作为数据库一部分的文件的属性,而无需首先显式打开数据库。目前,DbSetProp() 还不能执行任何操作。此外,DbAlias() 等类似函数也已实现。
  • -
  • 运行时现在可以使用 DataSession 对象。DBC 文件和每个线程中的文件一样,都在各自的 DataSession 中打开。每个 DataSession 都有一个已打开表的列表,以及别名和游标/工作区编号的唯一列表。
  • -
  • 现在,SqlExec() 返回的游标中的 “自增”(AutoIncrement)列的编号方法是从 -1 开始,每增加一行就减去 1。
  • -
    - -
  • FoxPro 方言所需的若干设置已添加到 Set Enum.
  • -
    - 宏编译器 - -
  • 到目前为止,宏编译器生成的运行时代码块都是接收对象数组并返回对象返回值。运行时中有一个类对此进行了封装,并负责参数的 usual->object 转换以及返回值的 object->usual 转换。当宏返回 NIL 值时就会出现问题,因为该值会被转换为 NULL_OBJECT。
    之所以使用 OBJECT API,是因为宏编译器需要在 Core 方言(RDD 系统)中使用,而该方言不支持 USUAL 类型。
    现在,我们在 XSharp.RT 程序集中添加了一个新的 IMacroCompilerUsual 接口,允许将字符串编译成支持 USUAL 参数和 USUAL 返回值的代码块。宏编译器现在同时支持该接口和 “旧 ”接口。因此,在编译宏时,您可能会看到(非常小的)性能改进。
  • -
  • 不支持在宏内调用 Altd() 和 _GetInst()。现已修复。
  • -
  • 当您在自己的代码中重载内置函数时,宏编译器会报错。现在,我们已在运行时中实施了默认的 MacroCompilerResolveAmbiguousMatch 委托,该委托会优先使用您代码中定义的函数,而不是我们代码中的函数。
  • -
  • 在选择方法或函数的两个重载时,宏编译器现在会选择带 USUAL 参数的方法,而不是不带 USUAL 参数的方法。
  • -
  • 修正了调用带有引用参数或 out 参数的函数/方法时出现的问题
  • -
  • 在宏编译器中添加了对 CURRENCY 和 BINARY 类型的支持。
  • -
    - RDD 系统 - -
  • 独占 DBF 访问现在以 “缓冲” 模式运行,速度应该会快很多
  • -
  • 在内部,RDD 现在与 Stream 对象一起工作,这样速度会更快一些。
  • -
  • 修正了更新索引中存在大量重复键值的键时出现的问题。
  • -
  • 删除了几个代码页中重复的 Foxpro “mahcine” collations,因为它们都是一样的。
  • -
  • 对于字段名大于 10 个字符的 VFP 兼容 DBF 文件,现在可以使用短字段名(10 个字符)或全字段名来检索值。
  • -
  • DBFVFP 驱动程序现在使用运行时内置的 DBC 支持来读取 DBF 文件的 “扩展” 属性。这些属性包括更长的字段名和标题等。当 DBFVFP 表被用作 DbDataSource 或 DbDataTable 的数据源,并且该数据源被分配给 Grid 时,Grid 中的列标题应显示来自 DBC 的标题。
  • -
  • 现在,与 VO 和 Vulcan 一样,带有空代码页字节的 DBF 文件将以 DOS - US 格式打开。
  • -
  • 当 DBFCDX/DBFVFP 区域是 SetRelation 中的子区域,而之前的父区域值导致结果集为 “空 ”时,GoTop()、GoBottom() 和其他操作会失败。
  • -
  • 我们在 RDD 程序集中添加了 ADS 管理 API 的结构和功能。
  • -
    - Visual Studio 集成 - -
  • 在 VS IDE 中创建新的 VO 兼容 UI 表单时,现在可以克隆现有表单。
  • -
  • 修正了 VO 兼容表单编辑器中自定义控件的一些问题。
  • -
  • 修正了 Windows 窗体编辑器中 DevExpress 控件代码分析和代码生成的几个问题
  • -
  • 带有 “flavored” 项目(如 MsTest 项目)的解决方案并非总能正确打开。可能会出现异常。
  • -
  • 我们在 workarea 类中添加了一个(internal)属性 FieldValues(),可以在调试器中查看当前记录的字段名及其值。要在调试器中查看当前工作区,必须添加观察表达式: XSharp.RuntimeState.DataSession.CurrentWorkarea
  • -
  • 已添加项目属性,用于设置新标志以抑制资源编译器出现 RC4005(重复定义)错误。
  • -
    - - Changes in 2.6.1.0 (Cahors) - 这是一个错误修复版本,修复了 2.6.0.0 中发现的一些问题 - 编译器 - -
  • 修正了通过引用将类型化变量传递给后期绑定代码和未类型化构造函数的问题
  • -
  • 修正了代码中包含逻辑的定义被转换为字节时的内部编译器错误
      BYTE(_CAST, LOGICDEFINE).
    当然,这种代码在任何时候都应该避免,但遗憾的是,即使是 VO SDK 也充斥着这样的代码。
    例如,上例应写成 IIF(LOGICDEFINE,1,0)。编译器会发现该定义是常量,并用 1 或 0 替换该代码。
  • -
  • 编译器无法将 $.50 识别为有效的货币字面量(因为缺少 0)。现在可以接受了。
  • -
    - 运行时 - -
  • 更新了运行时中处理后期绑定调用的代码,以改进对引用参数的处理
  • -
  • 修复了访问 OleAutoObject 类中 fInit、dwFuncs 和 dwVars 等属性时,后期绑定代码中的一个问题
  • -
  • 为 “Usual” 类型添加了操作符 TRUE 和操作符 FALSE
  • -
  • 使用 NULL_STRING 调用 Val() 可能会导致异常。该问题已得到修复。
  • -
  • DbDataTable() 和 DbDataSource() 返回的字符串属性现在可使用字符串类的 TrimEnd() 方法进行修剪。
  • -
  • 添加了 DbTableSave() 函数,用于将 DbDataTable 中的更改保存到当前工作区。
  • -
    - Visual Studio 集成 - -
  • 打开和升级 Scc 下的项目文件有时会导致问题。现已修复
  • -
  • 修正了 2.6.0.0 中引入的导致任务列表不再更新的问题。
  • -
  • 打开引用磁盘上不存在的 X# 项目的解决方案可能会导致异常。该问题已得到修复。
  • -
  • 打开不属于解决方案的 X# 项目文件也可能导致异常。这一问题已得到解决。我们假定该项目是解决方案文件的一部分,该文件与项目位于同一文件夹中,且名称相同(但扩展名不同)。
  • -
  • 项目系统不再为更新的项目制作备份文件。我们假定使用者都在自行备份或使用某种 SCC 系统。
  • -
  • 修正了导致 VS 任务列表无法用于 X# 项目的回归问题。
  • -
    - - Changes in 2.6.0.0 (Cahors) - 请注意,此版本中有一些破坏性更改。 - 因此,运行时组件的 Assembly 版本号已更改,您需要重新编译所有代码,并需要第三方组件的新版本! - 编译器 - -
  • 编译器忽略了 (USUAL) 大小写。现已修复。
  • -
  • 当编译器检测到 TRY ...ENDTRY(不含 CATCH 和 FINALLY)时,它会自动添加一个 CATCH 类,以静默方式捕获所有异常。以前就有这种情况,但现在出现这种情况时,我们会生成警告 XS9101 。
  • -
  • 在调用后期绑定的方法时,通过带 @ 符号的引用传递参数无法正常工作。这一问题已得到修复。
  • -
  • 编译器选项 vo15 和编译器选项 vo16 现在也可以用 #pragma 进行设置了。
  • -
  • 启用 /vo16(自动生成 Clipper 调用约定构造函数)后,编译器也会向标有 [COMImport] 属性的类添加构造函数。这一问题已得到修复。
  • -
  • 货币字面量 ($12.34) 未编译为货币类型,而是存储为 System.Double。这一问题已得到解决。
  • -
  • 修正了在版本号指定为 [assembly: AssemblyVersion (“1.0.*”)] 或 [assembly: AssemblyVersion (“1.0.0.*”)] 时自动生成版本号的问题。
    如果使用 /deterministic 编译器选项进行编译,则会出现错误信息 XS8357 。
  • -
  • 修正了向带有参数数组的构造函数传递单个 USUAL 参数时出现的问题。
  • -
  • 修正了在类树中调用重载方法时出现的一个问题,在类树的某一层中,参数为一种类型,而在另一层中,方法名称相同,但参数为另一种类型,并且存在从一种类型到另一种类型的隐式类型转换(如 Date 和 Datetime 之间,或 String 和 Symbol 之间)。现在,编译器首先会查看是否存在类型完全相同的重载,如果没有,则会查找参数可以通过隐式转换传递的重载。
  • -
  • 现在可以使用 __CastClass()伪函数将一个常量装箱一个对象,或将一个常量从一个对象中拆箱。
    __CastClass(USUAL,<objectValue>) 拆箱对象内部的 USUAL
    __CastClass(OBJECT, <usualValue>) 将装箱 usual 到一个对象
  • -
  • <usualValue> IS SomeType VAR <newVariableOfTypeSomeType> 子句在将 Usual 装箱为 Object 并将其分配给新变量之前,而不是从 usual 中提取对象。这个问题已经修复。
  • -
  • 当赋值操作符为单个等号字符时,后期绑定赋值(如 obj.&prop = “Jack”)会失败。这一问题已得到修复。
  • -
  • 当 SomeArea 未打开时,SomeArea->(SomeExpression()) 等别名表达式会在错误的源代码行上返回错误。该问题已得到修复。
  • -
  • 我们添加了对二进制类型和二进制字面量的支持。请参阅文档中有关 binaries 和 binary 字面量 的主题。
  • -
  • 像下面的表达式
    LOCAL dwDim := 512 IS DWORD
    被解析为
    LOCAL dwDim := (512 IS DWORD) AS USUAL
    因此,dwDim 包含一个具有逻辑值的 USUAL。
    该问题已得到修复,现在这段代码会出现 DWORD 变量不能用 IS 关键字声明的错误。
    GLOBAL 变量和 Class 变量也会出现这种情况。
  • -
  • 我们添加了一个 MatchLike 预处理器标记,以匹配包含通配符的表达式,例如 UDC 中的表达式
    SAVE ALL LIKE a*,*name TO SomeFileName.
    用于 MatchLike 的标记是 <%name%>
  • -
  • 在 TRY ... CATCH 语句中添加了对模式匹配(WHEN 子句)的支持,例如下面的示例。WHEN 关键字是位置性的,因此也可用作变量名,如示例中的变量名。
  • -
    - FUNCTION Test AS VOID
      local when := 42 as long
      TRY
         THROW Exception{"FooBar"}
      CATCH e as Exception WHEN e:Message == "Foo"
         ? "Foo", when, e:Message
      CATCH e as Exception WHEN e:Message == "Bar"
         ? "Bar", when, e:Message
      CATCH WHEN when == 42
         ? "No Foo and No Bar", when
         
      END TRY                
      RETURN
    - -
  • 已添加对 SWITCH 语句的模式匹配和筛选器的支持。我们既支持 “标识符 AS 类型 ”子句,也支持 “WHEN 表达式 ”过滤子句,如下例所示
  • -
    -   VAR foo := 42
      VAR iValues := <LONG>{1,2,3,4,5}
      FOREACH VAR i IN iValues
         SWITCH i
         CASE 1                        // 这种模式现在被称为 "恒定模式"
            ? "One"
         CASE 2 WHEN foo == 42         // 恒定模式过滤器
            ? "Two and Foo == 42"
         CASE 2
            ? "Two"
         CASE 3
            ? "Three"
         CASE 4
            ? "Four"
         OTHERWISE
            ? "Other", i
         END SWITCH
    -   VAR oValues := <OBJECT>{1,2.1,"abc", "def", TRUE, FALSE, 1.1m}
      FOREACH VAR o in oValues
         SWITCH o
         CASE i AS LONG         // 模式匹配
            ? "Long", i
         CASE r8 AS REAL8   // 模式匹配
            ? "Real8", r8
         CASE s AS STRING  WHEN s == "abc" // 带有过滤器的模式匹配
            ? "String abc", s
         CASE s AS STRING     // 模式匹配
            ? "String other", s
         CASE l AS LOGIC   WHEN l == TRUE   // 带有过滤器的模式匹配
            ? "Logic", l
         OTHERWISE
            ? o:GetType():FullName, o
         END SWITCH
      NEXT
    - -
  • 请注意,这些模式和过滤器的性能与普通的 IF 语句或 DO CASE 语句无异。
    所不同的是,编译器会检查 CASE 表达式是否重复,这样就不容易出错。
  • -
  • 我们增加了对 IN 参数修饰符的支持。它声明了一个 REF READONLY 参数。在向方法或函数传递大型结构时,可以考虑使用该参数。编译器不会传递整个结构,而只会传递结构的地址,即 4 字节或 8 字节,具体取决于运行的是 32 位还是 64 位。
    我们计划在 X# 运行时将其用于接受 USUAL 参数的函数,这将为您带来微小的性能优势(在 32 位模式下,Usual 变量为 16 字节,在 64 位模式下运行时为 20 字节)。
  • -
    - 运行时 - -
  • 延迟绑定代码中的错误信息并不总是显示导致异常的错误。我们现在检索 “最内部 ”异常,因此信息会显示抛出的第一个异常。
  • -
  • 我们添加了 Set.Safety 和 Set.Compatible 的运行时状态设置,以及 SetCompatible 和 SetSafety 函数。
  • -
    - -
  • 用于为各种 Db..()函数保存和恢复工作区的 UDC 不正确,导致在函数调用后选择了错误的区域。这一问题已得到修复。
  • -
    - -
  • 添加了 VFP MkDir() 函数。
  • -
  • 修正了当一个类型的子类只实现了 Getter 或 Setter 而父类同时实现了两者时,在后期绑定的 IVarGet() / IVarPut() 中出现的问题。
  • -
    - -
  • 我们添加了 IDynamicProperties 接口,并在 XPP DataObject、VFP Empty 和 VO OleAutoObject 类中添加了该接口的实现。该接口用于优化对这些类中属性的后期绑定访问。
  • -
  • OleAutoObject.NoMethod 中的异常没有 “原样 ”转发,而是作为参数异常转发。
  • -
    - -
  • 为了与 FoxPro 兼容,Select() 函数现在在 FoxPro 方言中的行为有所不同(当传递的别名不存在时不会出现异常)
  • -
  • 当从一个异常创建一个 Error 对象时,最内层的异常将被用于获取错误信息。
  • -
  • Default() 函数的大小写已更改。
  • -
  • 我们新增了 XSharp.__Binary 类型。更多信息,请参见上面的编译器主题。
  • -
  • 我们在 dbcmd.xh 中添加了 CLOSE ALL UDC,作为 CLOSE DATABASES 的同义词。
  • -
    - RDD 系统 - -
  • 当字段名大于 10 个字符时,修正了 ADSADT 驱动程序的 Advantage RDD 中的一个问题。
  • -
  • 在 Advantage RDD 中,作为关系中子表的表的 EOF、BOF 和 FOUND 标志设置不当。这一问题已得到修复。
  • -
  • 在 FoxPro 方言中,“自动排序” 行为发生了变化。在该方言中,不再选择第一个索引中的第一个顺序。索引文件已打开,但文件保持自然顺序,打开文件时光标定位在记录编号 1 上。
  • -
  • 导出 CSV 和 SDF 时,空日期会出现异常。现已修复。
  • -
  • 当打开一个 CDX 时,如果其中一个顺序表达式无法编译(因为缺少一个函数),那么以前会忽略整个 CDX。而现在,其他标签会被成功打开。RuntimeState.LastRddError 属性将包含一个 Exception 对象,其中包含打开失败的标记的错误信息。
  • -
  • 在 DBFVFP 驱动程序中,“I ”类型字段的索引键计算不正确。现已修复。
  • -
  • 修正了 OrdDescend() 函数的一个问题
  • -
    - Visual Studio 集成 - -
  • 修正了参数列表中默认表达式的 VS 解析器问题
  • -
  • 外部方法/函数的参数并不总是显示正确的 “As”/“Is ”修饰符
  • -
  • 现在,QuickInfo 工具提示上的位置显示在工具提示内的独立一行上。
  • -
  • 修正了一个问题,即 XML 文件中第一个成员的 XML 工具提示或参数提示未显示。
  • -
  • 我们对项目文件格式进行了更改(见下文注释)。使用此 X# 版本打开时,所有项目文件都将更新。
  • -
  • 提高了在 Visual Studio 内关闭解决方案的速度。
  • -
  • 项目系统将不再尝试更新 SDK 样式的项目文件。
  • -
  • 在查找 Foo.SomeMethod() 等方法时,代码模型有时会返回 Bar.SomeMethod() 方法。
    这导致在 Windows 窗体编辑器中打开窗体时出现问题。这一问题已得到修复。
  • -
    - VO 兼容的编辑器 - -
  • 现在,从 VO 兼容编辑器生成的代码保留了类的 INTERNAL 或其他修饰符以及 IMPLEMENTS 子句。
  • -
  • 我们更正了按钮控件中 “LoadResString ”标题的显示方式
  • -
    - Foxpro 命令 - -
  • 我们增加了对几个新的 Foxpro 兼容命令的支持:
  • -
  • CLOSE ALL
  • -
  • SCATTER
  • -
  • GATHER
  • -
  • COPY TO ARRAY
  • -
  • APPEND FROM ARRAY
  • -
  • COPY TO  SDF|CSV|DELIMITED|FOXPLUS|FOX2X
  • -
  • APPEND FROM SDF|CSV|DELIMITED|FOXPLUS|FOX2X
  • -
  • 所有变体都支持 fields list、FIELDS LIKE 或 FIELDS EXCEPT 子句,相关命令还支持 MEMO 和 BLANK 子句.
  • -
    - -
  • 并不支持 COPY TO 和 APPEND FROM 的所有变化,例如复制到 excel 和 sylk。
  • -
  • COPY TO 命令中的 Database 和 name 子句以及 CodePage 子句暂时被忽略
  • -
    - 生成系统 - -
  • 我们已准备好 X# 生成系统,以便与 .Net 5 和 .Net Core 使用的 SDK 类型项目配合使用。请参阅下面的主题,了解这对项目文件意味着什么。
  • -
  • 请注意,由于在 Visual Studio 之外运行的自动生成也需要生成系统,因此生成系统的源代码已移至 GitHub 上的编译器资源库。
  • -
    - 项目文件的更改 - -
  • 现在,我们不再将 MSBuild 支持分别部署到每个 VS 版本内的文件夹中,而是将其一次性部署到 XSharp 安装文件夹内的文件夹中。
    安装程序会设置一个指向该文件夹的环境变量XSharpMsBuildDir。因此,当使用该版本的 X# 打开时,所有项目文件都将得到更新。
  • -
    - -
  • 我们所做的更改是将宏“$(MSBuildExtensionsPath)\XSharp ”替换为“$(XSharpMsBuildDir)”,后者是一个环境变量,指向机器上 X# MsBuild 支持文件的位置。如果在生成服务器上运行 X#,则可以在需要时在生成脚本中设置该环境变量。
  • -
  • 安装程序会自动添加该环境变量,并将其指向 <XSharpDir>\MsBuild 文件夹。
  • -
    - - Changes in 2.5.2.0 (Cahors) - 编译器 - -
  • 如果定义中的表达式包含值大于 127 的 _Chr()函数,则会生成警告,提示开发机器和最终用户机器之间可能存在代码页差异。
  • -
  • 修复了一个问题,其中一个宏定义被定义为 PTR(_CAST,0),并且这个宏定义也被用作函数/方法的默认值。
  • -
    - 运行时 - -
  • 在 NULL_OBJECT 上调用 IsAccess、IsAssign 和类似方法会导致异常。这一问题已得到修复。
  • -
  • EmptyUsual 现在也适用于 OBJECT 类型
  • -
  • 当浮点数除法返回无限值时,不会产生除以零的异常。这一问题已得到修复。
  • -
  • 当在后期绑定调用中跳过一个参数,且该参数有一个默认值时,我们将使用默认值,而不是 NIL
  • -
  • StrTran() 第 5 个参数(uCount)的默认值 “仅” 替换 65000 次。现在,默认值将负责替换所有出现的次数。
  • -
  • 传递给 NoIVarGet() 和 NoVarPut() 的变量名现在转换为大写字母。
  • -
    - RDD 系统 - -
  • 修正了当作用域降序 Cdx 位于 Eof() 时向前跳转的问题
  • -
    - VOSDK - -
  • 有几个 DbServer 方法在选择正确的工作区之前调用一个方法来写入更改。这是一个源于 VO 的老漏洞,现已得到修复。
  • -
    - Visual Studio 集成 - -
  • 在 VS 2019 中查找 XML 文档有时不起作用。这一问题已得到修复。
  • -
  • 现在,ClassView 和 Objectview 可以 “在一定程度上 ”工作。这一点需要改进。
  • -
  • 改进了所谓 “主要互操作程序集 ”的加载
  • -
  • 修复了编辑器窗口中 “类型 ”和 “成员 ”下拉栏中的一个问题
  • -
  • 改进了在 VO 兼容窗口编辑器中应用复制/粘贴时控件重命名的功能。
  • -
  • 打开 VO 窗口编辑器时,VO 窗口编辑器的 X# 工具栏现在会自动显示
  • -
  • VO 窗口编辑器(以及其他 VO 编辑器)的属性窗口和工具箱的位置和大小现在可以在 Visual Studio 会话之间保存。
  • -
    - 生成系统 - -
  • 生成的 XML 文件是在项目文件夹中而不是在中间文件夹中生成的。这一问题已得到修复。
  • -
    - 文档 - -
  • 大多数主题的 [Source] 链接丢失。现已修复。
  • -
  • 更正了一些文档
  • -
    - - Changes in 2.5.1.0 (Cahors) - 编译器 - -
  • 此版本中的编译器没有变化(仍称为 2.5.0.0)
  • -
    - 运行时 - -
  • (VO 兼容性)修正了数组的 VO 兼容性问题。现在,使用 2 维索引访问单维数组将返回 NIL,且不会产生异常。这是一个愚蠢但兼容的问题。
  • -
  • (VO 兼容性)用符号比较一个带数值的常量不再产生异常。数值现在被转换为符号,并使用该符号进行比较。
  • -
  • (XPP 兼容)不允许使用索引操作符(u[1])访问包含 LONG 的 USUAL 变量。这将返回 TRUE 或 FALSE,是检查位是否被设置的一种简单方法。
  • -
  • "DB" 和 ”CR" 的字面现在存储在资源中,可根据其他语言进行更改。
  • -
  • 为支持延迟绑定添加了一些优化代码
  • -
    - Visual Studio 集成 - -
  • 如果外部程序集包含两种类型,而这两种类型的名称只是大小写不同,则读取外部程序集的类型信息将失败。
  • -
  • 实体解析器无法识别前缀为可见性修饰符(PROTECTED SET)的 GET 和 SET 访问器
  • -
  • 实体解析器无法识别不以 MEMBER 关键字开头的 ENUM 成员
  • -
  • 已添加对 Visual Studio 任务窗口的支持。包含 TODO 或 HACK(可在工具/选项窗口中配置)字样的源代码注释现在会添加到任务列表中。这些任务会保存在 intellisense 数据库中,因此在打开解决方案后,所有任务都会立即显示,而无需(重新)扫描源文件。
  • -
  • 修正了 WIndows 窗体编辑器的类型和成员查找中的一个问题
  • -
  • 修正了 VS 调试器中的一个问题,即在数组和集合的索引操作符中减去 1。这显然是不正确的。
  • -
    - 生成系统 - -
  • 生成的 XML 文件的文件名来自项目文件名而非输出程序集名。这一问题已得到修复。
  • -
    - - - Changes in 2.5.0.0 (Cahors) - 编译器 - -
  • 如果 #pragma 行后面跟着不正确的语法,就会 “吃掉 ”不正确的语法,导致整个方法被排除在编译之外。这一问题已得到修复。
  • -
  • 带有 VOID 返回类型的方法/函数中的多行编译时代码块未被正确编译。这一问题已得到修复。
  • -
  • 编译器现在允许在代码块中为参数指定类型。由于代码块定义需要类型为 USUAL 的参数,这将被编译器转换。参数仍将是类型为 USUAL,但在代码块内部将分配适当类型的本地变量。因此,现在可以编译这段代码。
  • -
    -   { | s as string, i as int| s:SubString(i,1) } - -
  • 代码填充缺失参数时,在传递参数给 COM 调用(Peter Monadjemi 的 Word 示例)时出现问题。
  • -
  • 修正了向接受对象的函数传递 IntPtr、VOSTRUCT 地址的类型指针的问题。
  • -
  • 我们添加了向 PSZ 添加一个整数值的代码,这样就产生了一个新的 PSZ,它从原始 PSZ 中的一个相对位置开始。不会分配新的缓冲区。
  • -
  • 我们更正了复杂集合初始化程序的一个问题。
  • -
  • 以 DEFINE 作为参数的 Chr() 和 _Chr()(如 _Chr(ASC_TAB))未被编译器正确解析。
  • -
  • 编译器没有正确解析 PUBLIC MyVar[123] 的语法。现已修复。
  • -
  • 一些特殊字符(如Micro Character, U+00B5)不被编译器识别为有效的标识符。现在,我们采用了与 C# 相同的标识符规则。
  • -
  • 在 OBJECT 类型的值中传递指针或 PSZ 时,现在是通过 “装箱” 变量来处理的。因此,NULL_PTR 不再作为 NULL_OBJECT 传递,而是作为包含 IntPtr.Zero 值的对象传递。
  • -
  • 编译器现在允许将 IntPtr.Zero 存储到一个常量变量中
  • -
  • 现在,编译器允许通过编写双引号在字符串中嵌入引号。这样就可以了:
  • -
    - ? "Some String that has an embedded "" character" - -
  • 当您声明一个与函数同名的 MEMVAR 时,编译器将不再有任何问题来解析函数调用。请注意,您必须声明 memvar 才能使该解析生效。
    例如:
  • -
    -
    FUNCTION Start() AS VOID
    MEMVAR Test
    Test := 123      // 赋值给内存变量
    Test(Test)      // 用 “Test ”的值调用 “Test ”函数
    RETURN
    FUNCTION Test(a)
    ? a
    RETURN a
    - - - 公共运行时 - -
  • Workareas 类不再使用包含 4096 个元素的数组,而是使用字典来保存打开的 RDD。这减少了运行时状态所使用的内存。
  • -
  • 修复了 WrapperRDD 类中的一个问题
  • -
  • OrdSetFocus() 现在以 STRING 返回上一个活动标记
  • -
  • 修正了 FRead() 中的一个问题,它没有按规定忽略 SetAnsi() 设置
  • -
  • 为 PSZ + LONG 和 PSZ + DWORD 的 PSZ 类型添加了操作符。
  • -
  • Usual 类现在实现了 IDisposable() 接口。当它包含一个实现 IDisposable 的对象时,它将调用该对象的 Dispose 方法。
  • -
  • 我们添加了具有一个和两个数字索引的数组索引属性,使访问数组元素的代码更快一些
  • -
  • 代码 SELECT 10 无法正常工作。现已修复。感谢卡尔-海因茨。
  • -
  • 即使尝试将 order 设置为不存在的索引,VoDbOrdSetFocus() 的返回值仍为 TRUE。该问题已得到修复。
  • -
  • 我们修正了 Set(_SET_CENTURY) 在传递的参数是 “ON ”或 “OFF ”格式的字符串时出现的问题
  • -
  • 即使无法选择所选 order,VODbOrdSetFocus() 仍然返回 TRUE。
  • -
  • ArrayCreate<T> 未填充数组。该问题已得到修复。
  • -
  • 现在,CToD() 函数将忽略尾部空格或前导空格。
  • -
  • 使用 2 个参数调用 VoDbSeek() 现在不会将 lLast 设置为 FALSE,而是设置为当前范围的最后值。
  • -
  • 在之前的版本中,错误堆栈跟踪的格式发生了变化(名称全部大写,与 VO 中的一样)。现在您可以选择启用或禁用。我们添加了一个函数 SetErrorStackVOFormat(),它接收并返回一个逻辑值。对于 VO 和 Vulcan 方言,错误堆栈的默认格式是 VO 格式,而对于其他方言,默认格式是正常的 .Net 格式。
  • -
  • 我们已经实现了 StrEvaluate() 函数。
  • -
  • 我们实现了 PtrLen() 和 PtrLenWrite() 函数。这些函数仅适用于以 x86 模式运行的 Windows 操作系统。
    对于其他操作系统或运行于 64 位的应用程序,这些函数返回与 MemLen() 相同的值。
  • -
  • 当 2 个浮点数相除,因除数为零而产生 NaN(非数值)值时,现在会产生一个 DivideByZero 异常。
  • -
  • 当除数为零时,2 个常用数相除的结果是一个 NaN(非数字)值,此时将产生一个 DivideByZero 异常。
  • -
  • 请注意,对 2 个 REAL8(System.Double)值进行除法运算仍然会出现 NaN,因为我们没有 “介入 ”除法运算。
  • -
  • 现在,当在 Windows 上运行时,OS() 函数会返回更合适的版本描述。它从注册表中读取版本名称,并在版本中包含 x86 和 x64 标志。
  • -
    - RDD 系统 - -
  • 在共享模式下写入记录时,DBF RDD Now 会强制刷新磁盘。
  • -
  • 修复了 DBFCDX rdd 中一个可能损坏索引的问题。
  • -
  • 我们在 DBFCDX RDD 中内置了一个验证例程,用于验证当前标志的完整性。要调用该例程,请使用 DBOI_VALIDATE 常量调用 DbOrderInfo。
    这样就可以验证:
  • - -
  • 如果所有记录在索引中都恰好包含一次
  • -
  • 如果索引中每条记录的值都是正确的
  • -
  • 如果页面中索引键的 order 正确
  • -
  • 如果索引中的索引页列表是正确的
  • -
    -
    - 如果发现问题,该调用将返回 FALSE,并写入一个文件,文件名为 <BagName>_<TagName>.ERR,其中包含所发现错误的描述。 - -
  • Workarea 类(XSharp.Core 内)和其他 RDD 类中的大部分导出变量已更改为 PROTECTED。
    我们还为需要从 RDD 外部访问的变量添加了一些属性
  • -
  • 修正了从范围 CDX 索引中的 BOF 位置反复跳回时出现的问题。
  • -
  • DBFCDX 的 Zap() 操作没有清除一个内部缓存。这一问题已得到修复。
  • -
  • DBFCDX 驱动程序现在可以在 CDX 文件中的最后一个标记被删除后关闭并删除该文件。
  • -
    - 宏编译器 - -
  • 宏编译器无法将 0000.00.00 识别为空日期。现已修复。
  • -
  • 现在,宏编译器也能像普通编译器一样在标识符中使用异国字符。我们添加了与 C# 编译器相同的标识符名称规则。
  • -
    - - XBase++ 函数 - -
  • 修正了 XPP 函数 SetCollationTable() 中的一个问题
  • -
  • DbCargo() 现在还可以将工作区 cargo 值设置为 NULL 或 NIL
  • -
  • 我们添加了几个函数,如 PosUpper()、PosLower()、PosIns() 和 PosDel()。
  • -
    - - VFP 函数 - -
  • 为 FoxPro 添加了 AllTrim()、RTrim()、LTrim() 和 Trim() 变体(感谢 Antonio)
  • -
  • 已添加 StrToFile() 和 FileToStr() (感谢 Antonio 和 Karl Heinz)
  • -
    - - VOSDK - -
  • 我们在 CSession 和 CSocket 类上创建了一个 Destroy() 方法,这样就可以 “清理 ”对象(在 VO 中可以调用 Axit(),但现在已经不允许了)。这些类的反构造函数也将调用 Destroy()。
  • -
  • 修正了 TreeView:GetItemAttributes 中的一个问题。现在也可以使用 hItem 调用该属性(这在 TreeViewSelectionEvent:NewTreeViewItem 中发生)。
  • -
  • OpenDialog 类现在可以调整大小。
  • -
  • 修正了 FormattedString:MatchesTemplChar() 中的一个问题,该问题会导致带有图片的编辑控件出现问题
  • -
  • 调用 DataWindow:__DoValidate() 后期绑定不起作用,因为有两个重载。这一问题已得到修复。请注意,在 VO SDK 中,DataWindow:__DoValidate() 希望使用 Control 类型的参数,但在 DataBrowser 代码中,调用时使用的是 DataColumn 类型的参数。VO 没有抱怨,但在 .Net 中却行不通!
  • -
  • 修正了 Internet 类中 GetMailTimeStamp() 的一个问题。
  • -
  • 我们包含了 Consoleclasses、SystemClasses 和 RDD 类的 “类型化 ”版本。这些类大多是强类型的,可以在 AnyCPU 模式下运行。
    SQL 类和 GUI 类将随后推出。
  • -
    - Visual Studio 集成 - 代码模式 - -
  • 我们完全重写了后台解析器和代码模型,它用于解析 VS 编辑器中的 “实体”,并用于生成 VS 解决方案中类型、方法、函数等的内存模型。该解析器现在使用与编译器相同的词法,但实体是用手写解析器收集的(因为编辑器缓冲区中的代码可能包含不完整的代码,我们无法可靠地使用普通解析器)。
  • -
  • 我们现在使用 SQLite 数据库在会话之间持久保存代码模型。这减少了 X# 项目系统所需的内存。我们不再将整个代码模型保存在内存中。
  • -
  • 这也意味着,当您重新打开现有解决方案时,我们只需解析自上次处理以来已更改的文件。这将加快大型 VS 解决方案的加载速度。
  • -
  • 现在,我们还使用 Mono.Cecil 库,而不是 System.Reflection 命名空间中的类,从外部代码(程序集引用和非 X# 项目的项目引用)中读取类型信息。这样做速度更快,占用内存更少,最重要的是,当程序集发生变化时,我们可以轻松卸载和重新加载程序集。
  • -
  • 综上所述,打开 VS 解决方案的速度应该会更快,“锁定 ”VS 的情况也会减少(希望完全不会)。此外,代码自动补全和其他 intellisense 功能也会得到改进。
  • -
    - - 源代码编辑器 - -
  • 修正了当光标位于第一个实体之前的一行代码中时,编辑器上方下拉组合框的一个问题。
  • -
  • 修正了一个问题,即在类声明之后,编辑器中的函数没有可折叠区域
  • -
  • 现在,编辑器内的代码自动补全功能不仅能获取类型本身的扩展方法,还能获取由这些类型实现的接口的扩展方法。
  • -
  • 编辑器代码现在可以正确识别使用 VAR 关键字声明的变量(如果这些变量后面有构造函数调用)。
  • -
  • 如果在源代码中为解决方案中的实体添加了 XML 注释,Visual Studio 中的工具提示和参数补全就会显示这些注释。
  • -
  • 修正了 “重新格式化 ”代码中的几个问题
  • -
    - Windows 窗体编辑器 - -
  • Windows 窗体使用的类内对字段的某些内联赋值可能导致窗体编辑器无法使用窗体。这一问题已得到修复。
  • -
  • Windows 窗体编辑器有时会删除实体之间的空行。这一问题已得到修复。
  • -
  • Windows 窗体编辑器解析的代码中的用户自定义命令在窗体更改和保存时无法识别并消失。这一问题已得到修复。
  • -
  • 修正了使用项目资源文件中存储的资源(在源代码中以 “global:: ”为前缀)设置图像和类似属性的问题
  • -
    - VOXporter - -
  • 我们添加了将 AEF 中的 VO 表格导出为 XML 格式的支持
  • -
  • 我们添加了将 AEF 中的 VO 菜单导出为 XML 格式的支持
  • -
    - - Changes in 2.4.1.0 (Bandol GA 2.4a) - 编译器 - -
  • Core 方言现在不再支持括号字符串,以避免在 GET 和 SET 关键字之间包含属性的单行外部特性(attributes)声明出现问题
  • -
  • 在 EXTERN 修饰符之后,PROPERTY 关键字不能被正确识别。
  • -
  • 修正了包含 2 个数字常量的 IIF 表达式的 XS9021 警告
  • -
  • 在 FoxPro 方言中,现在总是允许对某些类型(即使未启用 /lb 编译器选项)进行后期绑定调用,例如 USUAL 和 Empty 类。 这些类型在运行时都标有 AllowLateBound 属性。
    它们会生成新的编译器警告 (XS9098).
  • -
  • 我们添加了一个新的编译器选项 -fox2 。该选项可使宏编译器看到局部变量,在使用内嵌参数的 SQL 语句时也应使用该选项。该编译器选项必须与 -memvar 和 FoxPro 方言结合使用。
  • -
    - 运行时 - -
  • 修正了在使用 DbServer:AppendDelimited() 和 DbServer:CopyDelimited() 时 DELIM Rdd 中出现的问题。
  • -
  • 修正了 DbSetOrder() 在未找到 order 时仍返回 TRUE 的问题。
  • -
  • 修正了 File() 函数在使用通配符时返回 FALSE 的问题
  • -
  • SqlExec() 现在可为具有单独 Date 类型的 SQL providers 返回 Date 类型的列
  • -
  • 使用 SqlExec() 创建的工作区/游标现在可以根据从后台读取的设置正确设置 NULL 标志、二进制标志等。
  • -
  • 修正并添加了 VFP 函数(Gomonth、Quarter、ChrTran、各种变化中的 At、各种变化中的 RAt、DMY、MDY)的实现。感谢卡尔-海因茨。
  • -
  • 参数化 SQL 函数的第一项工作。尚未完成。
  • -
  • 运行时中的某些类型现在标有特殊的 “AllowLateBound ”属性。即使未启用 /lb 编译器选项,FoxPro 方言也将接受这些类型作为后期编译的候选类型。
  • -
  • 我们为宏编译器添加了通过名称访问局部变量的支持。这已内置于 VarGet() 和 VarPut() 函数以及 MemVarGet() 和 MemVarPut() 函数中。与同名的 private 变量或 public 变量相比,局部变量具有优先权。为此,您必须启用 -fox2 编译器选项。
  • -
  • ValType() 现在对 currency 值返回 “Y”,对日期时间值返回 "T"
  • -
  • 在垃圾回收器线程中访问运行时状态时,不会创建该状态的副本。
  • -
  • 现在,当执行无效 SQL 语句时,SQLExecute() 返回-1。
  • -
  • 已添加 VarType() 函数
  • -
  • 当方法返回 NULL_STRING 且返回类型为 STRING 时,IVarGet() 和 Send() 现在会返回空字符串
  • -
    - RDD - -
  • 获取范围索引的 OrdKeyNo 会将索引位置重置为索引顶部。这会影响浏览器中作用域索引的滚动条
  • -
    - VOSDK - -
  • 控制台类程序集现已标记为 AnyCpu。
  • -
  • 修正了上一个版本中引入的一个问题,即从 Shell32.DLL 导入的某些函数(如拖放支持)的调用约定。
  • -
  • 修复了在远程桌面上运行时,PrintingDevice 构造函数中读取打印机的问题
  • -
  • 我们使用 <var> IS <Type> 结构对 IsInstanceOf 的几次调用进行了修改
  • -
  • 修正了多个 IsInstanceOf() 调用中的拼写错误
  • -
  • 改进 DataBrowser 类的 “column scatter” 代码
  • -
    - Visual Studio 集成 - -
  • 如果您从 XSharp 编辑器选项中的 “提交完成列表 ”控件中删除了所有字符,那么重启 VS 后,所有默认字符都会出现。现在我们会记住你已经清除了列表,并且不会再重新填充列表。
  • -
  • 修正了一个问题,该问题导致编辑器无法重新扫描当前缓冲区中已更改的实体
  • -
  • 为新的 -fox2 编译器选项添加了项目属性
  • -
  • VO MDI 模板现在已启用拖放功能
  • -
  • 修复了调试器中某些运行时类型(如 DATE)的一个问题,该问题可能会在 VS 2019 调试时导致异常。
  • -
  • 修复了编辑器代码中负责显示可折叠区域以及用类型名称和成员名称更新组合框的部分的问题。
  • -
  • 修复了 VO 兼容表单编辑器中选项卡页面的代码生成问题
  • -
    - - Changes in 2.4.0.0 (Bandol GA 2.4) - 编译器 - -
  • 修正了某些整数运算仍会返回错误变量类型的问题
  • -
  • 无符号整数类型(BYTE、WORD、DWORD、UINT64)的一元减运算符返回的类型与原始类型相同,因此不会返回负值。这种情况已得到改变。现在,该运算符的返回值是下一个较大的有符号整数类型。
  • -
  • 在插值字符串中使用编译器宏(如 __VERSION__ )会导致编译器出现内部错误。这一问题已得到修复。
  • -
  • vo11 编译器选项现在只适用于整数和非整数类型之间的操作。由于混合整数类型的 VO 行为令人困惑,而且无法模拟,因此删除。
  • -
  • 现在还能识别 RETURN 和 GET 关键字后的括号字符串。
  • -
    - 运行时 - -
  • 修正了从日期减去 dword 时出现的问题(与编译器中的有符号/无符号问题有关)
  • -
  • LUpdate() 现在会在工作区没有打开表时返回 NULL_DATE。
  • -
  • 已添加缺失的 ErrorStack() 函数(感谢 Leonid)
  • -
  • 为 Error 类添加了 Stack 属性
  • -
  • 添加了 Visual FoxPro 的 SQL..() 函数。请注意,目前还不支持在 SQL 语句中嵌入参数的 SQLExec() 和 SQLPrepare()。这需要对编译器进行修改,计划在下一个版本中进行。
  • -
  • 已添加 DbDataTable() 函数,该函数可返回一个(分离的)数据表,其中包含当前工作区的数据
  • -
  • 已添加 DbDataSource() 函数,该函数可返回附加到当前工作区的绑定列表。绑定列表中属性的更新将直接写入所附工作区。
  • -
  • 已添加 2 个类 DbDataTable 和 DbDataSource,它们由同名函数返回。
  • -
  • 修正了带数值的 USUALs 格式不正确的问题
  • -
  • 我们已将 FoxPro.h 中的定义添加到 VFP 程序集中
  • -
  • 我们添加了 VFP MessageBox 功能,包括超时后自动关闭的消息框。
  • -
  • 修正了 AsHexString() 以显示存储在 USUALs 中的大 DWORD 值
  • -
  • 修正了 FLOAT->STRING 转换时与 VO 的若干不兼容问题
  • -
    - RDD 系统 - -
  • 修复了在 DBFCDX 表中向后跳过作用域的问题
  • -
  • 修复了使用 DBFCDX 和 DBFNTX 驱动程序创建唯一索引的问题
  • -
  • 现在始终支持向 DBF 列写入 NULL 值。如果列是 DBFVFP 表中的可为 NULL 值的列,则会设置 null 标志。对于其他 RDD,NULL 值将被写为空值。
  • -
  • 修正了对所有基于 DBF 的 RDD 进行 Append 操作时的性能问题
  • -
  • 修复了 DBFCDX 驱动程序的一个问题,该问题可能会在索引页面几乎满载全部为空的键值对时发生
  • -
  • 修正了 WrapperRDD:Open() 中的一个问题
  • -
  • 添加了 SDF RDD
  • -
  • 添加了一个特殊的 DbfVFPSQL RDD,VFP 支持中的 SQL..() 函数使用该 RDD 来存储 SQL 查询的结果。可以使用 DbFieldInfo() 和 DBS_COLUMINFO 定义从 Sql Resultset 中检索描述原始列的列信息。该调用的返回值是一个 XSharp.RDD.DbColumnInfo 类型的对象。
  • -
  • 已添加 DELIM RDD 和 2 个子类(CSV 和 TSV)。这些 RDD 均返回分隔值。DELIM RDD 的默认格式是使用逗号作为分隔符。CSV 使用分号,TSV 使用 Tab 来分隔字段。此外,CSV 和 TSV 还会写入包含字段名称的标题行。
    "普通" 分隔操作仍使用 DELIM。如果要使用 CSV 或 TSV RDD,则需要设置全局设置:
  • -
    - RddSetDefault("DBFNTX")
    DbUseArea(TRUE,"DBFNTX", "c:\Test\TEST.DBF")
    DbCopyDelim("C:\test\test.txt")             // 这使用了 DELIM RDD

    RuntimeState.DelimRDD := "CSV"              // 告诉运行时使用 CSV RDD 进行分隔写入
    DbCopyDelim("C:\test\test.csv")             // 这将使用 CSV RDD

    RuntimeState.DelimRDD := "TSV"              // 告诉运行时使用 TSV RDD 进行分隔写入
    DbCopyDelim("C:\test\test.tsv")             // 使用 TSV RDD
    DbZap()

    RuntimeState.DelimRDD := "CSV"              // 告诉运行时使用 CSV RDD 进行分隔读取
    DbAppDelim("C:\test\test.csv")              // 这将使用 CSV RDD
    - VO SDK - -
  • PrintingDevice:Init() 不再尝试从 win.ini 中读取默认打印机,而是从注册表中读取默认打印机。
  • -
  • 更新了代码仍在访问 win.ini(使用 GetProfile..() 函数)的其他几个位置。
  • -
  • GUI 类延迟加载对普通对话框 DLL 和 winspool.drv 的多次调用。现在情况有所改变,因为在 .Net 中不再需要这些调用。
  • -
  • 清理了 GUI 类中的所有 PSZ(_CAST 操作。
  • -
    - Visual Studio 集成 - -
  • OUT 变量的参数提示显示为 REF
  • -
  • 未找到带有 REF 或 OUT 参数的成员的 XML 说明
  • -
  • 修复了 VS 编辑器中的一个异常
  • -
    - VOXporter - -
  • 此版本无任何更改
  • -
    - - Changes in 2.3.2 (Bandol GA 2.3b) - 编译器 - -
  • 已添加对括号字符串的支持([包含引号的字符串:''和' ] )
  • -
  • 已添加对使用 &Id 和 &Id.Suffix 符号的 PRIVATE/PUBLIC 语法的支持
  • -
  • 以前创建 EXE 文件时没有清单,除非您使用的是有清单的 WIN32 资源。现在,当没有提供清单时,该清单会正确添加到 EXE 文件中。
  • -
  • 与版本资源和清单相关的非托管资源的处理方式发生了变化:
  • - -
  • 编译器检测本地资源时,现在会检查是否包含版本和/或清单资源。
  • -
  • 如果没有清单资源,则会将默认清单资源添加到 Win32 资源文件的资源中。
  • -
  • 当存在版本资源时,该版本资源将被编译器根据 Assembly 属性生成的版本资源所取代。
  • -
  • 这将对来自 VO 的用户有所帮助,他们可以对所有程序集(包括具有菜单和窗口资源的程序集)使用 AssemblyVersion 等。
    如果源代码中恰好有版本信息资源,则该资源将被忽略。
  • -
  • 当然,我们添加了一个命令行选项来抑制这种情况:如果使用命令行选项 "-usenativeversion" ,则将使用 Win32 资源中包含的本地版本。如果 Win32 资源文件中没有包含版本资源,则该命令行选项将被忽略。
  • -
    -
    - -
  • ACCESS/ASSIGN 方法中现在支持 PCOUNT() 和 ARGCOUNT()。可以传递的参数数量仍然是固定的,但这两个函数现在将返回在 ACCESS 和/或 ASSIGN 方法中定义的参数数量。
  • -
  • 我们修正了编译器错误 “Failed to emit module”,而不是显示代码中真正问题(类型缺失)的问题。
  • -
  • 预处理器中的扩展匹配标记,如 USE udc 中的 <(file)> 现在也能正确匹配文件名。
  • -
  • 改进了区分括号表达式和类型转换的检测算法。这种算法现在是
  • - -
  • 括号之间的内置类型名称总是被视为类型转换。例如 (DWORD)、(SHORT) 等。
  • -
  • 括号之间的其他类型名称可能被视为类型转换,但也可能被视为括号表达式。这取决于括号后面的标记。如果该标记是运算符,如 +、-、/ 或 *,则视为括号表达式。如果结尾括号后的标记是开头括号,则表达式被视为类型化表达式。举例如下
  • -
    -
    - ? (DWORD) +42       // 这是一种类型转换
    ? (System.UInt32) +42   // 这是一个括号表达式,无法编译
    ? (System.UInt32) 42    // 这是一个类型转换,因为在 42 之前没有运算符
    ? (System.UInt32) (+42) // 这是一个类型转换,因为 +42 位于括号之间
    - -
  • 调用 Axit() 方法的代码现在会产生编译器错误。
  • -
  • 我们使用了 /vo11 编译器选项
  • -
  • 我们更正了几个已签名/未签名警告
  • -
  • 现在,您可以对存储在结构内部的类型化函数指针使用 PCall()(这在 VO Internet 服务 SDK 中使用)。
  • -
  • 词典现在可以识别(在 FoxPro 方言中)For() 和 Field() 函数,您不再需要在这些函数前添加 @@。
  • -
    - 运行时 - -
  • 修正 StrZero() 的负值问题
  • -
  • 修复 IsSpace() 在字符串为空或 null 时崩溃的问题
  • -
  • VFP 方言中的 AFill() 现在也能填充子数组中的元素(适用于多维数组)
  • -
  • NoIVarGet() 和 NoIvarPut() 不再将 IVar 名称转换为符号。这样,在一个类中调用 NoIVarGet() 和 NoIVarPut() 方法时,就能保持原来的命名方式。
  • -
  • VFP 和 XPP Abstract 类现在是真正的抽象类。
  • -
  • 实现 VFP Empty 类。
  • -
  • 实现了 VFP AddProperty 和 VFP RemoveProperty 函数。
  • -
  • 修正了 PropertyVisibility 枚举名称中的一个错字
  • -
  • 修正了在调用 DBF 相关函数时出现的若干错误,这些函数适用于不包含打开表的工作区。
  • -
  • 在 FoxPro 方言中运行时,Seconds() 函数现在可以返回 3 位小数。请注意,您必须添加 SetDecimal(3) 才能真正看到第三位小数
  • -
  • Like() 函数现在在 FoxPro 方言中区分大小写,而在所有其他方言中则不区分大小写。_Like() 函数在所有方言中都区分大小写。
  • -
  • ASort() 不接受 Object() 类型的第 4 个参数。现已纠正:当您传递一个具有 Eval() 方法的对象时,将调用该方法来确定正确的排序顺序。
  • -
  • 使用 Set() 函数设置/恢复全局状态时,运行时同步的某些值可能会不同步。这可能导致不正确的日期格式或类似错误。这一问题已得到修复。
  • -
  • 添加了多个 VFP 兼容功能(其中一些由 Thomas Ganss 提供)。
  • -
  • 我们添加了几个 VFP 功能,例如
  • -
  • 使用 Set() 函数设置 “全局设置 ”时,运行时会确保相关设置也相应设置。例如,设置 Set.DateFormat 现在也会更新 DateFormatNet 和 DateFormatEmpty。
  • -
  • 修复带有非标准填充物的 PadC() 函数
  • -
  • 我们为 FoxPro 特有属性添加了 DBOI_COLLATION 和 DBS_CAPTION。
  • -
    - VO SDK - -
  • 我们已从图形用户界面类源代码中删除了版本信息资源。现在,版本信息由程序集属性生成
  • -
  • 我们已清理了代码,并从抑制警告中删除了警告 9020 和 9021,因为编译器现在可以正确处理这些警告。
  • -
    - RDD 系统 - -
  • 当 DBC 文件被他人独占时,DBFVP 驱动程序不再无法打开 DBF
  • -
  • 已添加对使用 DBS_CAPTION 读取标题和使用 DBOI_COLLATION 读取 collations 的支持
  • -
  • DBFNTX 驱动程序在创建新索引时未正确设置 HPLocking 标志
  • -
    - Visual Studio 集成 - -
  • 使用 VAR 关键字声明的变量的类型查找有时会陷入无限循环。这一问题已得到修复。
  • -
  • 现在只有选中常规编辑器选项中的 “隐藏高级成员 ”复选框时,以“__”开头的成员才会从完成列表中隐藏。
  • -
  • 已添加对 BRACKETED_STRING 常量着色的支持
  • -
  • 修正了关键字大小写同步代码中的一个错误。
  • -
  • VS 表单编辑器后面的代码在声明没有返回类型的方法时存在问题。因此无法打开表单。这一问题已得到修复。
  • -
  • 改进了定义和枚举成员的 intellisense 信息
  • -
  • 现在,您可以在项目属性对话框中启用/禁用  /vo11
  • -
    - VOXporter - -
  • 从剪贴板内容移植时,现在 VOXporter 会将修改后的代码放回剪贴板
  • -
  • 添加了移除 ~ONLYEARLY 实用程序的选项
  • -
    - 安装 - -
  • 安装程序现在有了一个新的命令行参数“-nouninstall”,可以防止自动安装以前的版本。这样就可以同时安装多个版本的 X#。
    请注意,安装程序会将注册表键值设置为上次安装 X# 的位置。Visual Studio 集成将使用该位置来定位编译器。
    如果不更改,所有 VS 安装将始终使用上次安装的 X# 版本。有关该机制如何工作的信息,请参阅 VS 和 MsBuild 的生成过程
    此外,如果您选择在 GAC 中安装 X# 运行时程序集,那么这些运行时 DLL 的较新版本将/可能会覆盖旧版本。这取决于较新的 DLL 是否有新的程序集版本。
    目前,所有 X# 运行时动态链接库(仍然)都是 2.1.0.0 版本,即使 X# 本身现在是 2.3.2 版本。
  • -
  • 安装程序现在会列出所有找到的 VS 2017 和 VS 2019 实例,包括 Visual Studio Buildtools,因此您可以选择在这些版本的 Visual Studio 的特定实例中安装,或者直接在所有实例中安装。
    请注意,在使用 -nouninstall 命令行选项运行 X# 时,安装程序将无法将 X# 从之前安装过它的 VS 安装中移除。
  • -
  • 我们在帮助文件中添加了一些关于所有安装程序命令行选项的 文档 。
  • -
    - 文档 - -
  • 修正了转义码文档中的错误
  • -
  • 我们添加了一个提示和技巧章节,目前包含以下主题。
  • -
  • 添加了对安装程序的说明 命令行选项
  • -
  • 添加了对 VS 和 MsBuild 的生成过程 的描述
  • -
  • 添加了描述 X# 运行时中方言 "不兼容" 的主题。请注意,该主题尚未完成。
  • -
  • 如何在启动时捕捉错误
  • -
  • 编译器在启动代码中的魔法
  • -
  • 编译器生成的特殊类
  • -
    - - Changes in 2.3.1.0 (Bandol GA 2.3a) - 编译器 - -
  • 在大小写敏感模式下编译时,编译器现在会检查子类声明的方法是否与父类中的方法只有大小写上的区别
  • -
    - -
  • 关于向 foreach iterator 变量赋值的警告信息已从 “无法赋值 ”更改为 “不应赋值”。
  • -
  • #pragma warnings 无法使用 xs1234 语法,只能使用数字。现已更正
  • -
    - - 运行时 - -
  • 为 IRdd 接口添加了 SetFieldExtent 方法
  • -
  • USUAL 类型不再 “缓存 ”方言设置
  • -
  • 修正了 ACopy() 在跳过参数或负参数时的一些问题。
  • -
  • Alias() 的返回值现在使用大写字母。
  • -
    - VO SDK - -
  • VO SDK Console 类现在内部使用 System.Console 类。唯一不再可用的功能是
  • - -
  • 它不再响应鼠标
  • -
  • 不支持创建 “新 ”控制台窗口。
  • -
    -
    - RDD 系统 - -
  • 修正了 Advantage RDDs 中的一个问题,该问题是由大小写问题引起的(子类中的方法与试图覆盖的父类中的方法的大小写不同)。因此,我们还在编译器中添加了一项检查。
  • -
  • 在某些情况下,使用 DBFNTX 驱动程序创建 NTX 可能会因时间问题而失败。这一问题已得到修复。
  • -
    - Visual Studio 集成 - -
  • 修正了关键字大小写同步中可能损坏编辑器内容的问题。
  • -
    - - Changes in 2.3.0.0 (Bandol GA 2.3) - 编译器 - -
  • 源文件中的语法错误 (1003) 或解析器错误 (9002) 可能导致错误列表中出现多个错误。现在我们只报告源文件中这些错误类型中的第一个。
  • -
  • 启用 -cs(大小写敏感标识符)编译器选项
  • -
  • 编译器现在会将编译时代码块的源代码作为字符串包含在该代码块中。在编译时代码块上调用 ToString() 将获取该字符串。
  • -
  • 修正了一个问题,即内存变量在传递给 DO <proc> WITH 语句时不会更新
  • -
  • 在类型化代码中访问或赋值未定义的属性或调用未定义的方法会产生编译器错误。现在,编译器会检测类型是否有 NoIVarGet()、NoIVarPut() 或 NoMethod() 方法,如果找到相应的方法,就会生成编译器警告 (XS9094) 而不是编译器错误。
  • -
  • 使用 LOGIC(_CAST,numValue) 结构将数字转换为逻辑值时,只能查看 numValue 的最低字节。如果最低字节为零,而较高字节不为零,结果将是 FALSE。现在编译器将其编译为 (numValue <> 0)。
  • -
  • 编译器现在支持 IF 语句的(可选)THEN 关键字
  • -
  • 已添加对 FoxPro CURRENCY 类型的支持。
  • -
  • 在 PROPERTY SET 方法中,Value 关键字始终以小写编译
  • -
  • 现在可以在行尾检测到未终止的字符串。
  • -
  • 为 FoxPro 添加了ENDTRY UDC
  • -
  • 已添加对 #pragma warning(s) 的支持。更多信息,请参阅帮助文件中的 #pragma warnings
  • -
  • 已添加对 #pragma options 的支持。参见 #pragma options
  • -
    - 运行时 - -
  • 添加了 XSharp.Data.DLL,其中包含 RDD 系统使用的基于 .Net SQL 的数据访问支持代码和新的 Unicode SQL 类。
  • -
  • 当未传递 FOR 块或 WHILE 块时,DbEval() 引发异常
  • -
  • 当求值块不返回逻辑表达式时,DbEval() 引发异常
  • -
  • OrdSetFocus() 的工作区事件有一个错误,即使事件成功,也会导致该事件出现 “操作失败 ”错误。
  • -
  • 包含 STRINGS 的 USUAL 上的索引运算符(仅在 Xbase++ 方言中支持)没有考虑到索引已经为零的情况
  • -
  • 在日期或逻辑字段的长度不正确的情况下调用 DbCreate() 时会出现异常,现在已自动更正。
  • -
  • 添加了将 STRING 类型的 USUAL 值转换为 STRING 的修复。
  • -
  • 修正了当区域为 “NIL ”或 “M ”时,__FIeldSetWa() 中的一个问题。
  • -
    - -
  • 添加了 FoxPro CURRENCY 类型。USUAL 变量也支持这种类型。在内部,CURRENCY 变量的值存储为十进制,但四舍五入到小数点后 4 位。
  • -
  • 大多数运行时 DLL 现在都以大小写敏感模式编译。
  • -
  • 修正了 STOD() 函数中的一个问题,允许字符串长度超过 8 个字符。
  • -
  • 我们在运行时添加了一些 VFP 函数,如 Just...() 函数和 AddBs()。其他一些函数已经存在,但尚未实现。这些函数被标记为 [Obsolete] 属性,调用时将抛出 NotImplementedException 异常。
  • -
  • 在 Windows 上运行时,低级文件 IO 系统现在使用本地 Windows 文件访问,而不是托管访问。这也会影响 RDD 系统。
  • -
  • 修正了 ACopy()、Transform() 和 Str() 中的问题
  • -
    - VOSDK 类 - -
  • 新增了 DbServer:FieldGetBytes() 和 DbServer:FieldPutBytes() 以读取字符串字段的 “原始 ”字节。请注意(在 ccOptimistic 模式下)字节值不会被缓存,调用 FieldPutBytes() 时必须手动锁定和解锁服务。
  • -
  • 添加了几个缺失的定义
  • -
  • 将 VO SDK 同步到 VO 2.8 SP4 SDK。唯一未包含的更改是 DateTimePicker 类中的更改。这些更改导致了与 X# VOSDK 中现有代码的冲突。
  • -
    - RDD 系统 - -
  • Advantage RDD 的标题大小会导致异常。现已修复
  • -
  • 修正了 DbRlockList() 和 advantage RDD 的一个问题
  • -
  • 在 Advantage RDD 的 cursor 中跳转不会刷新相关表的 EOF 和 BOF 标志
  • -
  • 修正了在 FPT 文件中写入字符串的问题
  • -
  • AX_Get.. Handle() 函数没有正确返回句柄
  • -
  • 我们添加了几个缺失的与 Advantage 相关的函数。
  • -
  • 在创建新文件时,DBFVFP 驱动程序没有将 DBC 反向链接块写入文件头,导致记录数为负数。
  • -
  • 我们为 DBFVFP 驱动程序添加了从 DBC 文件读取字段名的(临时)支持。因此,在索引表达式中使用长字段名的 CDX 文件现在也能正确打开了
  • -
  • 修正了 DBF RDD 的 CopyDb() 代码中的一个问题
  • -
  • DBFCDX RDD 现在可以实现 BLOB_GET、BlobExport() 和 BlobImport() 。
  • -
  • Pack、Zap 或重建带有自定义或唯一标记的 CDX 索引时,将无法保留这些标记。这一问题已得到修复。
  • -
  • 使用 DBFVFP 驱动程序创建文件时,现在可以在 DbCreate() 数组的字段类型中包含字段标记,方法是在类型后面加上冒号和一个或多个标记,其中标记为以下其中之一:
    N or 0:Nullable
    BBinary
    +AutoIncrement
    UUnicode.  (不受 FoxPro 支持)
    其他标记也可能随之出现(例如,Harbour 也有 E = 加密和 C = 压缩标记)
    注意:
  • - -
  • 请注意,字段的大小是字节数,因此{“NAME”, “C:U”,20,0}声明了一个包含 10 个 Unicode 字符和 20 个字节的 Unicode 字符字段。
  • -
  • 我们不验证标志的组合。例如,AutoIncrement 只适用于 Integer 类型的字段。
  • -
    -
    - -
  • 除 DBFVFP 驱动程序外,所有 RDD 的 DbFieldInfo(DBS_PROPERTIES) 都返回 5。该驱动程序返回 6 个属性。第 6 个属性是 FLAGS 字段。该字段是 DBFFieldFlags 枚举值的组合。
  • -
  • 修正了 Advantage RDD 的 AppendDb() 和 CopyDb() 的一个问题
  • -
  • 修正了 DBF RDD 的 Append() 代码中的一个问题。当调用 Append() 时没有写入数据,那么写入磁盘的记录可能会损坏。现在,Append() 方法可直接写入带空白的新记录。
  • -
  • 现在,XSharp.RDD.DLL 中 Advantage RDD 的完全限定名称与 Vulcan 的 AdvantageRDD.DLL 中的完全限定名称相同。
  • -
    - -
  • 我们在通知中添加了 FileCommit 事件。该事件会在工作区提交时发送。
  • -
    - 宏编译器 - -
  • 宏编译器现在还能识别 Array()、Date() 和 DateTime() 函数。
  • -
  • 修正了别名表达式的问题
  • -
  • 在宏编译器希望使用单一表达式的地方,现在也可以在括号之间使用表达式列表。列表中的最后一个表达式被视为表达式列表的返回值
  • -
    - Visual Studio 集成 - -
  • 在 VS 项目系统中启用了编译时区分大小写的选项
  • -
    - -
  • "格式化文档"的速度有了很大提高。
  • -
  • 现在,“工具/选项 ”中的 XSharp intellisense 选项页面在需要时会显示滚动条。
  • -
  • VO 窗口编辑器中的工具调色板现在有了图标
  • -
    - -
  • 我们为 VO MDI 窗口和 VO SDI 窗口添加了模板。
  • -
    - 生成系统 - -
  • 在编译本地资源时,资源编译器会自动包含一个包含某些定义(如 VS_VERSION_INFO)的文件。
  • -
    - 调试器 - -
  • 在调试器中输入观察表达式或断点条件时,现在可以使用基于 1 的数组索引。现在,我们的调试器在计算表达式时会自动减去 1。
  • -
    - VOXporter - -
  • 修正了 Windows 窗体代码生成中的一个问题
  • -
    - -
  • 现在,您还可以从剪贴板导出单个 MEF 文件、单个 PRG 文件和数据。
  • -
  • VOXPorter 不会触及 #ifdef ... #endif 之间的代码
  • -
    - - Changes in 2.2.1.0 (Bandol GA 2.2a) - 编译器 - -
  • 在编译包含赋值而非 access 的代码时,尝试读取 access 可能会导致编译器异常。这一问题已得到修复。
  • -
    - 运行时 - -
  • 添加了一个缺失的 _Run() 函数
  • -
    - Visual Studio 集成 / 生成系统 - -
  • 修正了一个问题,该问题会导致对话框显示“‘XSharp 项目系统’软件包未正确加载 ”的信息。
  • -
  • 修正了当源文件名称包含带重音的 ASCII 字符或其他大于 128 的字符时,为资源编译器写响应文件的问题。尽管问题已经解决,但我们仍建议不要对文件名进行过多处理,因为这些文件名必须从 Unicode 转换为 Ansi 格式,因为资源编译器只能读取 Ansi 格式的响应文件。
  • -
  • 修正了某些 快速信息/工具提示 窗口的问题
  • -
  • 现在,VO 项目模板在 Vulcan 包含文件的 #include 语句周围添加了一个条件,因为在为 X# 运行时编译时不再需要这些条件。
  • -
  • 已添加对调试器中 “Auto ”窗口的支持
  • -
  • 观察窗口、断点条件等中的表达式现在可以包含 SELF、SUPER 和冒号分隔符。遗憾的是,它们仍然区分大小写。
  • -
    - VOXPorter - -
  • 我们现在可以检测到一个类的字段名和 accesses/assigns 是否相同。这在 VO 中是允许的,但在 .Net 中不再允许。在类中,字段名将以下划线作为前缀。
  • -
  • 现在,我们在 “Trace ”名称前加上 @@,因为这通常用于在 VS 中有条件地编译跟踪代码。
  • -
    - - Changes in 2.2.0.0 (Bandol GA 2.2) - 编译器 - -
  • 编译器现在可以识别函数 Date()、DateTime() 和 Array(),即使它们的名称与类型名称相同。
    `Date()`带有一个参数仍然会被视为将该参数转换为`Date()`,就像下面的例子中一样。
    LOCAL dwJulianDate AS DWORD
    LOCAL dJulianDate  AS DATE
    dwJulianDate       := DWORD( 1901.01.01)
    dJulianDate        := DATE(dwJulianDate) // 这仍然是从 Date 到 DWORD 的转换
    然而,当调用带有 0 个或 3 个参数的 Date 时,要么返回当前日期(如 Today()),要么根据 3 个参数构造一个日期(如 ConDate())。
    DateTime() 函数接受 3 个或更多参数并构造一个 DateTime() 值。
    Array() 函数的参数与 ArrayNew() 函数相同。
  • -
  • 在为 String.Format() 选择重载且通常表达式作为第一引用传递时,我们不再允许编译器选择期望 IFormatProvider 接口的重载之一。
  • -
  • 通过引用传递给未类型化方法/函数的参数现在已设置了 IsByRef 标志。您可以通过 IsByRef(uParameter) 检查参数来查询 “By Reference ”参数。请注意,为参数赋值后,该标记将被清除。
  • -
  • 编译器现在还允许通过引用将别名字段和 memvar 传递给未类型化函数。甚至允许使用未声明的 memvar。
    请注意,对字段和 memvar 的赋值将在函数调用返回后进行。因此,在函数内部,字段或 memvar 仍然保留其原始值。
  • -
  • 在插值字符串中使用“: ”作为发送操作符会产生歧义,因为“: ”也可用于为插值字符串添加格式规范。编译器现在可以检测并允许使用 “SELF:”、“SUPER: ”和 “THIS:”。
    如果你想安全起见,在其他变量的插值字符串中使用“. ”作为发送操作符,或者干脆不使用插值字符串,而是使用 String.Format,就像在下面的一样:
    ? String.Format("{0} {1}", oObject:Property1, oObject:Property2)
    而不是
    ? i"{oObject:Property1} {oObject:Property2}"
    无论如何,编译器都会生成这样的代码
  • -
    - - 宏编译器 - -
  • 宏编译器现在可以识别并编译嵌套代码块,例如
    LOCAL cb := {|e| IIF(e, {||SomeFunc()}, {||SomeOtherFunc}) } AS CODEBLOCK
    cb := Eval(cb, TRUE)   // cb 现在将包含 {||SomeFunc()}
    ? Eval(cb)
  • -
  • 在 FoxPro 方言中,宏编译器现在可将 AND、OR、NOT 和 XOR 识别为逻辑运算符
  • -
    - 运行时 - -
  • 添加了一些 Xbase++ 兼容函数,如 DbCargo()、DbDescend() 和 DbSetDescend()。
  • -
  • DateCountry 枚举现在还有 System 和 Windows 值,它们都从系统中的区域设置读取日期格式。
  • -
  • 我们添加了一个 WrapperRDD 类,您可以继承该类。这样,您就可以封装现有的 RDD,并根据自己的选择对方法进行子类化。有关示例,请参阅 WrapperRDD 文档。
  • -
  • 我们在 CollationMode 枚举中添加了一个 XPP 成员,其编号与 Clipper 相同。这让一些用户感到困惑。现在我们给 XPP 成员一个新的编号。
  • -
  • 现在,OleAutoObject:NoMethod() 在 Vulcan 方言中的行为有所不同(以便与 Vulcan 兼容)。在 Vulcan 方言中,方法名称会插入参数列表的开头。在其他方言中,参数保持不变,您需要调用 NoMethod() 函数来获取最初调用的方法名称。
  • -
  • 运行时状态中的所有设置现在都以默认值初始化,因此运行时状态中的 Settings() 字典将包含所有 Set 枚举值的值。
  • -
  • 之前的更改修正了 Set() 函数在使用字符串 “On ”或 “Off ”为逻辑设置值时出现的问题。由于某些设置未使用逻辑初始化,因此无法正常工作。
  • -
  • 使用 SetCollation(#Ordinal) 创建索引时,速度会更快一些。
  • -
  • runtimestate 现在有一个 EOF 设置。当设置为 “true ”时(FoxPro 方言会自动这样做),MemoWrit() 将在文本文件后写入一个 ^Z (chr(26)),而 MemoRead()在找到该字符时会将其删除。
  • -
  • runtimestate 现在有了 EOL 设置。默认值为 CR - LF (chr(13)+chr(10))。使用 FWriteLine() 写入文件时,该设置用于行分隔符。
  • -
    - RDD 系统 - - -
  • 修复了 DBFCDX RDD 中的锁定问题,该问题会在打开多个应用程序之间以及多个线程之间共享的文件时造成问题。现在,RDD 可以正确检测 CDX 是否被其他进程或线程更新。
  • -
  • 修复了运行多个线程时文件 IO 系统的一个问题
  • -
  • 修正了运行多个线程时 File() 和 FPathName() 函数的一个问题
  • -
  • 已添加对 Workarea Cargo 的支持(请参阅 DbCargo())
  • -
  • 带有尾部空格的数字列返回值为 0。这一问题已得到解决。
  • -
  • 修复了 DBFCDX 驱动程序中的一个问题,该问题会在删除/更新许多键和删除索引页时出现。
  • -
  • 修复 DBF RDD EOF 时的读取错误。
  • -
    - VOSDK - -
  • 修复了在应用程序关闭时调用已关闭服务器的 DbServer 析构函数时出现的问题。
  • -
    - Visual Studio 集成 - -
  • 在一位用户的帮助下,修复了 “括号匹配 ”代码中的速度问题(感谢 Fergus!)。
  • -
  • 调试器运行时,您将无法再编辑源代码。
  • -
  • 我们在项目属性的生成选项中添加了 “注册 COM Interop ”属性。
  • -
  • 我们更新了装配信息模板。它们现在有了 GUID 和 Comvisible 属性。
  • -
  • 编辑器缓冲区中的空行有时会引发异常。现已修复
  • -
  • TEXT ... ENDTEXT 之间的文本不再因编辑器中的格式选项(如缩进或大小写同步)而改变。
  • -
  • 在编辑器中,不完整字符串的颜色与正常字符串相同。
  • -
  • QuickInfo 和 Completion 列表将遵循关键字编辑器的 “格式大小写 ”设置。
  • -
  • 如果没有设置 “工具/选项 ”中的某个选项,那么在加载编辑器中打开文件并保存的项目时可能会出现异常,导致加载的项目中没有可见项目。卸载和重新加载可以解决这个问题。现在这种情况将不再发生。
  • -
  • 我们做了一些更改,使解决方案的打开和关闭速度更快。
  • -
  • 选择 Visual Studio Dark 主题时,某些颜色难以阅读。这一问题已得到修复。
  • -
  • 括号匹配有时会错误地将END CLASS 与 BEGIN NAMESPACE 匹配。这种情况应该不会再发生了。
  • -
  • 修正了在某些情况下打开解决方案时出现的异常,该异常会在 VS 中显示错误,说明 XSharp 项目系统未正确加载。
  • -
  • Windows 窗体、设置和资源的代码生成器现在尊重 “工具”-“选项 ”TextEditor/XSharp 页面中的关键字大小写设置。
  • -
    - VOXPorter - -
  • 以反斜线结尾的文件夹名称可能会混淆 VOXPorter
  • -
    - - Changes in 2.1.1.0 (Bandol GA 2.11) - 编译器 - -
  • 我们为 OUT 参数添加了新语法。现在您可以使用以下语法之一
  • -
    -
      LOCAL cString as STRING
      cString := "12345"
      IF Int32.TryParse(cString, OUT VAR result)      
    // 这将以内联方式声明 out 变量,其类型来自方法调用
         ? "Parsing succeeded, result is ", result
      ENDIF
      IF Int32.TryParse(cString, OUT result2 AS Int32)  
    // 这将声明内联 out 变量,类型由我们指定
         ? "Parsing succeeded, result is ", result2
      ENDIF
      IF Int32.TryParse(cString, OUT NULL)      
    // 这将告诉编译器生成一个 out 变量,我们对结果并不感兴趣。
         ? "Parsing succeeded"
      ENDIF
      IF Int32.TryParse(cString, OUT VAR _)      
    // 会告诉编译器生成一个 out 变量,但我们对结果并不感兴趣。
    - // 名称“_”的特殊含义是 “忽略此内容”。
         ? "Parsing succeeded"
      ENDIF
    - -
  • 编译器现在允许使用 Date()、DateTime() 和 Array() 函数名。运行时具有这些函数(见下文)
  • -
  • 修正了一个预处理器问题,即当 .not. 或 ! 操作符位于 .AND. 或 .OR. 等逻辑操作符之后时,UDC 内的 <token> 匹配标记会停止匹配标记。
  • -
  • 已添加对 <usualValue> IS <SomeType> 的支持。编译器会自动提取 USUAL 的内容并将其封装在一个对象中,然后应用正常的 IS <SomeType> 操作。
  • -
  • 修正了插值字符串中无法正确识别“/”字符的问题。
  • -
  • 编译器现在支持 cursor 访问的 FoxPro 语法。当动态内存变量被禁用时,它总是被转换为从当前游标/工作区读取字段。

      USE Customer
      SCAN
         ? Customer.LastName
      END SCAN
      USE
  • -
    - 如果启用了内存变量,那么这段代码也可能意味着您正试图读取名称为 “Customer ”的变量的 Lastname 属性,就像下面的示例一样: -   USE Invoices
      Customer = MyCustomerObject{}
      SCAN
         ? Customer.LastName, Invoice.Total
      END SCAN
      USE
    - 您也可以使用 M 前缀来表示局部变量或内存变量。编译器会首先尝试将变量解析为局部变量,如果失败,则会尝试将变量解析为内存变量(启用动态内存变量时)。 - 运行时 - -
  • 我们为 FoxPro cursor 访问语法添加了支持功能。
  • -
  • 在 Vulcan 方言中,NoMethod() 方法现在接收方法名作为第一个参数(这与 VO 不兼容)
  • -
  • 新增了函数 Date()(可有 0 或 3 个参数,相当于 Today() 和 ConDate())、DateTime() 和 Array()。
  • -
  • 添加了对接受区域参数的函数进行修复和优化,例如 Used(uArea) 和 Eof(uArea)。
  • -
  • AScan() 和 AScanExact() 现在可在传递 NULL_ARRAY 时返回 0。
  • -
    - - RDD - -
  • 从 DBF 中读取负数时出现问题。现已修复
  • -
  • 修正了 FPT 驱动程序在 FPT 文件中写入长度为 0 字节的数据块时出现的异常。
  • -
  • DBF() 函数在 FoxPro 方言中返回完整文件名,在其他方言中返回别名。
  • -
  • 为完全清空的 DBF 文件创建 CDX 索引时,会为幽灵记录插入索引键。这一问题已得到修复。
  • -
    - - Changes in 2.1.0.0 (Bandol GA 2.1) - 编译器 - -
  • 我们为函数和方法调用中的未类型化参数添加了对引用参数的支持
  • -
  • 在 Xbase++ 和 FoxPro 方言中,用“@”传递的参数总是被视为 BY REF 参数,因为这些方言不支持 “AddressOf” 功能。
  • -
  • 当使用 /undeclared 时,如果实体添加了一个新的 private 属性,那么当实体退出作用域时,该 private 属性不会被清除。这一问题已得到修复。
  • -
  • 编译器未正确处理编译 oObject?:Variable
  • -
  • 修正了调用 SELF:Axit() 时的内部编译器错误
  • -
  • DO 语句的参数现在通过引用传递
  • -
  • 在编译非 Core 方言时,更改了 “必要” 程序集名称的顺序。
  • -
  • 我们新增了对多条 SET 命令的支持,如 SET DEFAULT、SET PATH、SET DATE 和 SET EXACT 等。
  • -
    - 运行时 - -
  • 我们做了一些更改,以使 XSharp.Core 能够在 Linux 上运行
  • -
  • 我们修复了日期类型减法运算符中的一个问题。这改变了减法运算符的签名,迫使我们增加了运行时的 Assemblyversion。
  • -
  • Xbase++ 方言现在允许在常量内的字符串上使用 [] 操作符。它会返回给定位置上一个字符的子串。
  • -
  • 我们更正了 OrderChanged 事件中的一个错误事件
  • -
  • CoreDb.BuffRefresh 向 IRDD.RecInfo() 方法发送了不正确的枚举器值。
  • -
  • IVarList() 函数包含受保护字段和属性。该问题已得到修复。
  • -
  • 如果对象属于 CodeBlock 的子类,则无法使用 IsInstanceOfUsual()。这一问题现已得到修复。
  • -
  • 我们添加了许多工作区相关函数的重载,这些函数带有一个额外参数,用于指示工作区编号或工作区名称。例如 EoF()、Recno()、Found() 和 Deleted() 函数
  • -
  • 我们添加了 Xbase++ collation 表。SetCollationTable() 函数现在可以选择正确的 collation。
  • -
  • 多个与数组相关的函数现在可以更好地检查 NULL 数组
  • -
  • 错误类中的 SubcodeText 属性现在是读/写属性。当值尚未写入时,将使用子代码编号来查找该属性的值。
  • -
  • MExec() 并不总是计算已编译的代码块。该问题已得到修复。
  • -
  • 我们添加了一些缺失的三角函数,如 ACos()、ASin() 等。
  • -
  • 在 Xbase++ 方言中,FieldGet() 和 FieldPut() 函数不再因字段号不正确而出错。
  • -
  • 我们添加了一个缺失的 MakeShort() 函数和 SEvalA() 函数。
  • -
  • DateCountry 设置现在包括一个系统设置,它将从当前文化的设置中读取日期格式。
  • -
    - 宏编译器 - -
  • 宏编译器检测到不明确的方法或构造函数时,会在错误信息中包含这些方法或构造函数的签名。
  • -
  • 我们添加了一个新的 IMacroCompiler2 接口,它增加了一个额外的属性 “Resolver”。该属性可接收一个 “MacroCompilerResolveAmbiguousMatch ”类型的委托。该委托的原型如下:
    DELEGATE MacroCompilerResolveAmbiguousMatch(m1 as MemberInfo, m2 as MemberInfo, args as System.Type[]) AS LONG
  • -
  • 当宏编译器检测到模棱两可的匹配时,将调用该委托,并接收可能候选的 System.Reflection.MemberInfo 和检测到的参数类型数组(编译时检测到)。委托可以返回 1 或 2,以便在任一候选变量中做出选择。任何其他值都意味着委托不知道要选择哪个模棱两可的成员。
    如果宏编译器发现有 2 个以上的备选方案,它会首先调用备选方案 1 和 2 的委托,然后再调用从备选方案 2 和备选方案 3 中选出的委托,等等。
  • -
  • 您可以将函数或方法注册为新函数的委托
    SetMacroDuplicatesResolver()
  • -
  • 我们现在可以处理(一级)嵌套宏。因此,宏编译器可以正确编译以下代码块
    {|e| iif(e, {||TRUE}, {||FALSE})}
  • -
  • 宏编译器现在允许在整数和逻辑之间进行比较(就像运行时中的普通类型一样)。但仍不建议这样做!
  • -
  • 宏编译器现在允许使用'['和']'作为字符串分隔符。这在普通编译器中是不允许的,因为这些分隔符无法与属性区分开来。
  • -
  • 我们修正了一个问题,即当方法名与 Usual 类型中的方法名或属性名(如名称为 Item() 的方法)相匹配时,需要进行后期绑定调用。
  • -
  • 宏编译代码块的 PCount() 总是返回 1。这一问题已得到修复。
  • -
    - VOSDK - -
  • 修正了代码中未关闭的 DbServer 对象的问题。
    现有代码试图通过析构函数关闭工作区。但在 .Net 中,析构函数在一个单独的线程中运行,而在该 GC 线程中没有打开的文件...
  • -
  • 删除了对 DbfDebug() 的不必要调用
  • -
  • AdsSqlServer 类现已添加到 VORDDClasses 程序集中
  • -
    - RDD - -
  • 我们更正了一个关于解析错误或空日期的问题
  • -
  • 我们更正了在 Advantage RDD 中读取日期时可能导致堆错误的问题。
  • -
  • 我们为 Advantage 支持添加了几个 “缺失 ”功能,这些功能在 VO 的 “Ace.Aef ”中已有
  • -
  • 我们新增了对 Character 字段 > 255 字符的支持
  • -
  • DbSetScope() 现在会将记录指针移动到与新作用域匹配的第一条记录上。
  • -
  • 使用 SetAnsi(TRUE) 的 DBFNTX 驱动程序 DbCreate() 创建的文件第一个字节为 0x07(或 0x87)。
    在 Xbase++、FoxPro 和 Harbour 方言中不再出现这种情况,因为第一个字节只针对 VO
  • -
  • 某些 FoxPro 备注值在写入时末尾会多出一个 0 字节。现在,在读取这些值时,这个额外的字节将被抑制。
  • -
  • 我们修复了 CDX 文件中版本号未更新的问题,并改进了 CDX 锁定功能。
  • -
  • 当索引标题中的标签名称不是大写字母时,Xbase++ 无法识别 NTX 索引。该问题已得到修复。
  • -
  • 我们修复了创建 CDX 索引时的一个(性能和大小)问题。
  • -
  • 当打开一个没有字节编码的 DBF 文件时,我们默认使用当前的 Windows 或 DOS 编码,具体取决于当前的 SetAnsi() 设置。
  • -
  • 优化了numeric、date 和 logical 列的读取
  • -
  • -
    - Visual Studio 集成 - -
  • 修复了 WCF Service 模板
  • -
  • 我们已将项目系统迁移到异步 API。这将使包含大量 X# 项目的解决方案的加载速度更快一些。
  • -
  • 修正了关键字大小写同步中可能导致用户界面锁定数秒的问题
  • -
  • 修正了 BraceMatching 代码中的一个异常。
  • -
  • 取消行块注释有时会在空行前留下注释。这一问题已得到解决。
  • -
  • 我们改进了类型、方法、字段、属性和参数的(XML)文档查找。
  • -
  • 我们改进了 X# 项目之间的类型查找。
  • -
    - VOXPorter - -
  • 现在还可导出 DbServer 和 FieldSpec 实体
  • -
  • VOXPorter 现在还能生成一个单独的项目/应用程序,其中包含 VO 应用程序中 VO 图形用户界面窗口的 Windows 窗体版本。
  • -
  • 运行 VOXPorter 时,您现在可以选择导出到 XIDE、Visual Studio 或两者。
  • -
    - - Changes in 2.0.8.1 (Bandol GA 2.08a) - 编译器 - -
  • 修正了预处理器中的递归问题
  • -
  • 不再能正确检测 MEMVAR-> 和 FIELD-> 现已修复。
  • -
  • 我们更正了 dbcmd.xh 中的几个问题
  • -
  • 修正了 Lambda 表达式中 return 语句的一个问题。
  • -
  • = Expression() 语句(FoxPro 方言)未生成任何代码。现已修复。
  • -
    - 运行时 - -
  • XPP.Abstract.NoMethod()和 XPP.DataObject.NoMethod() 仍然将方法名称作为第一个参数。这个问题已得到修复。
  • -
  • 由于参数不正确,StretchBitmap() 的效果与 ShowBitmap() 相同。这一问题已得到修复。
  • -
    - Visual Studio 集成 - -
  • 改进了格式化文档代码
  • -
  • 修正了 VS 解析器在查找使用 VAR 关键字定义的变量类型时出现的一个问题,该问题可能导致 VS 陷入无尽循环。
  • -
  • TEXT ... ENDTEXT 块的内容以及 \ 和 \\ 标记后的一行现在有了自己的颜色
  • -
    - - Changes in 2.0.8 (Bandol GA 2.08) - 编译器 - -
  • 编译器在 “return ”属性目标上出了问题
  • -
  • 现在,“statementblock”(语句块)规则内的错误能被更好地检测出来,编译器不会再在这些正确的代码行之后报告许多错误。
  • -
  • 修复了与逻辑转换相关的问题。
  • -
  • 修正了将未声明变量用作 For 循环计数器的问题
  • -
  • 改进了前缀操作、后缀操作和赋值中 FIELD、MEMVAR 和未声明变量的代码生成。
  • -
  • 在涉及默认参数时,改进了参数为 ref 或 out 变量的方法调用的代码生成。编译器现在会为这些调用生成额外的临时变量。
  • -
    - -
  • 在与此相关的方言中,编译器现在还支持 ENDFOR 作为 NEXT 的别名和 FOR EACH 作为 FOREACH 的别名。
  • -
  • 已添加对 DO <proc> [WITH arguments] 语法的支持
  • -
    - 运行时 - -
  • 当要创建文件的基本文件名已作为别名打开时,DbCreate() 函数现在会创建一个唯一的别名
  • -
  • 现在,USUAL 值的数值溢出检查与主程序的溢出检查相同
  • -
  • DbUnLock() 现在接受记录编号(可选)作为参数
  • -
  • XMLGetChild() 在未找到元素时会抛出异常
  • -
  • XMLGetChildren() 引发异常
  • -
  • 修正了 “dbcmds.xh ”中 2 条规则的一个问题
  • -
  • XSharpDefs.xh 文件现在会自动包含 “dbcmd.xh”。
  • -
  • 错误报告了一些数据类型错误。
  • -
  • 后期绑定代码的 “NoMethod ”方法在调用时使用了不正确的参数。这一问题已得到修复。
  • -
  • 修正了将带有 NIL 值的 usuals 转换为字符串或对象时出现的一些问题。
  • -
  • 在 Xbase++ 中,Set() 函数也接受逻辑设置值为 “ON ”或 “OFF ”的字符串。我们现在也允许这样做。
  • -
  • Set(_SET_AUTOORDER) 现在可以像在 VO 中一样接受第二个数字参数(Vulcan 使用的是逻辑参数)。
  • -
  • 我们在 FoxPro 类层次结构中添加了一些支持类,用于支持 FoxPro 类(Abstract、Custom 和 Collection)。稍后还将添加更多的类。
  • -
  • 修正了转换和“@ez ”图片的问题。
  • -
    - VOSDK - -
  • 修复了 SQLSelect 类中重新打开 cursor 时的一个问题。
  • -
    - RDD 系统 - -
  • 修复了读取 Advantage MEMO 字段的问题
  • -
  • 改进了因索引表达式错误(如缺少函数)而无法打开索引时的错误信息
  • -
  • 我们添加了在 RDD 系统中安装事件处理程序的选项。更多信息,请参阅主题 Workarea 事件 。
  • -
  • 对于只有 0 条记录的工作区,Skip、Gobottom 和其他更改当前记录的工作区操作将不再把 EOF 设为 FALSE。
  • -
  • 在没有设置作用域的情况下,清除 Advantage 工作区中的作用域会产生异常。这一问题已得到修复。
  • -
  • 在没有锁定记录的情况下,解锁 Advantage 工作区中的记录会出现异常。这一问题已得到修复。
  • -
  • DbSetRelation() 无法正常工作。现已修复。
  • -
    - VS 集成 - -
  • 修复了 DbServer 和 FieldSpec 实体代码生成中的一个问题
  • -
  • 已添加对 DbServer 编辑器中导入和导出按钮的支持
  • -
  • 改进了 Xbase++ 方言编辑器内的实体解析。
  • -
  • 除非源文件本身有预处理标记,否则 VS 解析器不会对 UDC 标记(包括ENDFOR)着色。这一问题已得到修复。
  • -
  • 改进了对新END关键字的块检测。
  • -
  • VS 集成现在可以识别 VFP 类型类的类语法。
  • -
  • 修正了代码中的一个问题,即检查哪个项目系统 “拥有” PRG 扩展名。
  • -
  • 在 “项目属性 ”页面中添加了编译器选项,以抑制生成默认的 Win32 清单。
  • -
    - VOXporter - -
  • VOXPorter 忽略了未在 VO 中正确建立原型的实体。这一问题已得到修复
  • -
    - FoxPro 方言 - -
  • 我们添加了一个编译器选项 /fox1,用于控制对象的类层次结构。启用 /fox1(FoxPro 方言中的默认值)后,所有类都必须从 Custom 类继承。属性代码生成会将属性值保存在自定义类内部的一个集合中。启用 /fox1- 后,属性将生成为带有后备字段的 “auto” 属性。
  • -
  • 我们增加了对 FoxPro 类的支持。请参阅 FoxPro class 了解有关哪些有效,哪些无效的更多信息。
  • -
  • 我们新增了对 DIMENSION 和 DECLARE 语句的支持(这些语句可创建一个用数组初始化的 MEMVAR)
  • -
    - - Changes in 2.0.7 (Bandol GA 2.07) - 可能的突破性变化 - -
  • 我们删除了标准头文件中的 #define CRLF。现在 XSharp.Core 中有一个 DEFINE CRLF。如果你在针对 Vulcan 进行编译时发现缺少 CRLF 的错误,那么你可能需要在代码中添加以下内容:
    DEFINE CRLF := e”\r\n”
  • -
    - 编译器 - -
  • 导致标记列表为空的 UDC 会在预处理器中引发编译器错误。这一问题已得到修复。
  • -
    - -
  • 如果底层数组类中不存在方法,在数组上调用方法将被转换为以方法名称为参数的 ASend()。
    如果出现这种情况,编译器会发出警告。
  • -
  • 编译器对(USUAL)转换产生了错误的代码。这个问题已经修复。在极少数情况下,这可能会导致编译错误。如果发生这种情况,只需通过调用USUAL构造函数创建一个usual:USUAL{somevalue}
  • -
  • 修正了在 CLASS ... END CLASS 之外声明的方法的若干问题
  • -
  • 在 FoxPro 方言中,现在允许使用 NOT、AND、OR 和 XOR 作为 .NOT.、.AND.、.OR.和 .XOR. 的替代语法。
  • -
  • 在 FoxPro 方言中,您现在可以在文件的第一个实体之前加入语句。编译器会识别这些语句,并自动以源文件的名称创建一个函数,并将这些语句中的代码添加到该函数的主体中。
  • -
  • 启用 /vo7 后,编译器现在允许将整数表达式转换为逻辑表达式。对于整数类型的表达式,始终支持 LOGIC(_CAST。
  • -
  • 现在,编译器能更早地检测到语言功能的错误使用(如在 Core 或 FoxPro 方言中使用 VOSTRUCT),从而加快了错误代码的编译速度。
  • -
  • 现在,当启用 /vo2 时,编译器也会使用空字符串初始化多维字符串数组,就像下面的代码一样:
    CLASS TestClass
      EXPORT DIM aDim[3,3] AS STRING
    END CLASS
  • -
    - -
  • 在以前的版本中,如果调用 SELF() 或 SUPER() 的源代码行紧跟在 CONSTRUCTOR() 之后,则无法在该行上设置断点。这一问题已得到修复。
  • -
  • 如果项目包含“_DLL METHOD”、“_DLL ASSIGN ”或“_DLL ACCESS”(从 VO 导出后),编译器现在会生成更有意义的错误信息。
  • -
  • 当一个源文件包含许多相同的错误时,编译器将不再产生数百条相同的错误信息。每个源文件出现 10 个错误后,编译器只会报告唯一的错误编号。因此,如果您的源代码有 20 条不同的错误信息,那么您仍将看到 20 条错误报告,但如果您的源代码包含 100 次相同的错误类型,那么错误列表将在 10 条错误后被截断。
  • -
  • 编译器不再允许代码位于ENDIF 或 NEXT 等结束标记之后。标准头文件 “XSharpDefs.xh ”现在包含了消除这些标记的规则。
  • -
    - 运行时 - -
  • 用于 usualtype 的 ++ 和 -- 操作符对日期和日期时间值不起作用
  • -
  • 当源文件不存在时,FErase() 和 FRename() 现在会将 FError() 设置为 2
  • -
  • File() 函数曾因路径中包含无效字符而引发异常。现在它返回 FALSE 并设置 Ferror()
  • -
  • 一些特定的数字产生了不正确的 Str() 结果。现已修复。
  • -
  • 若干类型的 Value 属性名称的大小写从 Value 更改为 VALUE。这给从 C# 代码连接 X# 代码的用户带来了麻烦。现在已恢复原来的大小写。此更改已被撤销。
  • -
  • 在某些情况下,错误堆栈不会包含完整的帧列表。这一问题已得到解决。
  • -
  • 扩大了错误对话框中关闭和复制按钮的大小,以便为翻译字符串留出更多空间
  • -
  • 对于 NIL 值,Pad...() 函数返回的是 “NIL ”的填充版本。这与 Xbase++ 不兼容。现在,它们会返回一个包含所有空格的字符串。顺便说一句:当你调用带有 NIL 值的 Pad..() 时,VO 会抛出一个异常。
  • -
  • 修正了 PadC() 函数在数值大于 1 个字符时出现的问题。
  • -
  • 我们修改了 Val() 函数,使其与 Visual Objects 更加兼容
  • -
  • 运行时包含 Space() 函数的第二个重载,它接受一个 Int 参数。这导致宏编译器出现问题。该重载已被删除。因此,您可能需要修改代码。
  • -
  • 修正了 EnforceType() 和 EmptyUsual() 中与 STRING 类型有关的一个问题
  • -
  • AEval 和 AEvalOld() 现在都将数组索引作为第二个参数传递给被求值的代码块
  • -
    - RDD 系统 - -
  • 修正了一个问题,即在打开带索引的空 DBF 时,EOF 和 BOF 未同时设为 true。
  • -
  • 修复了 DBFNTX 和 DBFCDX 的 DbSeek() 和 Found() 的一个问题
  • -
  • DBF 类无法正确解码包含 Ascii 字符 > 127 的字段名和/或索引表达式(字段名如 STRAßE)。
  • -
  • 在关闭 dbf 时,即使没有任何更改,文件日期也会被更新。该问题已得到修复。
  • -
  • 运行时现在包含在关机时关闭所有打开的工作区的代码。这将有助于防止 DBF 或索引损坏。
  • -
  • 索引顺序更改后,Advantage RDD 会自动执行 GoTop。现在这种情况不再发生。
  • -
  • Advantage RDD 现在会在失败前重试几次打开 DBF 和索引文件。
  • -
  • 修复了 DBFCDX 和 AXDBFCDX 之间的一个小的不兼容问题
  • -
    - VS 集成 - -
  • Core 类库模板的文件名中有一个错字,导致无法正确加载该模板
  • -
  • Windows 窗体编辑器的代码生成器重复使用 USING 语句。这一问题已得到解决。在设计器中打开和保存表单时,重复的 using 语句将被删除。
  • -
  • 编译消息现在仅在生成详细程度为正常或更高时显示在输出窗口上,包括编译时间、警告和错误数量。如果存在编译器错误,警告和错误消息也会显示在较低生成详细程度下。
  • -
  • 如果项目文件是用 2.0.1 版或更高版本创建的,项目系统将不再更新项目文件中的版本号。
  • -
  • 修正了设置和清除程序集引用的 “特定版本 ”属性时出现的问题。
  • -
  • 兼容 VO 编辑器的默认模板现在安装在 XSharp\Templates 文件夹中,当项目中没有模板时,编辑器会将此位置作为 “后备”。
  • -
  • 现在,“属性 ”文件夹在 “项目 ”树中被列为第一个子文件夹,而 “VO 二进制文件 ”项目在 “项目 ”树中源代码项目的子文件夹列表中被置于资源项目之前。
  • -
    - VOXporter - -
  • VOXPorter 现在以 @@ 作为调试令牌的前缀。
  • -
  • VOXPorter 现在可删除同时声明为 ACCESS/ASSIGN 的属性的 INSTANCE 声明
  • -
  • VOXPorter 现在可在以 .AND 或 .OR. 分隔的变量名之间添加空格。 因此,“a.and.b ”变为 “a .and. b”。
  • -
    - 文档 - -
  • 我们已经“提取”了一些 Visual Objects 运行时函数的文档,并将其添加到我们的运行时文档中。这是一个正在进行中的工作,一些主题需要额外的工作。
  • -
    - - Changes in 2.0.6.0 (Bandol GA 2.06) - 常规 - -
  • 我们收到了关于简化版本号的请求。因此,新版本被称为 Bandol 2.06,文件版本也是 2.06。运行时程序集的程序集版本均为 2.0,我们打算尽可能保持这些版本的稳定,因此您不必被迫重新编译依赖于运行时程序集的代码。
  • -
  • 2.0.5.0 中应包含的几个修复未包含在对应版本中。这已在 2.0.6.0 中得到纠正。
  • -
    - 编译器 - -
  • 缺少 ENDTEXT 关键字现在会产生错误 XS9086
  • -
  • 不平衡的文本合并分隔符会产生警告 XS9085
  • -
  • 现在,FoxPro 方言中的 TEXT 关键字只有在它是一行中第一个非空格符号时才会被识别。因此,您又可以在预处理器命令中使用 <text> 这样的标记了。
  • -
  • 对字面字符串进行 VO 转置操作时,编译器不再就可能的内存泄漏发出警告。
  • -
    - - 运行时 - -
  • 后期绑定代码中的运行时错误总是显示为 TargetInvocationException。这样就隐藏了错误的真正原因。现在我们正在解包该错误并重新抛出原始错误,包括导致该错误的调用堆栈
  • -
  • 更新了字符串资源中的一些文本
  • -
  • 在长度和/或小数的值为 -1 时调用 Str() 函数,会产生与 VO 不兼容的结果。这一问题已得到修复。
  • -
  • 修正了 DBZap() 和带有 DBT 备注文件的一个问题。
  • -
  • 在某些情况下,打开空 DBF 文件时 EOF 和 BOF 未设置为 TRUE。这一问题已得到修复。
  • -
  • 内部指针不正确的 PSZ 值现在显示为 "<Invalid PSZ>(..)"
  • -
    - - RDD 系统 - -
  • 在 Advantage 工作区中读取和写入列的代码现在使用单独的 column 对象,就像 DBF RDD 的代码一样。这使代码更容易理解,速度也会更快。
  • -
    - - VS 集成 - -
  • TEXT 和 ENDTEXT 之间的文本块现在显示为与字面字符串相同的颜色
  • -
  • 与 VO 兼容的项目项目模板不再自动添加对项目的引用
  • -
  • 使用此版本的 X# 项目系统打开 2.01.0 及更高版本的项目文件时,将不再 “接触 ”这些文件,因为自该版本发布以来,项目文件格式未作任何更改。
  • -
    - - VOXporter - -
  • 生成的 Start 函数中的 CATCH 块现在调用 ErrorDialog() 来显示错误。它使用新的语言资源来显示完整的错误,并提供与 VO 兼容的错误信息(Gencode、Subcode 等)。
  • -
    - - Changes in 2.0.5.0 (Bandol GA 2.01) - 编译器 - -
  • END PROPERTY 后的空行可能会使编译器感到困惑。现已修复
  • -
  • 编译器中已执行 TEXT ... ENDTEXT 命令(仅限 FoxPro 方言)
  • -
  • \ 和 \\ 命令已经实现(仅适用于 FoxPro 方言)
  • -
  • FoxPro 方言中的程序现在可以返回值。此外,/vo9 选项现在在 FoxPro 方言中默认为启用。在 Foxpro 方言中,FUNCTION 和 PROCEDURE 的默认返回值现在是 TRUE,而在其他方言中则是 NIL。
  • -
  • 错误信息不再使用 Xbase 类型的内部名称 (XSharp.__Usual) 而使用其正常名称 (USUAL)。
  • -
    - 宏编译器 - -
  • 创建带有命名空间前缀的类不起作用。现已修复。
  • -
    - 运行时 - -
  • 修正了 ArrayNew() 和多个维度的一个问题
  • -
  • 使用数字调用数组类的构造函数时,元素已被初始化。这与 Vulcan.NET 不兼容。现在有了一个额外的构造函数,它接受一个逻辑参数 lFill,可用于自动填充数组。
  • -
  • ERROR_STACK语言资源的文本已更新
  • -
  • 使用整数调用 Str() 会返回与 VO 稍有不同的结果。这一问题已得到修复。
  • -
  • 添加了 TEXT ... ENDTEXT 和 TextMerge 的支持函数以及输出文本文件。
  • -
  • 修正了 DTOC() 函数中的一个问题
  • -
  • 现在您可以为程序集添加多个 ImplicitNamespace 属性
  • -
  • 我们添加了几个 FoxPro 系统变量(目前只有 _TEXT 有作用)
  • -
    - RDDs - -
  • Zap 和 Pack 操作未正确设置 DBF 文件大小
  • -
  • 共享模式下的 Append() 无法正确设置 RecCount
  • -
  • 使用 Advantage SQL RDDs 之一打开文件不起作用。现已修复。
  • -
  • 将 DateTime.Minvalue 写入 DBF 时不会写入空日期,而是写入日期 1.1.1 已修复此问题。
  • -
    - VO SDK - -
  • 修正了 ListView:EnsureVisible() 中的一个问题。
  • -
  • 一些可疑的类型转换(比如导致之前问题的那个)已经被清理掉。
  • -
    - Visual Studio 集成 - -
  • 构造函数调用的参数提示偏差了一个参数。现已修复。
  • -
  • 在查找类型时,XSharp 命名空间现在是首先搜索的命名空间。
  • -
    - - Changes in 2.0.4.0 (Bandol GA) - 编译器 - -
  • 修正赋值表达式中的一个问题,即左侧是一个带有括号中工作区的别名表达式:
    (nArea)->LastName := AnotherArea->LastName
  • -
  • 多行语句(如 FOR 块)不再在调试器中生成多行断点。
  • -
  • 修正了一个问题,即类定义后的空行或带有 “非活动 ”预处理器注释的行会产生编译器错误。
  • -
  • 如果不支持 INT/DWORD 和 PTR 之间的隐式转换,现在会产生更好的错误信息。
  • -
  • USUAL.ToObject() 在启用 latebinding 编译器选项时无法调用。这一问题已得到修复。
  • -
  • 修正了未类型化 STATIC LOCAL 的内部编译器错误。
  • -
  • 修正了别名表达式的一个问题。
  • -
  • 索引 PSZ 值不再受 /az 编译器选项的影响
  • -
    - 宏编译器 - -
  • 修正了一些别名表达式的问题
  • -
  • 宏编译器现在能检测到您在自己的代码中重载内置函数,不再抛出 “方法不明确 ”异常,而是选择您代码中的函数,而不是 X# 运行时中定义的函数。
  • -
    - 运行时 - -
  • 修正了 Directory() 函数中的几个问题
  • -
  • 修复了 PSZ 值索引问题
  • -
  • 在错误对象上添加了 StackTrace 属性,这样在 BEGIN SEQUENCE 中捕获的错误也会有堆栈信息。
  • -
  • 修正了与 NaN、PositiveInfinity 等 “特殊 ”浮点数值和 ToString() 有关的问题
  • -
  • 修正了参数为 null 的 RddSetDefault() 的一个问题
  • -
  • DbInfo(DBI_RDD_LIST) 未返回值。这一问题已得到修复。
  • -
  • 我们更新了许多语言资源,此外,Error:ToString() 现在使用语言资源来显示 “参数 ”和 “说明 ”等标题。
  • -
  • 低级文件错误现在包括调用堆栈
  • -
  • 修正了 AsHexString() 中的一些问题
  • -
  • DosErrString() 不再从语言字符串表中获取信息。这些信息以及 XSharp.VOErrors 枚举中的相关成员已被删除。
  • -
  • 添加了土耳其语资源。
  • -
    - RDD 系统 - -
  • 修复 FPT 文件中的锁定问题
  • -
  • 修复了 OrdKeyCount() 和过滤器、作用域以及 SetDeleted() 设置中的若干问题
  • -
  • 有些 DBF 文件在不支持小数的字段类型的字段定义的 “小数 ”字节中有一个值。这导致了一些问题。现在这些小数将被忽略。
  • -
  • 在未作更改的情况下打开和关闭 DBF 会更新时间戳。这一问题已得到修复。
  • -
  • 修复了 Pack() 和 Zap() 中的问题
  • -
  • 修正了一个意外更新自定义索引的问题。
  • -
  • 修正了 OrdKeyCount() 与过滤器、SetDeleted() 和作用域结合使用时的若干问题。
  • -
    - VO SDK 类 - -
  • 现在,大多数程序库在编译时都禁用了 “后期绑定 ”功能,以提高性能。
    为了帮助实现这一点,我们添加了一些类型化属性,例如 SqlStatement:__Connection 类型为 SQLConnection.
  • -
    - Visual Studio 集成 - -
  • 修复了 Brace 匹配代码中的一个问题
  • -
  • 改进关键字的 Brace 匹配。新增了多个 BEGIN ... END 结构,以及 DO CASE 内的 CASE 语句和 SWITCH、RECOVER、FINALLY、ELSE、ELSEIF 和 OTHERWISE 语句。
  • -
  • 修复在引用已卸载或不可用时添加和删除引用的问题。
  • -
    - VOXPorter - -
  • 在导出到 XSharp 时,程序现在可以注释、取消注释和删除 VO 代码中的源代码行。
    您必须在行尾添加注释。支持以下注释:
  • -
    - // VXP-COM : comments the line when exporting it
    // VXP-UNC : uncomments the line
    // VXP-DEL : deletes the line contents

    示例:
    // METHOD ThisMethodDoesNotGetDefinedInVOcode() // VXP-UNC
    // RETURN NIL // VXP-UNC
    - - Changes in 2.0.3.0 (Bandol RC3) - 编译器 - -
  • 选择 /vo2 时,STRING 类型的 STATIC LOCALs 的代码生成不会将变量初始化为空字符串。我们还改进了用编译时常数初始化 STATIC LOCAL 时的代码生成。
  • -
  • 为了支持通过引用传递给函数/方法的变量,我们现在将在函数/方法结束时将局部变量分配回参数数组。
  • -
  • 如果您将一个枚举的值赋值给另一个枚举的变量,编译器不会抱怨。这一问题已得到解决。
  • -
  • 添加了对 FoxPro '=' 赋值操作符的支持。其他方言也允许使用赋值操作符,但在其他方言中会产生警告。
  • -
  • 无法识别 BEGIN NAMESPACE ... END NAMESPACE 中的 Xbase++ 类。这一问题已得到修复。
  • -
  • WITH 块内的语句不再局限于赋值表达式和方法调用。现在,您可以在 WITH 代码块内的任何地方使用 WITH 语法来表达表达式。如果编译器无法找到 WITH 变量,则会输出一条新的错误信息 (XS9082)
  • -
  • 更新了别名表达式规则,以确保复合表达式正确使用括号。
  • -
  • __DEBUG__ 宏并非总是能正确设置。我们更改了设置该宏的算法。当 DEBUG 定义被设置后,该宏就会被定义。 如果设置了 NDEBUG 定义,则没有定义该宏。如果两个定义都不存在,则不设置 __DEBUG__。
  • -
  • 编译器允许您在字符串和逻辑类型的变量/表达式之间使用 “+”运算符。现在这已被标记为错误。
  • -
    - 宏编译器 - -
  • 修正了在解析与关键字或关键字缩写(如 DATE 和 CODE)相同的字段名以及与内置函数名(如 SET)相同的字段名时出现的问题
  • -
  • 修正了一个问题,即使用别名前缀求值的复杂表达式无法正确求值。
  • -
  • 宏编译器根据运行时的方言选项进行初始化,以启用/禁用某些行为。
  • -
  • 在 FoxPro 方言中运行时,宏编译器现在可以识别用于工作区访问和 memvar 访问的“. ”操作符。
  • -
    - 运行时 - -
  • 已添加函数 FieldPutBytes() 和 FieldGetBytes()
  • -
  • 添加了函数 ShowArray()
  • -
  • 添加了几个缺失的定义,如 MAX_ALLOC 和 ASC_A。
  • -
  • 已添加可接受 BYTE[] 参数的 Crypt() 重载
  • -
  • DataObject 类(XPP 方言)的 ClassDescribe() 方法现在包括动态添加的属性和方法。
  • -
  • 修正了 MemVars 的 RELEASE 命令的一个问题。这也会释放在当前函数/方法之外定义的变量。
  • -
  • 现在,FoxPro 方言与其他方言在 RELEASE 命令的行为上也有区别。
    FoxPro 完全删除变量,而其他方言则将变量值设为 NIL。
  • -
  • 在 FoxPro 方言中,新的 PRIVATE 内存变量初始化为 FALSE。在其他方言中,它们被初始化为 NIL。
  • -
  • 当写入一种类型的数值,而读取时预期是另一种类型的数值时,RuntimeState 中的某些数值属性会出现问题。这一问题已得到修复。
  • -
  • 修正了宏编译代码块返回 NIL 值的问题。
  • -
  • DbClearScope() 的参数现在是可选的了
  • -
  • USUAL 类型现在可以在 PTR 和 LONG/INT64 类型的值之间进行比较,PTR 值被转换为相应的整数类型,然后进行整数比较。
  • -
  • USUAL 类型现在还允许在任何类型和 NIL 之间进行比较。
  • -
  • 不再检查从 USUAL 值到 SHORT、WORD、BYTE 和 SBYTE 的转换是否与 VO 兼容。
  • -
    - RDD 系统 - -
  • 在 DBFFPT 中添加了对不同块大小的支持。
  • -
  • DBFFPT 现在允许从用户代码中覆盖块大小(创建时)。请注意,块大小小于 32 字节时,FPT 无法在 Visual FoxPro 中打开。
  • -
  • 已添加对读取各种 Flexfile 备注字段类型(包括数组)的支持。
  • -
  • 已添加对写入 FPT 文件的支持
  • -
  • 创建 FPT 文件时,我们现在也会写入 FlexFile 头文件。请注意,我们的 FPT 驱动程序不支持像 FlexFile 那样对删除的块进行 “记录回收”。我们也只支持向 FPT 文件写入 STRING 值和 Byte[] 值。
  • -
  • 已添加对使用 COLLATE 选项创建的 Visual FoxPro CDX 文件的支持。RDD dll 现在包含校对和 CodePage 所有可能组合的校对表。
  • -
  • 已添加对带有 NIL 值的 USUAL 和比较运算符(>, >=, <, <=)的支持。除了 >= 和 <= 操作符在比较的两边都是 NIL 时返回 TRUE 外,这些操作符都返回 FALSE。
  • -
  • 我们公开了多个与 Advantage 相关的函数和类型。此外,我们还定义了 AdsConnect60() 函数。我们没有为 Ace32 和 Ace64 中的所有可用函数创建函数,只创建了 RDD 中需要的函数。
  • -
  • 如果您缺少 ACE 类中的某个函数,请告知我们。现在,Ace32 和 Ace64 类或 ACEUNPUB32 或 ACEUNPUB64 类中的所有功能都应可用并可访问。
  • -
  • ADS RDD 返回的逻辑字段值不正确。
  • -
  • 修复了 CDX 索引、作用域和过滤器中跳过的一些问题。
  • -
  • 对 DBFCDX 执行两次 DbGoTop() 或两次 DbGoBottom() 会混淆 RDD。这一问题已得到修复。
  • -
  • 修复了空 DBF 文件中 Seeking() 的一个问题
  • -
  • Advantage RDD 中 STRING 字段的 FieldPut 现在会在赋值前将字段截断到最大长度
  • -
  • 修正了 UNIQUE CDX 索引的一个问题。
  • -
  • 现在,您可以使用 DBCreate() 创建与 VFP 兼容的 DBF 文件。为此,请使用以下字段类型(除常规 CDLMN 外):
  • -
    - WBlob
    YCurrency
    BDouble
    TDateTime
    FFloat
    GGeneral
    IInteger
    PPicture
    QVarbinary
    VVarchar
    - 特殊字段标志可通过在类型后添加后缀来表示: - "0" = Nullable
    "B" = Binary
    "+" = AutoIncrement
    - 这样就创建了一个null日期:“D0”,并创建了一个自动递增整数 “I+”。 - 自动递增列的初始化计数器从 1 开始,步长为 1。 您可以通过调用 DbFieldInfo 来更改: - DbFieldInfo(DBS_COUNTER, 1, 100) // 将字段 1 的计数器设置为 100
            DbFieldInfo(DBS_STEP, 1, 2)   // 将字段 1 的步长设置为 2
    - -
  • 修复了在共享模式下打开 FPT 文件时的锁定问题
  • -
  • 修复了 DBFCDX RDD 中与 OrderKeyCount() 以及 Scopes 和 SetDeleted() 的各种设置有关的若干问题。
  • -
    - VO SDK 类 - -
  • 修正了 DateTimePicker 类中只分配时间值时的一个问题。
  • -
  • 对 System 和 RDD 类进行了一些清理,现在可以在 AnyCPU 模式下编译。这意味着你可以在 64 位程序中使用 DbServer 类!
    这两个库的项目也不再启用 “后期绑定 ”编译器选项。这些库中仍有一些后期绑定代码,但这些代码现在使用显式后期绑定调用,如 Send()、IVarGet() 和 IVarPut()。
  • -
  • 由于 __DEBUG__ 处理方式的改变,某些 SDK 程序集没有得到更好的优化。
  • -
    - Visual Studio 集成 - -
  • 在编辑器中添加了对 WITH ... END WITH 块的支持
  • -
  • 生成本地资源(RC 文件)时,BuildSystem 现在会设置 #define __VERSION__。这将包含 XSharp.Build.DLL 的文件版本号,但不带点。(2.1.0.0 将被写成 “2100”)。
  • -
  • VS 帮助菜单中的 XSharp 帮助项目现在可打开本地帮助 (CHM) 文件
  • -
  • 修复了 WCF service 模板中的一个问题
  • -
  • 对使用属性的代码的多行缩进进行更正
  • -
  • 新事件处理程序的代码生成现在包括 RETURN 语句,即使 VS 没有在语句列表中添加该语句也是如此
  • -
  • 已禁用 intellisense 选项 “在每个字符后显示完成列表”,因为它会对性能产生负面影响,而且还会插入前面带有 @@ 字符的关键字。
  • -
  • 对 Windows 窗体编辑器的代码分析进行了几处修改。现在,注释和区域以及类的属性都可以保存和重新生成。此外,还修正了项目资源中图像的代码生成,以及同一程序集中声明的静态字段和枚举器的解析。
    请注意 :如果使用的值来自与表单定义在同一程序集中的类型,则需要先对程序集进行(重新)编译,然后才能在 Windows 窗体编辑器中成功打开表单。
  • -
  • 现在,从 Windows 窗体编辑器生成的新方法将带有结尾 RETURN 语句。
  • -
  • 我们对源代码编辑器中 QuickInfo 的显示方式进行了一些改进。
  • -
    - 工具 - -
  • VOXporter 现在也可导出 VERSIONINFO 资源
  • -
    - - Changes in 2.0.2.0 (Bandol RC 2) - 编译器 - -
  • 文件范围的 PUBLIC 声明(用于 MEMVAR)被错误地解析为 GLOBAL。因此,它们被初始化为 NIL,而不是 FALSE。现在它们被正确生成为 public Memvars。memvars 的创建和初始化是在程序集中的 Init3 程序运行后进行的。
  • -
  • 实例变量初始化器现在可以引用其他字段,并允许使用 SELF 关键字。但仍不建议这样做。字段初始化的顺序就是它们在源代码中出现的顺序。因此,请确保在代码中以正确的顺序定义字段初始化器。
  • -
  • 启用 /vo2 时,AUTO 属性现在也以空字符串初始化。
  • -
  • 编译器允许您定义接口的实例变量。这些变量在代码生成过程中被忽略。现在,当编译器检测到接口上的字段时,会产生一条错误信息。
  • -
  • 当编译器检测到 2 个类型不同的模糊标识符(例如同名的 LOCAL 和 CLASS)时,错误信息会清楚地显示每个标识符的类型。
  • -
  • 修正了预处理器中的一个异常
  • -
    - -
  • 添加了对 FoxPro 运行时 DLL 的支持(译者注:该 DLL 指 XSharp.VFP.DLL)。
  • -
    - -
  • 不再支持 ANY 关键字(USUAL 的别名)。
  • -
  • 出现在 COLON(“:”)、DOT(“.”)或 ALIAS (->) 操作符之后的关键字不再作为关键字解析,而是作为标识符解析。这将解决访问 DateTime 类的 Date 属性等代码的解析问题。
  • -
  • 我们增加了对 WITH .. END WITH 语句块的支持:

    LOCAL oPerson as Person
    oPerson := Person{}
    WITH oPerson
      :FirstName := "John"
      :LastName := "Doe"
      :Speak()
    END WITH
    您也可以使用 DOT (.) 作为名称的前缀。WITH ... ENDWITH 中唯一允许使用的表达式是赋值和方法调用(如上所示)
  • -
  • 已添加对 FoxPro LPARAMETERS 语句的支持。请注意,函数或过程只能有 PARAMETERS 关键字或 LPARAMETERS 关键字或已声明的参数(名称位于 FUNCTION/PROCEDURE 行的括号之间)
  • -
  • 已添加对 FoxPro THIS 关键字和 .NULL. 关键字
  • -
  • 我们新增了对 FoxPro 日期字面格式 {^2019-06-21} 和 FoxPro 日期时间字面格式 {^2019-06-21 23:59:59} 的支持。
  • -
  • Core 方言现在也支持日期字面量和 DateTime 字面量。在 Core 方言中,日期字面量将表示为 DateTime 值。
  • -
  • 标准头文件 xsharpdefs.xh 现在有条件地包含了 Xbase++ 方言和 FoxPro 方言的头文件。这些头文件目前没有太多内容,但在未来几个月内会有所改变。
  • -
  • 如果编译器检测到包含了某些头文件,但这些头文件中的定义在引用程序集中也可以作为常量使用,那么编译器就会发出警告,并跳过包含文件 (XS9081)
  • -
  • 编译器现在支持隐式函数 _ARGS()。它将被解析为参数数组,通过 clipper 调用约定传递给函数/方法。这可用于将一个函数/方法的所有参数传递给另一个函数/方法。
  • -
  • 我们为 FoxPro 方言添加了 TEXT ... ENDTEXT 命令。TEXT 和 ENDTEXT 行之间的字符串将被传递到一个特殊的运行时函数 __TextSupport 中,该函数将接收 5 个参数:string、merge、NoShow、Flags 和 Pretext 参数。目前,您必须自己定义该函数。
  • -
  • 我们为所有还没有结尾关键字的实体类型添加了结尾关键字支持。新的结束关键字是可选的。它们列于下表。FoxPro ENDPROC 和 ENDFUNC 关键字将通过 UDC 映射到 END PROCEDURE 和 END FUNCTION。
  • -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - 开始 - - 结束 -
    - PROCEDURE - - END PROCEDURE -
    - PROC - - END PROC -
    - FUNCTION - - END FUNCTION -
    - FUNC - - END FUNC -
    - METHOD - - END METHOD -
    - ASSIGN - - END ASSIGN -
    - ACCESS - - END ACCESS -
    - VOSTRUCT - - END VOSTRUCT -
    - UNION - - END UNION -
    - -
  • 编译器现在会在 RuntimeState 的 Dialect 属性中注册 main 的方言(仅限非 Core 方言)
  • -
    - 宏编译器 - -
  • 修正了转义字面字符串的一个问题
  • -
    - -
  • 修正了隐式收缩转换的一个问题
  • -
  • 修正了宏编译别名操作 (Customer)->&fieldName 的一个问题
  • -
    - 运行时 - -
  • 修正了 Round() 函数中的一个问题。
  • -
  • 修正了 ExecName() 函数中的一个问题。
  • -
  • 已添加 FoxPro 运行时 DLL。
  • -
  • 在 Xbase++ 方言运行时添加了 XML 支持功能
  • -
  • 在 Xbase++ 方言运行时添加了对动态类创建的支持。
  • -
  • 修正了 Push-Pop 工作区代码中的别名表达式问题。
  • -
  • 将 NULL 转换为符号会导致异常。这一问题已得到修复。
  • -
    - RDD 系统 - -
  • 修复了 ADS RDD 中的几个问题
  • -
  • 现在包含 DBFCDX RDD
  • -
  • 现在包含 DBFVFP RDD。该 RDD 可用于访问具有 DBF/FPT/CDX 扩展名的文件,并支持 Visual Foxpro 字段类型,如 Integer、Double、日期时间和 VarChar。读取文件应完全支持。除 Picture 和 General 格式以及自增整数字段外,写入文件也应正常工作。您还可以使用 RDD 打开 VFP 的各种 “定义”文件,如项目、表单和报表。RDD “了解 ”索引和备忘录的不同扩展名。您还可以将 DBC 文件作为普通表打开。在未来版本中,我们将支持 VFP 数据库功能。
  • -
    - Visual Studio 集成 - -
  • 现在,您可以指定多行语句应在第二行及以后各行缩进。
  • -
  • BEGIN NAMESPACE ... END NAMESPACE 中函数的类型查找不包括该命名空间中的类型。
  • -
  • 为 Xbase++ 方言中的 INLINE 方法启动 intellisense 功能
  • -
  • 修正了 intellisense 中的几个问题
  • -
  • 改进了 FOREACH 循环中声明的 VAR 关键字的 intellisense 功能
  • -
  • 其他几项(较小的)改进。
  • -
    - 工具 - -
  • VOXporter 现在会在 RC 文件中写入 DEFINES,而不再是字面值。
  • -
  • VOXporter:修正文件名中包含无效字符的模块名称
  • -
    - - - - Changes in 2.0.1.0 (Bandol RC 1) - 编译器 - -
  • 添加了对所谓 IF 模式表达式语法的支持,该语法由 IS 测试和变量赋值组成,前缀为 VAR 关键字:
    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ENDIF

    表达式中引入的变量 oFoo 只在 IF 语句中可见。
    当然,您也可以在其他地方使用该模式,如 ELSEIF 块、CASE 语句、WHILE 表达式等:

    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ELSEIF x is Bar VAR oBar
      ? oBar:DoSomethingElse()
    ENDIF
  • -
  • 修正了方法修饰符和泛型方法的一个问题
  • -
  • 修正了分部类的大小写和析构函数不同的问题
  • -
  • 修正了使用 CLIPPER 调用约定的接口和方法的一个问题
  • -
  • 当 ACCESS 或 ASSIGN 方法包含类型参数和/或约束子句时,编译器现在会生成错误 (9077)
  • -
  • 修正了带有特定二进制数值的 DEFINE 的问题。此外,在计算 DEFINE 值的数字运算结果时,现在总是进行溢出检查。
  • -
  • 当常量值与小于 32 位的数值相加或相减时,编译器会将结果视为 32 位。这有时会迫使你在代码中使用转置。有了这一变化,就不再需要这种转换了。
  • -
  • 编译器允许您连接非字符串值和字符串,并自动在非字符串上调用 ToString()。现在已不再可能。现在,编译器在检测到这种情况时会生成一个错误 (9078)。
  • -
  • 我们已在编译器中添加了错误捕获代码,该代码应将内部错误导向编译器错误 XS9999.如果您发现此类错误,请通知我们。
  • -
  • 字面字符串的 DIM 数组现在可以正确初始化。
  • -
  • 使用共享编译器在不同方言之间切换时存在一个问题。它有时不再能检测到特定方言的关键字。这一问题已得到修复。
  • -
  • 修正了一个问题,在该问题中,不正确的代码会产生错误 “Failure to emit assembly”。
  • -
  • 修正了代码中使用 _CAST 将 32 位值转换为 16 位值的问题
  • -
  • 修正了重载索引属性的一个问题,即子类中的索引参数与超类中的索引参数类型不同。
  • -
  • 更改了若干别名操作的实现(ALIAS->FIELD 和 (ALIAS)->(Expression))
  • -
  • 更改了扩展字符串的预处理器处理 ( (<token>) )
  • -
  • Roslyn 代码没有将某些变量标记为 “已赋值但未读取”,以便与旧的 C# 编译器兼容。现在,我们将这些赋值标记为警告。这可能会在您的代码中产生许多以前未检测到的警告。
    为了支持这一点,我们收到了一些请求,希望在编译器中 “开放” 对基于 1 的索引的支持。过去,编译器只允许对 System.Array 类型或 XBase ARRAY 类型的变量进行基于 1 的索引。
    我们现在为运行时添加了几个接口。如果你的类型实现了这些接口之一,那么编译器将识别这一点,并允许你在代码中使用基于 1 的索引,然后编译器将自动从数字索引参数中减去 1。XSharp ARRAY 类型和 ARRAY OF 类型现在也实现了这些接口(之一)。
    这些接口是:
       INTERFACE IIndexer
           PUBLIC PROPERTY SELF[index PARAMS INT[]] AS USUAL GET SET
       END INTERFACE

       INTERFACE IIndexedProperties
           PROPERTY SELF[index AS INT   ] AS USUAL GET SET
           PROPERTY SELF[name  AS STRING] AS USUAL GET SET
       END INTERFACE
      INTERFACE INamedIndexer
         PUBLIC PROPERTY SELF[index AS INT, name AS STRING] AS USUAL GET SET
      END INTERFACE
  • -
    - 运行时 - -
  • 修正了 OrderInfo() 函数中的一些问题
  • -
  • 修正了运行时中 DB..() 函数的几个问题
  • -
  • 修正了宏编译器的几个问题
  • -
  • 修正了在对方法的后期绑定调用中处理默认参数的问题
  • -
  • 改进了后期绑定代码中缺少方法和/或属性时的错误信息。
  • -
  • Select() 函数会更改当前工作区。现已修复。
  • -
  • 将 USUAL 转换为 STRING 不会像 VO 那样抛出相同的异常。它总是在 USUAL 上调用 ToString()。现在的行为与 VO 相同。
  • -
  • F_ERROR 现在已被定义为 PTR,而不再是数值
  • -
  • CreateInstance 现在还能查找命名空间中定义的类
  • -
  • 修复在后期绑定代码中丢失参数的问题。还添加了对在后期绑定代码中调用重载方法和构造函数的(有限)支持。
  • -
  • 修正了 TransForm() 和几个 Str() 函数的问题。
  • -
  • XSharp.Core 现在已完全编译为安全代码。
  • -
  • 修正了一个关于后期绑定 assigns 和 access 的问题
  • -
  • NIL<-> STRING 比较现在与 Visual Objects 兼容
  • -
  • 修正了 AEval() 和参数缺失的问题
  • -
  • 已添加 Set() 函数。使用 _SET 定义的头文件时请注意。Harbour、Xbase++ 和 VO/Vulcan 中的定义存在细微差别。
    我们建议不要使用头文件中的定义,而是使用 X# 运行时 DLL 中定义的定义
  • -
  • 更改了编译器用于别名操作的函数的实现方式
  • -
    - RDD 系统 - -
  • 已添加对 DBF character 字段的支持,最大可达 64K。
  • -
  • 实施 DBFCDX RDD
  • -
  • 修复了几个与 DBFNTX RDD 有关的问题
  • -
  • DBF RDD 对 Ansi DBF 文件使用了不正确的锁定方案。现在它使用与 VO 和 Vulcan 相同的方案。
  • -
  • 宏编译索引表达式不属于 _CodeBlock 类型,也不属于 RuntimeCodeBlock 类型(RuntimeCodeblock 被封装在 _CodeBlock 对象内)。
    这样,在将这些表达式存储到 USUAL
  • -
    - Visual Studio 集成 - -
  • 修正了键入 VAR 表达式时可能出现的异常
  • -
  • 在项目系统备份项目文件时,我们会确保在写入或删除现有文件前清除只读标记。
  • -
  • 从 C++ 项目读取 intellisense 数据可能会使 intellisense 引擎陷入无限循环。这一问题已得到修复。
  • -
  • 现在,对 Form.Designer.prg 的更改会立即写入磁盘,以确保在窗体编辑器窗口中按下 “运行” 或 “调试” 键时,窗体的更改会被重新编译。
  • -
  • 改进了对 VAR 关键字的 intellisense 支持。
  • -
  • 在 “项目属性 ”页面上添加了对 FoxPro 的支持,以便为 FoxPro 的编译器和运行时更改做好准备。
  • -
  • .CH 文件现在也能在 Visual Studio 中被识别为 “X#”文件。
  • -
  • 现在,您可以控制从 “完成列表 ”中选择条目的字符。例如,DOT(.) 和 COLON(:) 现在也可以选择当前选定的元素。完整列表请参见工具-选项-文本编辑器-XSharp-Intellisense 页面。
  • -
  • 添加到项目中的程序集在下一次加载项目时才会被正确解析。这一问题已得到修复。
  • -
  • 修复了为 Windows 表单编辑器提供数据的 codedom 分析器中的一个问题。现在可以从同一程序集中的另一个窗体继承窗体。当然,您必须先编译项目。
  • -
  • 现在,.CH 扩展名也注册为 X# 项目系统的相关扩展名。
  • -
  • 更改了 #ifdef 命令的自动缩进
  • -
  • 修正了在加载带有 COM 引用的项目文件时可能出现的异常。
  • -
  • 已为 XPP 和 VO Dialect 中的类库添加模板
  • -
  • 有时会在注释区域内触发 intellisense 的类型查找。这一问题已得到修复。
  • -
    - 工具 - -
  • VOXPorter 在创建委托时未移除调用约定。现已修复
  • -
  • VOXporter 有时会生成包含大量重复资源项目的项目文件。这一问题已得到修复。
  • -
  • VOXporter 现在会用“@@”标记与某个新关键字冲突的前缀标识符。
  • -
  • 缩短了 VOXporter 欢迎屏幕的延迟时间。
  • -
    - - - Changes in 2.0.0.9 (Bandol Beta 9) - 编译器 - -
  • Lexer(编译器中识别关键字和文字等的部分)已重写,速度略有加快。
  • -
  • 编译器现在支持数字字面的数字分隔符。因此,您现在可以将 100 万写成
    1_000_000
  • -
    - -
  • 修正了一个问题,即即使选择了编译器选项 -vo2,静态局部变量也不会以 "" 初始化
  • -
  • 使用预处理器宏(如 __XSHARP_RT__ )的 #ifdef 命令无法正常工作。
  • -
  • Xbase++ 方言现在也支持 “普通 ”类语法。
  • -
  • 我们在 Beta 8 中更改了 “入口点 ”算法。现在已经恢复,而且 -main 命令行选项现在也能再次使用。Start方法的 “主体 ”现在封装在一个匿名函数中。
  • -
    - -
  • 重复的包含文件不再产生错误,而是发出警告
  • -
  • 修复默认参数值后缀为 “L ”或 “U ”的问题
  • -
  • 为使用 clipper 调用约定的方法/函数指定默认参数值时添加了编译器错误
  • -
  • 当指定 -vo2 时,STRING 的 DIM 数组未用 "" 初始化。该问题已得到修复。
  • -
  • 新增了对 Dbase 风格内存变量(MEMVAR、PUBLIC、PRIVATE、PARAMETERS)的支持。更多信息,请参阅帮助文件中的  MEMVAR 这仅适用于某些方言,还需要使用 /memvar 命令行选项
  • -
  • 新增了对未声明变量的支持(不建议使用!)。这仅适用于某些方言,需要使用 /memvar 和 /undeclared 命令行选项
  • -
  • 修正了 USUAL 变量和 STRING 变量之间的比较问题
  • -
  • 修正了分部类的一个问题,在不同的声明中,类名的大小写不同
  • -
  • 修正了带有 L 或 U 后缀的数字默认参数的一个问题
  • -
  • 修正了多行注释样式下单行注释后的续行符(分号)问题。
  • -
  • 修正了包含 YIELD 句的方法与编译器选项 /vo9 结合使用时的问题
  • -
  • 当泛型方法上缺少可见性修饰符时,该方法会被创建为 private 方法。这一问题已得到修复。
  • -
  • 在 XSharp.RT 和 XSharp.Core 中的重载函数之间进行选择时,有时会选择 XSharp.RT 程序集中的函数,尽管 XSharp.Core 中的重载效果更好
  • -
  • 如果 CASE 语句中没有 CASE 块,只有一个 OTHERWISE 块,编译器就会崩溃。该问题已得到修复,并添加了关于空 CASE 语句的警告。
  • -
    - 运行时 - -
  • 对宏编译器进行了多项修改,如十六进制字面的解析、参数的大小写敏感性(不再区分大小写)以及对函数重载的有限支持。
  • -
  • 添加了几个缺失的函数,如 _Quit()、
  • -
  • 几个 Ord..() 函数的返回值不正确。现已修复。
  • -
  • 修正了驱动器根目录 CurDir() 的一个问题
  • -
  • 修正了在调用 Send() 时单个参数值为 NULL_OBJECT 的问题。
  • -
  • 解决了 DiskFree() 和 DiskSpace() 参数不正确的问题
  • -
  • MemoRead() 和 MemoWrit() 以及 FRead...() 和 FWrite...() 现在与 VO Runtime 中的函数一样尊重 SetAnsi() 设置。
  • -
  • 我们新增了 2 个用于读/写二进制文件的函数: MemoReadBinary() 和 MemoWritBinary()
  • -
  • 并非所有 DBOI_ enum 值都与 Vulcan 中的值相同。这个问题已经解决。
  • -
  • SetDecimalSep() 和 SetThousandSep() 现在还能设置当前文化中的数字分隔符。
  • -
  • USUAL -> STRING 转换现在调用 AsString()
  • -
    - -
  • 新增了对 Dbase 风格动态内存变量(MEMVAR、PUBLIC、PRIVATE、PARAMETERS)的支持。更多信息,请参阅帮助文件中的 内存变量
  • -
  • 对于 DateTIme 类型的 USUAL,IsDate() 函数现在也返回 TRUE。另外还有一个单独的 IsDateTime() 函数。我们还添加了 IsFractional()(FLOAT 或 DECIMAL)和 IsInteger(LONG 或 INT64)以及 IsInt64()。
  • -
  • 在 Error 类中添加了缺失的 Cargo slot。同时改进了 Error:ToString() 方法。
  • -
  • 修复 W2String() 中的问题
  • -
  • 还有更多微小的变化。
  • -
    - Visual Studio 集成 - -
  • 我们在 “项目属性” 对话框中添加了一个新的标签页: 方言。其中包含特定方言的语言选项。
  • -
  • 将 “生成”选项页面(与配置相关)中的 2 个选项移至 “语言”页面(与生成无关),因为这样更合理:
  • - -
  • Include Path
  • -
  • NoStdDef
  • -
    -
    - -
  • 我们还在语言页面上添加了一个项目属性,用于指定其他标准头文件(而不是 XSharpDefs.xh)。
  • -
  • 在 intellisense 中显示的 XSharp.__Array 类型的名称是错误的
  • -
  • 我们在 “项目属性 ”对话页面上添加了条目,以启用 MEMVAR 支持和启用未声明变量
  • -
  • 修正了 CodeDom 提供程序(Windows 窗体编辑器使用)中的一个问题,即在写回源代码时,带有数组类型的字段会丢失数组括号。
  • -
  • 从窗口窗体编辑器写入更改时,我们不再写入磁盘,而是写入打开的(有时是不可见的).designer.prg 窗口。这样就可以避免在 Visual Studio 外部更改 .designer.prg 文件时出现警告信息。
  • -
  • 修正了源代码解析中标识符名称以“@@”开头的问题
  • -
  • 调试器将 UINT64 显示为 ARRAY 的类型名。现已修复。
  • -
  • 在 Windows 窗体编辑器中重新命名窗体时,对带有单独 .designer.prg 的窗体不起作用。这一问题已得到修复。
  • -
  • 修正了一个(非常老的)问题,即 xsproj 文件中的 OutPutPath 属性有时会设置为 $(OutputPath)。
  • -
  • 修正了编辑器中出现的空源文件或头文件异常。
  • -
  • 修正了为无错误代码的错误创建错误列表时出现的异常
  • -
  • 在编辑器中注释单行时,现在将始终使用 // 注释格式
  • -
    - 工具 - -
  • 本版本无任何更改。
  • -
    - - - Changes in 2.0.0.8 (Bandol Beta 8) - 编译器 - -
  • 编译器源代码已升级到Roslyn 2.10(C# 7.3)。因此,出现了一些新的编译器选项,比如 /refout,并且我们还支持"PRIVATE PROTECTED"修饰符的组合,该修饰符将类型成员定义为对同一程序集中的子类可访问,但对其他程序集中的子类不可访问。
  • -
  • 我们添加了对 Xbase++ 类声明的支持。请参阅 Xbase++ 类声明主题,了解有关语法、支持和不支持的更多信息。
  • -
  • 我们增加了对使用 &Identifier 语法的简单宏的支持
  • -
  • 我们增加了对后期绑定属性访问的支持:
  • - -
  • <Expression>:&<Identifier> 语法。
    这相当于 IVarGet(<Expression>,<Identifier>)。
  • -
  • <Expression>:&(<Expression2>) 语法。
    这相当于 IVarGet(<Expression>,<Expression2>)。
  • -
  • 这两者也可用于赋值,并将被翻译为 IVarPut:
    <Expression>:&<Identifier> := <Value>
    这就变成了 IVarPut(<Expression>,<Identifier>,<Value>)。
  • -
  • 即使未启用 “延迟绑定”,所有这些功能也能正常工作。
  • -
    -
    - -
  • 我们添加了一个新的编译器选项 /stddefs,允许您更改标准头文件(默认为 XSharpDefs.xh)。
  • -
  • 我们添加了一个新的预处理器匹配标记 <#idMarker>,它可以匹配单个标记(第一个空格符之前的所有字符)
  • -
  • 现在选择一种方言后,编译器将自动添加一些编译器宏。VO 方言声明了__VO__宏,Vulcan 方言声明了__VULCAN__宏,harbour 方言声明了__HARBOUR__宏,Xbase++ 方言声明了__XPP__宏。
  • -
  • 根据 X# 运行时编译时,也将定义__XSHARP_RT__宏。
  • -
  • 我们添加了一个新的警告,当您将一个不带 “ref ”修饰符(或 @ 前缀)的参数传递给一个方法或函数时,该方法或函数希望该参数为引用参数或 out 参数。
  • -
  • 我们还添加了一个警告,当您从较大的 integral 类型赋值到较小的 integral 类型时,该警告将显示,以提醒您注意可能出现的溢出问题。
  • -
    - 运行时 - -
  • 此版本包含一个新的更快的宏编译器。它应与 VO 宏编译器完全兼容。宏编译器尚未提供某些 .Net 功能。
  • -
  • 我们将大部分通用 XBase 代码移到了 XSharp.RT.DLL 中。XSharp.VO.DLL 现在只包含 VO 专用代码。我们还为 XPP 添加了 XSharp.XPP.DLL
  • -
  • 修复与 FRead3()、FWrite3() 和 FReadStr 有关的 Ansi2OEM 问题
  • -
  • 添加了丢失的函数 EnableLBOptimizations() 和属性 Array:Count
  • -
  • 修复了使用 CodeBlock 值进行延迟绑定分配的问题。
  • -
  • 修正了 AScan() 和 AEval() 参数缺失的问题
  • -
  • 更改了 DirChange()、DirMake() 和 DirRemove() 的错误返回代码
  • -
  • Send() 会 “吞下 ”错误。现已修复
  • -
  • 修正了为多维数组赋值的问题
  • -
  • 修正了使用 CreateInstance() 创建对象时,对象不在 “global”命名空间中的问题
  • -
  • 修复了 RDD 系统和支持函数中的若干问题。
  • -
  • 修正了后期绑定支持中的几个问题,如 IsMethod、IsAccess、IVarPut、IVarPutSelf 等。
  • -
  • 修正了 TransForm() 的几个问题
  • -
  • 现在,对包含整数的常项进行整除时,根据主程序的编译器设置,要么返回整数,要么返回小数。
  • -
  • 我们修复了后期绑定调用中的几个转换问题
  • -
  • 我们更正了 Val() 和 Str() 函数的几个问题。
  • -
  • DATE 和 FLOAT 的内部类型名称已改为 __Date 和 __Float。如果您依赖这些类型名称,请检查您的代码!
  • -
  • 如果运行时以发布模式编译,DebOut32 无法向调试终端输出数据。这一问题已得到修复。
  • -
    - Visual Studio 集成 - -
  • 修正了错误列表中 “当前项目” 的过滤问题
  • -
  • 局部变量的类型查找有时会失败。现已修复
  • -
  • 修正了可能在 VS 中导致异常的括号匹配问题
  • -
  • 修正了工具提示在 VS 中可能导致异常的问题
  • -
  • 修正了在 VS 中取消注释可能导致异常的问题
  • -
  • 在 VS 中添加的新引用并不总是包含在编辑器的类型搜索中。这一问题已得到修复。
  • -
  • 构造函数的成员原型现在包括类型名称和大括号
  • -
  • 我们已着手改进用 VAR 声明的变量的代码自动补全功能。
  • -
  • 我们已开始支持泛型类型成员的代码自动补全。这项工作尚未完成。
  • -
  • 不属于 X# 项目也不属于 Vulcan 项目的 PRG 文件现在也会在编辑器中着色。
  • -
    - 工具 - -
  • VulcanXPorter 总是调整引用的 VO 库,并忽略 “使用 X# 运行时 ”复选框
  • -
  • VOXPorter 现在有一个选项,可将 AEF 文件中引用的资源复制到项目的资源子文件夹中
  • -
  • VOXPorter 现在还会将 cavowed、cavofed 和 cavoded 模板文件复制到项目的属性文件夹中。
  • -
    - - - Changes in 2.0.0.7 (Bandol Beta 7) - 编译器 - -
  • 在调用带有 USUAL 参数的运行时函数时,编译器现在会自动优先选择带有 “传统 ”VO 类型的方法或函数,而不是带有增强 .Net 类型的方法或函数。例如,如果有两个重载,一个接收 byte[],另一个接收字符串,那么接收字符串的重载将优先于接收 byte[] 的重载。
  • -
  • 解决了 IIF() 表达式中的 .NOT. 表达式问题
  • -
  • 改进了调用表达式(如 String.Compare())的调试器断点生成功能
  • -
  • 修正了 #define 中定义的宏参数的预处理器错误。现在这些参数必须有正确的大小写。不同大小写的参数将不再被解析。
  • -
  • 修正了一个预处理器错误,该错误导致预处理器规则中的可选匹配模式重复出现。这个问题太复杂,无法在此详细解释 <g>。
  • -
  • 编译器为数组操作生成的代码现在使用 X# 运行时声明的新接口(见下文)。
  • -
    - 运行时 - -
  • 我们添加了几个缺失的函数,如 _GetCmdLine、Oem2AnsiA() 和 XSharpLoadLibrary。
  • -
  • 修复了 CreateInstance、IVarGet、IVarPut()、CtoDAnsi() 等程序中的问题。
  • -
  • 为 FRead4() 添加了 VO 兼容重载
  • -
  • 不再为空日期生成异常
  • -
  • Ferror() 并不总是返回文件操作的错误信息。现已修复
  • -
  • 我们添加了一个新的 FException() 函数,该函数可返回低级文件操作中发生的最后一次异常
  • -
  • 现在支持将包含 PTR 的 usual 转换为 LONG 或 DWORD
  • -
  • 新增了一些与数组处理相关的接口。编译器不再在代码中插入对 Array 的转换,而是根据索引参数的类型插入对这些接口之一的转换。USUAL 类型实现了 IIndexer 和 IIndexProperties,当该对象公开接口时,会将调用派发到通常的对象内部。在对 ARRAY OF <type> 使用 AEval 或 AScan 时,可使用这种方法对属性进行索引访问。
  • - -
  • XSharp.IIndexer
  • -
  • XSharp.INamedIndexer
  • -
  • XSharp.IIndexedProperties
  • -
    -
    - SDK 类 - -
  • 我们添加了来自 Paul Piko 的混合用户界面类(经 Paul 许可)
  • -
    - 工具 - -
  • Vulcan XPorter 现在还有一个选项,可将运行时和 SDK 引用替换为 X# 运行时引用
  • -
    - - - Changes in 2.0.0.6 (Bandol Beta 6) - 编译器 - -
  • 编译器有时仍会对编译器生成的未使用变量发出警告。这一问题已得到修复。
  • -
  • 编译器现在会发出尚未支持 #pragmas 的警告 (9006)
  • -
  • 添加了编译器宏 __FUNCTION__ ,它以原始格式返回当前函数/方法的名称。
  • -
  • 在 Core 方言中编译时,多维数组的字面子数组不再需要类型前缀
  • -
  • 修复了生成运行时程序集时出现的全局类名问题(这些程序集对全局类名有特殊约定)
  • -
  • 当接口中方法的调用约定与实现的调用约定(CLIPPER 与非 CLIPPER)不同时,编译器将产生一个新的错误 (9067)。
  • -
  • _DLL 函数和过程的调用约定现在是可选的,默认为 PASCAL (stdcall)
  • -
  • using 语句的命名空间别名并非在所有情况下都有效。
  • -
  • 现在,编译器会对错误使用 VIRTUAL 和 OVERRIDE 修饰符的代码生成错误。
  • -
  • 编译器曾因带有泛型参数的特定类型的不正确局部变量初始化器而抛出异常。现已修复。
  • -
  • 属性的 GET 或 SET 访问器上的可见性修饰符无法正常工作(INTERNAL、PRIVATE 等)。现已修复。
  • -
  • 编译器现在会以不同的方式处理 PSZ(_CAST,...) 和 PSZ(...)。当参数为字面字符串时,PSZ 只分配一次,并存储在程序集的 “PSZ 表 ”中。这个 PSZ 的生命周期就是应用程序的生命周期。出现这种情况时,将显示新的编译器警告 XS9068 。
    当参数是存储在局部或全局(或定义)中的字符串时,编译器无法知道 PSZ 的寿命。因此,编译器会使用 StringAlloc() 函数为 PSZ 分配内存。这样可以确保 PSZ 不会超出范围并被释放。如果您在应用程序中经常使用该函数,那么您可能会重复分配内存。我们建议您避免对 PSZ 使用施用和转换操作符,并通过手动分配和释放 PSZ 来控制 PSZ 变量的生命周期。对非字符串(数值或指针)进行 PSZ 转换时,只需调用 PSZ 构造函数,该构造函数将接收一个 intptr(Win32API 库中有多处使用此函数来处理 “特殊 ”PSZ 值)。
  • -
  • Vulcan 方言现在也支持命名参数。如果您的代码看起来像下面的代码,这可能会导致编译器错误,因为编译器会认为 aValue 是 Empty() 函数的命名参数。

    IF Empty(aValue := SomeExpression())
  • -
  • 如果从另一个类继承静态类,以前会收到编译器警告。现在则会出现编译器错误,因为这会产生一个副作用,即生成的程序集包含一个已损坏的引用。
  • -
  • 重载解析代码现在会选择类型方法/函数,而不是采用 clipper 调用约定的方法/函数。
  • -
  • 编译器现在可以识别 Xbase++ 方言。目前它的行为与 Harbour 相同。我们还添加了编译器宏 __DIALECT_XBASEPP__ ,当以 Xbase++ 模式编译时,该宏将自动定义为 TRUE。
  • -
  • 修正了 PDB 行号生成中的一个问题,该问题会导致调试器中出现不正确的行号
  • -
    - Visual Studio 集成 - -
  • 对于在 #include 文件中定义的 #defines,源代码编辑器并不总是显示正确的 “活动 ”区域。
  • -
  • 打开不含实体的源文件(如头文件)可能会在 VS 内出现错误信息。
  • -
  • 修正了编辑器中的 null 引用异常
  • -
  • 修正了在编辑器中取消代码注释时出现的问题
  • -
  • 改进了具有许多依赖关系的大型解决方案的加载时间性能。
  • -
  • 修正了 intellisense 引擎可能锁定项目引用或程序集引用使用的 DLL 的问题。
  • -
  • 修正了一个问题,即在 windows 窗体编辑器中打开窗体时,缺少引用(例如未在开发人员机器上安装的 COM 引用)可能会导致类型查找问题。
  • -
  • 在项目属性页面添加了选择 Harbour 方言的选项。
  • -
    - 生成系统 - -
  • 生成系统无法识别源代码中已注释的 NAMESPACE 开头行。现已修复。
  • -
    - VOXporter - -
  • 我们在输出文件中添加了按字母顺序排列实体的选项。
  • -
  • 我们添加了一个选项,您可以选择将 X# 运行时作为引用添加到您的应用程序中(否则将使用 Vulcan 运行时)。
  • -
    - 运行时 - -
  • 调用 SetInternational(#Windows) 后,SetCentury 设置不正确。现已修复。
  • -
  • 日期的 Descend 函数现在会返回一个数字,就像在 VO
  • -
  • 函数 ChrA 和 AscA 已更名为 Chr() 和 Asc(),并删除了原来的函数 Chr() 和 Asc()。原来的函数使用的是 DOS (Oem) 代码,与 Visual Objects 不兼容。
  • -
  • 运行时有几处使用 System.Encoding.Default 代码页将字符从 8 位转换为 16 位。这一点已经改变。现在我们使用与运行时状态中 WinCodePage 相匹配的代码页。因此,通过在运行时状态中设置 Windows 代码页,现在还可以控制从 Unicode 到 Ansi 再到 Unicode 的转换。
  • -
  • 某些低级文件功能的 Oem2Ansi 转换不正确。
  • -
  • 我们在后期绑定支持方面做了一些调整
  • -
  • 所有字符串 - PSZ 例程(String2PSz()、StringAlloc() 等)现在都使用 Windows Codepage 将 unicode 字符串转换为 ansi。
  • -
  • 如果您的程序库在编译时使用了 “兼容字符串比较”,但主应用程序没有使用,那么程序库中的字符串比较将遵循与主应用程序相同的规则,因为主应用程序在运行时注册了 /vo13 设置。运行时中的 “兼容 ”字符串比较例程现在会检测到主程序不想进行 VO 兼容字符串比较,并将简单地调用正常的 .Net 比较例程。
    因此,我们建议第三方产品在其代码中始终使用兼容字符串比较。
  • -
    - -
  • 根据源代码注释生成了运行时的初步文档,并将其作为本文档的一个章节。
  • -
    - VO SDK - -
  • 该版本包含根据 X# 运行时编译的第一版 VO SDK。我们包含了以下类库
  • - -
  • Win32API
  • -
  • System Classes
  • -
  • RDD Classes
  • -
  • SQL Classes
  • -
  • GUI Classes
  • -
  • Internet Classes
  • -
  • Console Classes
  • -
  • Report Classes
  • -
    -
    - -
  • 所有程序集都以 VO<Name>.DLL 命名,这些程序集中的类都在 VO 命名空间中。
  • -
  • 本 SDK 基于 VO 2.8 SP3 源代码。VO 2.8 SP3 和 VO 2.8 SP4 之间的差异稍后将合并到源代码中、
  • -
  • 不包括 OLE、OleServer 和 Internet Server 库。XSharp.VO 库中包含 OleAutoObject 类及其支持类。不包括 OleControl 和 OleObject。
  • -
  • 这些类的初步文档是根据源代码注释生成的,已作为章节纳入本文档。
  • -
    - RDD 系统 - -
  • 此版本包含 RDD 系统的第一个版本。DBF-DBT 已准备就绪。其他 RDD 将在后续版本中陆续推出。此外,大部分与 RDD 相关的功能也已在此版本中运行。
  • -
  • 该版本还包含 Advantage RDD 的第一个版本。使用该 RDD,您可以访问 DBF/DBT/NTX 文件、DBF/FPT/CDX 文件和 ADT/ADM/ADI 文件。RDD 名称与 Vulcan 的 RDD 名称相同。(AXDBFCDX、AXDBFNTX、ADSADT)。我们还支持 AXDBFVFP 格式和 AXSQLCDX、AXSQLNTX、AXSQLVFP。有关这些 RDD 的差异和可能性的更多信息,请参阅 Advantage 文档。
    我们在 Advantage 客户端引擎的基础上对 Advantage RDD 进行了编码。我们的 RDD 系统会检测您是在 x86 还是 x64 模式下运行,并相应地调用 Ace32 或 Ace64 中的函数。
    要使用 Advantage,您需要将支持 DLL 从 Advantage Vulcan RDD 复制到您应用程序的文件夹中。请查看 Vulcan 的 Advantage 文档,查看 DLL 列表。Advantage RDD 是标准 XSharp.RDD.DLL 的一部分,因此取代了 Vulcan 的 AdvantageRDD.Dll。
  • -
  • XSharp.Core DLL 现在也支持 RDD。我们选择不在函数中实现,而是在 CoreDb 类中作为静态方法实现。使用 VoDb..() 函数的旧代码可以通过将 “VoDb ”更改为 “CoreDb ”来移植。
    在 VO 和 Vulcan 中作为 USUAL 的参数和返回值在 CoreDb 类中作为 OBJECT 实现。
    ..Info() 方法有两个重载。一个重载Object,一个重载Object引用。
    CoreDb 中的方法用逻辑值返回成功或失败,就像 VO 中的 VODB..() 函数一样。如果您想知道上次操作过程中发生了什么错误,可以使用 CoreDb._ErrInfoPtr() 方法进行访问。该方法返回 RDD 操作中发生的最后一次异常。
  • -
  • 目前,CoreDb 类只有返回对象的 FieldGet()。我们将在下一次生成中添加一些以指定类型返回值的额外方法(如 FieldGetString()、FieldGetBytes() 等)。我们还将为 FieldPut() 添加可接受不同参数类型的重载。
  • -
  • XSharp.VO DLL 具有 VoDb..() 函数和 DbAppend()、EOF()、DbSkip() 等高级函数。
    VoDb..() 函数用逻辑值返回成功或失败。如果您想知道最后一次操作的错误信息,可以使用 _VoDbErrInfoPtr() 方法进行访问。该方法返回 RDD 操作中发生的最后一次异常。
  • -
  • 您可以混合调用 VoDb..() 函数和 CoreDb..() 方法。在引擎下,VoDb...() 函数也会调用 CoreDb 方法。
  • -
  • 高级函数可能会像在 VO 中一样抛出异常。例如,在没有打开表的工作区中调用这些函数时。有些函数会简单地返回空值(如 Dbf()、Recno())。其他函数则会抛出异常。如果使用 ErrorBlock() 注册了错误处理程序,那么该错误处理程序将被错误对象调用。否则系统将抛出异常。
  • -
  • RDD 系统通过 DbDate 结构返回日期值,通过 DbFloat 结构返回浮点值。这些结构没有隐式转换方法。 不过,它们确实实现了 IDate 和 IFloat,而且当它们存储在 XSharp.VO DLL 内的 USUAL 中时,可以并将被转换为 Date 和 Float 类型。DbDate 结构是年、月和日期的简单组合。DbFloat 结构用于保存 Real8 中的字段值以及长度和小数位数。
  • -
  • 有关 RDD 系统的更多文档将在稍后发布。当然,您也可以查看 GitHub 上的帮助文件和源代码。
  • -
    - - Changes in 2.0.0.5 (Bandol Beta 5) - 编译器 - -
  • 使用本地资源的程序集的强命名密钥无效。现已修复
  • -
  • 当同一源代码(PRG)文件包含两次包含文件时,就会产生大量编译器警告,提示重复的 #defines。特别是当 Vulcan VOWin32APILibrary.vh 被包含两次时,每个源文件将产生超过 15000 个编译器警告。大量的警告会导致编译器占用过多内存。现在,当我们检测到同一文件被包含两次时,就会输出编译错误。我们还为每个源 (PRG) 文件添加了 500 个预处理器错误的限制。
  • -
  • Beta 4 中的一项更改可能会导致编译器对 X# 编译器自动引入的未使用变量发出警告。这种警告将不再生成。
  • -
  • 现在,编译器可以正确地将某些编译器选项存储到 XSharp 的运行时状态中。
  • -
    - 运行时 - -
  • 修复了 Ansi2OEM 和 OEM2Ansi 功能中的一个问题。
  • -
  • 修正了 SetCollation(#Windows) 排序中的一个问题
  • -
  • 修正了 ASort() 等运行时函数中的字符串比较问题。现在,它还尊重新的运行时属性 CompilerOptionVO13,以控制排序
  • -
    - Visual Studio 集成 - -
  • 编辑器成员下拉菜单中的成员排序是根据方法名和属性名进行的,不包括类型名。当源文件包含多个类型时,成员下拉菜单中的成员将混合排序
  • -
    - 生成系统 - -
  • VO15 的默认值已从 false 改回未定义。
  • -
    - - - Changes in 2.0.0.4 (Bandol Beta 4) - 编译器 - -
  • 可能的突破性改变:函数现在总是优先于同名方法。如果要调用同一类中的方法,需要在方法前加上类型名(静态方法)或 SELF: 前缀。如果没有冲突的函数名,则仍可使用方法名调用该方法。我们建议在方法调用前加上前缀,以便代码更易于阅读。
  • -
  • 编译器只接受一个标识符,没有 INSTANCE、EXPORT 或其他前缀,也没有类声明中的类型。编译器会创建一个 USUAL 类型的公共字段。现在已经不可能了。
  • -
  • 改进了位置关键字检测算法(这也会影响源代码编辑器)
  • -
  • 操作符 || 现在映射到逻辑或 (a .OR. b) 而不是二进制或 (_OR(a,b))
  • -
  • VAR 语句现在也能正确解析

    VAR x = SomeFunction()
  • -
    - 编译时会警告您应该使用赋值运算符 (:=) 。 - 我们之所以添加这一功能,是因为许多人(包括我们自己)从 VB 和 C# 中复制了操作符为单个等号的示例。 - -
  • 有关冲突类型的错误信息现在包括完全合格的类型名称。
  • -
  • 编译器不再包含字面浮点运算的宽度。这与 VO 兼容。
  • -
  • 现在允许使用枚举类型的默认参数。
  • -
    - 运行时 - -
  • 添加了几个缺失的函数,如 __Str() 和 DoEvents()
  • -
  • 修正了宏编译器在处理非英语语言时出现的问题。
  • -
  • 为 Is...()函数添加了几个重载,这些函数使用 PSZ 而不是字符串,例如 IsAlpha() 和 IsUpper()。
  • -
  • 添加了一些缺失的错误定义,如 E_DEFAULT 和 E_RETRY。
  • -
  • 修复 SubStr() 和负参数的问题
  • -
  • 修复 IsInstanceOf() 的一个问题
  • -
  • 修复 Val() 和包含 “E ”字符的十六进制值之间的问题
  • -
  • 添加了从 ARRAY 到 OBJECT[] 的隐式转换,并返回了隐式转换。
  • -
  • 对 Transform() 和 Unformat() 的代码进行了几处修改,以涵盖多种外来图片格式
  • -
  • 修改 SetCentury() 的代码,使其也能自动调整日期格式(SetDateFormat())
  • -
  • 结合 SetFixed() 和 SetDigitFixed(),修复 Str() 系列函数。
  • -
    - Visual Studio 集成 - -
  • 修正了在 Visual Studio 最新版本中生成项目时出现的问题
  • -
  • 有几个 “关键字” 以前没有同步大小写,如 TRUE、FALSE、NULL_STRING 等、
  • -
  • 只要用户将光标放在关键字上或紧随其后,当前行中的关键字就不会大小写同步。这意味着,当您键入 String 并希望继续将其改为 StringComparer 时,格式器将不再启动,并在您有机会完成单词之前将 “String ”改为关键字的大小写。
  • -
  • 表单编辑器内的控制命令对话框没有保存更改。
  • -
  • 在编辑器右侧下拉菜单中添加了一个选项,可选择包含编辑器中的所有实体,或仅包含当前选定类型中的成员
  • -
  • 编辑器也会匹配字面字符串和注释中的大括号。现已修复。
  • -
  • 修正了 CodeDom 解析器的一个问题,即扩展字符串(包含 CRLF 符号或其他特殊符号的字符串)的解析不正确。这导致 windows 窗体编辑器出现问题。
  • -
  • 编辑器中的成员解析代码与编译器的逻辑不一致: 当函数和方法同名时,它解析的是方法而不是函数。这一问题已得到修复。
  • -
  • 修正了在 X64 模式下调试时的一个问题。
  • -
  • 修复了与 SCC 集成比较源代码文件时出现的异常。
  • -
  • 修复了 XAML 编辑器的若干问题:
  • - -
  • 代码现在以严格的调用约定生成,以避免在启用编译器选项 “隐含 CLIPPER 调用约定” 时出现问题
  • -
  • 出于同样的原因,WPF 和其他模板现在都包含 STRICT 调用约定
  • -
  • XAML 编辑器无法正确加载当前 DLL 或 EXE,因此在解析命名空间和向工具调色板添加用户控件时出现问题。这一问题已得到修复。
  • -
    -
    - -
  • 我们在 Tools/Editor/XSharp/Intellisense 选项中添加了一个选项,允许您控制编辑器中成员组合框的工作方式。你可以选择在右侧组合框中只显示当前类型或所有实体的方法和属性。左侧组合框始终显示文件中的所有类型。
  • -
  • 更新了部分项目和项目模板。没有参数的方法和构造函数现在有了严格的调用约定。此外,在 Core 方言模板中,编译器选项 /vo15 已被明确禁用。
  • -
    - - - Changes in 2.0.0.3 (Bandol Beta 3) - 编译器 - -
  • 当两个方法重载的原型相匹配时,编译器现在会优先选择非泛型方法,而不是泛型方法
  • -
  • 修正了编译包含预处理器命令的单行源代码时可能出现的异常。
  • -
    - 运行时 - -
  • 添加了 Mod() 函数
  • -
  • 已添加不带参数的 ArrayNew() 重载
  • -
    - -
  • 当 length(RHS) > length(LHS) 和 SetExact() == FALSE 时,修正了 __StringNotEquals() 中的问题。
  • -
  • 添加了用于 USUAL 溢出错误的缺失字符串资源
  • -
    - Visual Studio 集成 - -
  • 改进了关键字大小写同步和缩进。打开源文件时也会同步 “关键字大小写”。
  • -
  • 双击查找结果窗口打开源文件,不再为同一源文件打开新窗口
  • -
  • 提高了 intellisense 的类型查找速度
  • -
  • 修正了一个问题,该问题会导致无法查找同一命名空间中的类型
  • -
  • 修复最新 Visual Studio 2017 版本中引入的 QuickInfo 问题
  • -
  • 调试器中不再显示与调试器工具提示重叠的 QuickInfo 提示
  • -
  • 编辑器窗口中包含方法和函数的组合框不再显示参数名和完整类型名。现在显示的是参数的缩写类型名
  • -
  • 这些组合框现在还能显示另一个源文件中定义的方法和属性的文件名
  • -
  • 修正了窗口编辑器为标签页生成代码的问题
  • -
    - Vulcan XPorter - -
  • 解决方案文件中定义的项目依赖关系未正确转换
  • -
    - VO XPorter - -
  • 修正了用定义值替换资源名称的问题
  • -
    - - - Changes in 2.0.0.2 (Bandol Beta 2) - 编译器 - -
  • 编译器现在可以透明地同时接受用于 XBase Array 索引的 Int 和 Dword 参数
  • -
  • 当编译器在 XSharp.VO 中发现一个弱类型的函数,而在 XSharp.Core 中发现一个强类型的函数时,编译器会选择 XSharp.Core 中的强类型函数。
  • -
  • 在 VO 和 Vulcan 方言中,有时会显示(不正确的)“重复使用 ”警告。现在这种情况已被消除。
  • -
  • 改进了 Start 函数的调试器信息,以避免在代码结束时不必要地退回到第 1 行
  • -
  • 改进了 BEGIN LOCK 和 BEGIN SCOPE 的调试器断点信息
  • -
  • 改进了多行属性的调试器断点信息
  • -
  • 现在仅在 VO/Vulcan 方言中支持 /vo6、/vo7 和 /vo11
  • -
    - 运行时 - -
  • 删除了 Array 索引器的 DWORD 重载
  • -
  • 修正了 ErrString() 的重载问题
  • -
  • 修正了 _DebOut() 的重载问题
  • -
  • 修正了 DTOC() 和 Date:ToString() 中的问题
  • -
  • 修正了 ASort() 与 VO 不兼容的问题
  • -
  • 现在,当释放固定内存块时,它们会被填充为 0xFF,以帮助检测问题
  • -
    - Visual Studio - -
  • 修复 VS2017 在生成时 “挂起” 的问题
  • -
  • 修复 VS2017 中显示工具提示(QuickInfo)时的 “挂起 ”问题
  • -
  • 修正了调试 x64 应用程序的问题
  • -
  • 无法再重命名或删除 “属性 ”文件夹
  • -
  • 从 “属性 ”文件夹的上下文菜单中选择 “打开”,即可打开项目属性屏幕
  • -
  • 更新了项目树中的多个图标
  • -
  • 转到定义的改进
  • -
    - 生成系统 - -
  • 修复嵌入式资源命令行选项中 CRLF 的问题
  • -
    - - - Changes in 2.0.0.1 (Bandol Beta 1) - 编译器 - 新特性 - -
  • 已添加对 ARRAY OF 语言结构的支持。有关详细信息,请参见 Runtime 。
  • -
  • 在使用 VO 或 Vulcan 方言编译时,添加了对 X# Runtime 程序集的支持。
  • -
  • 已添加对 “伪 ”函数 ARGCOUNT() 的支持,该函数可返回使用 clipper 调用约定编译的函数/方法中已声明参数的数量。
  • -
  • 为给 foreach 局部变量赋值添加了一个新的警告编号。为 USING 和 FIXED 局部变量赋值将产生错误。
  • -
    - 优化 - -
  • 优化了 Clipper 调用约定函数/方法的代码生成
  • -
  • 不再支持 /cf 和 /norun 编译器选项
  • -
  • 预处理器不再删除空白。这样,在编译使用预处理器的代码时,错误信息会更好。
  • -
  • 某些解析器错误的描述更加详细
  • -
  • 更改了用于确定针对 CLR2 还是 CLR4 进行编译的方法。编译器会检查 system.dll 或 mscorlib.dll 的位置。如果该位置所在路径包含 “v2”、“2.”、“v3 ”或 “3.”,则假定我们是针对 CLR2 进行编译。包含 “V4 ”或 “4. ”的路径则被视为 CLR4。不再支持编译器的 /clr 命令行选项。
  • -
  • 现在,预处理器在检测到递归 #include 文件时会产生错误。
  • -
    - Bug 修复 - -
  • 修正了在 Vulcan 或 VO Dialect 中编译时在参数上使用 [CallerMemberAttribute] 的问题
  • -
  • Abstract 属性不应再对正文产生警告
  • -
  • 现在,您可以正确使用 ENUM 值作为数组索引。
  • -
  • 修正了使用 PUBLIC GET 和 PRIVATE SET 访问器的属性的一个问题。
  • -
  • 修正了将接口赋值给 USUAL 时需要转换为对象的问题
  • -
  • 修正了一个问题,即带有字面类型的 IIF 表达式会返回错误的类型(L 或 U 后缀被忽略)。
  • -
  • 修正了 LOCAL x[10] 声明编译不正确的问题。现在可编译为包含 10 个元素的局部 VO 数组。
  • -
    - Visual Studio 集成 - -
  • 版本 1.2.1 引入了一个问题,可能导致输出文件被 intellisense 引擎锁定。现已修复
  • -
  • 编辑器解析器在处理嵌套类型时出现问题。现已修复
  • -
  • X# 项目内的枚举代码完成中未包含枚举成员
  • -
  • 代码重新格式化方面的一些改进
  • -
  • 在 “工具/选项 ”中为编辑器添加了选项,以便在 “所有标记 ”完成列表中包含关键词
  • -
    - -
  • 修正了一个问题,即无法加载程序集以检索元信息时,程序集会 “永远 ”重试
  • -
  • 修正了从包含托管代码和非托管代码的程序集中检索类型信息的问题。
  • -
  • 在 IDE 属性窗口中添加了一些引用程序集的属性
  • -
  • 修复了 Visual Studio 2017 最新更新中引入的有关程序集引用和 Windows 窗体编辑器的问题
  • -
  • 在 “项目属性 ”窗口中启用 XML 输出时,对于程序集名称中包含“. ”的程序集,会显示不正确的文件名。
  • -
  • 编辑器解析器现在能更好地支持 REF 和 OUT 类型的参数
  • -
  • 在程序集引用和 COM 引用的属性窗口中添加了对 “嵌入互操作类型 ”的支持
  • -
  • 修复了代码模型有时会锁定项目引用的输出 DLL 的问题
  • -
    - 生成系统 - -
  • 修正了 XML 文档文件的命名问题。
  • -
    - 运行时 - -
  • 已添加 XSharp.Core.DLL、XSharp.VO.DLL 和 XSharp.Macrocompiler.DLL。
    已实现并支持大多数运行时函数。更多信息请参阅 X# Runtime章节
  • -
    - VO XPorter - -
  • 删除了 SDK 相关选项。这些选项稍后将转移到一个新工具中。
  • -
    - - - Changes in 1.2.1 - 编译器 - -
  • 修正了一个问题,在该问题中,编译错误会导致 “Failed to emit module” 的信息,而没有进一步的信息
  • -
  • 修正了别名表达式(如 CUSTOMER->CUSTNO++)中 ++、-- += 和类似操作的问题
  • -
  • 在带参数的构造函数之后,构造函数初始化器和集合初始化器不起作用。现已修复。
  • -
  • 修正了启用溢出检查时 USUAL 中存储的负字面值的问题。
  • -
  • 对于 CATCH 子句,现在 ID 和 TypeName 都是可选的。这意味着有 4 种变化。
    您只能有一个不带类型的 catch 子句,因为它默认为 System.Exception 类型。但是,您可以使用多个不带 ID 的 catch 子句。
  • -
    -   CATCH ID AS ExceptionType
      CATCH ID                  // 默认为 Exception类型
      CATCH AS ExceptionType  
      CATCH            // 默认为 Exception类型
    - Visual Studio 集成 - -
  • 提高后台代码扫描速度
  • -
  • 提高编辑器内后台解析器的速度
  • -
  • 修正了窗口窗体编辑器使用的 codedom provider中的一个问题
  • -
    - - - Changes in 1.2.0 - 编译器 - -
  • 为了与 VO 和 Vulcan 兼容,现在可以为通过引用声明的参数传递 NULL。
    我们强烈建议不要这样做,除非你确保函数期望这样做,并且不会在没有检查 NULL 引用的情况下赋值给引用参数。只有启用 /vo7 编译器选项后,这种做法才有效。
  • -
  • 我们对 Lexer 进行了一些优化。因此,编译器的速度应该会更快一些
  • -
  • 我们更正了自动生成构造函数 (/vo16) 的一个问题,该构造函数适用于继承自外部 DLL 中定义的类的类
  • -
  • 当使用 /vo2 编译时,在调用 super 构造函数之前在子类中分配的任何字符串字段都会被空字符串覆盖。现在,只有当字符串为 NULL 时,生成的代码才会分配空字符串。
    注意:我们不建议在调用 super 构造函数前在子构造函数中分配父字段。手动编码的父字段的默认值仍会覆盖在调用 super 构造函数之前在子构造函数中分配的值。
  • -
  • 修正了 VO 方言中 CHECKED() 和 UNCHECKED() 语法的一个问题
  • -
  • 修正了一个问题,即在一个重载存在单个 object 参数和一个重载存在 object[] 参数的情况下,为方法选择重载。
  • -
  • 已为 LOCAL STATIC 语法分析程序添加支持
  • -
  • 修正了编译器选项 /vo9(允许缺少返回值)和返回 VOID 的过程或方法的一个问题
  • -
  • 改进调试器序列点生成。编译器不再为 VO/Vulcan 方言中的启动和关闭代码生成 “隐藏 ”断点信息,对于表达式语句也不再需要双步骤。
  • -
  • 分部类的 ACCESS 和 ASSIGN 可能会生成没有源文件名的错误信息。这个问题已经解决。
    现在,编译器为这些 “partial”属性生成的代码略有不同。
    Access 和 Assign 是作为编译器生成的方法实现的,现在属性 getter 和属性 setter 都会调用这些方法。
  • -
  • 编译器无法识别 _WINCALL 调用约定。现已修复。
  • -
  • 编译器现在会在使用 #pragma 命令时发出警告
  • -
    - Visual Studio 集成 - -
  • 进一步提高编辑器的性能。特别是包含错误代码的大型源文件可能会降低编辑器的运行速度。
  • -
  • 当包含文件只包含 #defines(如 Vulcan 头文件)时,编辑器解析器不再重复尝试解析这些文件
  • -
  • 源代码编辑器试图为注释区域中的单词显示 intellisense。该问题已得到解决。
  • -
  • 我们已开始开发对象浏览器和类浏览器。
  • -
  • 项目的开启和关闭应稍快一些
  • -
  • 现在,编辑器使用的内部代码模型会在项目关闭时处理已加载的信息,任何项目都不再需要这些信息。这将减少 X# 项目系统的内存使用量
  • -
  • 匹配的关键字,如 IF ... ENDIF 和 FOR ... NEXT,现在应在编辑器中突出显示
  • -
  • 如果在编辑器中选择了一个标识符,那么当前方法/函数中所有使用该标识符的地方都会高亮显示该标识符。
  • -
  • 我们添加了几项功能,您需要在 “工具/选项/文本编辑器/XSharp/Intellisense”对话框中启用/禁用这些功能:
  • - -
  • 按下点时,编辑器中的代码补全也支持实例成员补全。
    请注意,编译器只接受 Core 语言中的这一选项,而不接受 VO 和 Vulcan 方言中的这一选项。因此,该选项在使用其他方言的项目中不起作用。
  • -
  • 我们添加了一些选项来控制编辑器中下拉式组合框的排序,以及这些组合框中是否应包含字段/实例变量。如果不进行排序,下拉框中的条目将按照它们在源文件中的顺序显示。
  • -
  • 我们添加了键入时自动完成标识符的选项。这包括locals、参数、类字段、命名空间、类型等。
  • -
    -
    - -
  • 子类中的重载方法,如果其签名与其重载的父类方法相同,则在完成列表中不再被视为重载方法
  • -
  • 缺少一个引用 DLL 可能会 “杀死 ”intellisense 引擎。现在这种情况不再发生。当然,缺失的引用 DLL 的类型信息不会包含在内。
  • -
  • 生成的 XAML 代码源文件(OBJ 文件夹中的 .g.prg 文件)中的属性和方法现在也会被解析,并包含在intellisense以及类浏览器和对象浏览器窗口中的完成列表中。
  • -
    - VOXPorter - -
  • 现在,安装程序包含了正确版本的 VOXPorter <g> 。
  • -
  • VOXporter 现在支持以下命令行选项:
    /s:<source folder or aef>
  • -
    - /d:<destination folder> - /r:<runtime folder> - /nowarning - - -
  • 针对图形用户界面类中发现的问题添加了一些代码更正
  • -
  • 现在,从不同工作目录运行 VOXPorter 时也能找到模板文件了
  • -
    - - - Changes in 1.1.2 - 编译器 - -
  • 已为包含 #pragma 的代码添加编译器警告
  • -
  • 修正了 iif() 函数和负字面值的一个问题
  • -
    - Visual Studio 集成 - -
  • 修复了键入发送(:)运算符后编辑器运行缓慢的问题
  • -
  • 枚举值现在能在调试器中正确解码
  • -
  • 修正了用于处理字面 FALSE 值和负数的 CodeDom 提供程序。因此,更多(Vulcan 创建的)winforms 应能顺利打开
  • -
  • 当某些位置关键字(如 ADD 和 REMOVE)出现在冒号“: ”或点号“. ”之后时,在编辑器中不再将其显示为不完整代码的关键字;
  • -
    - VOXPorter - -
  • 修复从 SDK 导出 VO RDD 类的问题
  • -
    - - - Changes in 1.1.1 - 编译器 - -
  • 修正了调试器 DO CASE 和 OTHERWISE 断点的一个问题
  • -
  • 修正了在 #included 文件中定义的源代码的调试器断点问题
  • -
  • 已添加对 Harbour Global 语法的支持,其中 GLOBAL 关键字是可选的
  • -
  • 修正了带有负步长值的 FOR... NEXT 循环的一个问题
  • -
  • 在某些情况下,没有从工作区名称或字段名称中删除用于避免关键字冲突的 @@ 前缀。现已修复
  • -
  • 在 VO/Vulcan 方言中,当自动生成默认无参数 SUPER 构造函数调用时,会产生警告 (XS9015)。现在该错误信息已被消除。不过,生成的带参数 SUPER 构造函数调用仍会产生警告。
  • -
  • 为 Xbase 类型名称和 XSharp Runtime 中的函数名称准备编译器
  • -
    - 预处理器 - -
  • 修复了预处理器中的一个崩溃问题
  • -
  • 对于没有匹配标记的块,预处理器会产生 “可选块不包含匹配标记 ”的错误。现在允许了。
    (例如,某些数据库 UDC 中的 ALL 子句)
  • -
  • 当多个源文件使用同一个包含文件,而该文件的不同部分因 #ifdef 条件的不同而被包含时,预处理器会感到 “困惑”。这一问题已得到修复。
  • -
  • 无法正确处理从 #include 文件导入的源代码中的调试器文件/行号信息。
  • -
    - Visual Studio 集成 - -
  • 修复了 Windows 窗体编辑器的几个问题
  • -
  • VO 兼容编辑器生成的类声明现在包含 PARTIAL 修饰符。
  • -
    - - - Changes in 1.1 - 编译器 - -
  • 修正了 X# 1.0.3 发布后在后期绑定代码中使用代码块的问题
  • -
  • 修复了一个问题,即在子类中覆盖从只定义了赋值(Set)或访问(Get)的类继承的属性时出现的问题。
  • -
  • 已启用编译器选项 /vo16 :自动生成 VO Clipper 构造函数。
  • -
  • 修复了源文件第 1 行第 1 列出现编译器错误时编译器崩溃的问题
  • -
  • 修正了溢出检查不遵循 /ovf 编译器选项的问题
  • -
  • 修正了接口方法 public 修饰符的问题
  • -
  • 为外部 DLL 中无法访问的字段添加了正确的错误信息
  • -
  • 修正了调试器序列点(调试器步进)的一个问题
  • -
  • X# 生成的 pdb 文件现在标有 X# 语言 GUID,因此在 VS 调试器中可识别为 X# 文件
  • -
  • DATETIME (26) 和 DECIMAL (27) 作为 UsualType 添加到编译器中,为允许使用这些类型的 usuals 类型的 X# 运行时做准备。
  • -
  • 编译器选项 /VO15 和 /VO16 现在在 VO/Vulcan 方言之外使用时会产生错误信息
  • -
  • 在类外声明的方法(VO 风格代码)将声明 private 类,而不是 public 类
  • -
  • ASTYPE 已改为位置关键字
  • -
  • 修正了 Chr() 和 _Chr() 函数在字面数字大于 127 时的一个问题
  • -
  • 已添加对 __CLR2__ 和 __CLR4__ 编译器宏的支持。版本源于 mscorlib.dll 和/或 system.dll 的文件夹名称
  • -
  • 代码块语法在 Core 方言中不起作用。
  • -
  • 一些新关键字,如 REPEAT、UNTIL、CATCH、FINALLY、VAR、IMPLIED、NAMESPACE、LOCK、SCOPE、YIELD、SWITCH 等,现在也是位置关键字,只有在行首或匹配的其他关键字之后才会被识别为关键字。
    当这些关键字用作函数名时,这将有助于避免出现令人费解的错误信息。
  • -
    - Visual Studio - 源代码编辑器 - -
  • 为函数和过程添加了转到定义
  • -
  • 改进函数和过程的信息提示
  • -
  • 改进的大小写同步
  • -
  • 添加了第一版智能缩进
  • -
  • 修正了intellisense引擎中可能锁死 VS 的查找问题
  • -
  • 编译器生成的类型现在不会出现在完成列表中。
  • -
  • 已为 LOCAL IMPLIED 和 VAR 变量的intellisense添加部分支持
  • -
  • 已添加对格式化文档的支持。这也会根据工具/选项菜单中定义的工具设置标识符的情况
  • -
  • 改进后台文件扫描器的性能。在编译过程中,该扫描器也会暂停,以提高编译速度。
  • -
    - 项目系统和 MsBuild - -
  • 修正了项目文件中条件属性组的一个问题。现有项目将自动更新
  • -
  • 在 MsBuild 和 VS 项目属性页面中添加了对 /vo16 编译器选项的支持。
  • -
  • 修正了 /nostddefs 编译器选项无法正常工作的问题。
  • -
  • 修正了在项目属性对话框中输入资源或设置时可能出现的问题
  • -
  • 修正了 /nostdlib 编译器选项的一个问题
  • -
  • License.Licx 文件现在添加为 “嵌入式资源”。
  • -
  • 修正了自动添加许可证文件的问题
  • -
  • 当一个项目有一个 “中断的引用”,而新的引用被添加到正确的位置时,中断的引用将被删除,新的引用将被添加。
  • -
  • 在 64 位进程内运行时,MSBuild 支持 DLL 无法找到编译器和本地资源编译器的位置
  • -
    - 表单编辑器 - -
  • 改进了 Windows 窗体编辑器对项目引用中定义的类型的支持。现在,我们将检测这些项目的输出文件位置,就像 C# 和 VB 项目系统一样。
  • -
  • 表单编辑器的代码分析器在处理未类型化的方法时出现问题。现已修复。
  • -
    - VO 窗口和菜单编辑器 - -
  • 窗口和菜单编辑器的代码生成器将删除未使用的旧定义。
  • -
  • 更改了 VO 窗口的项目模板,以解决为尚未保存的窗口添加事件处理程序时出现的问题
  • -
  • 窗口编辑器的代码生成器未输出 WS_VISIBLE 的样式。现已修复。
  • -
    - 调试器 - 该版本引入了第一版 XSharp 调试器支持 - -
  • Visual Studio 调试器现在可在调用堆栈窗口和其他地方显示 X# 语言
  • -
  • 函数、方法和过程现在以 X# 语言风格显示在调用栈窗口中
  • -
  • 编译器生成的变量不再显示在局部变量列表中
  • -
  • locals 列表现在显示的是 SELF,而不是 this
  • -
  • X# 预定义类型(如 WORD、LOGIC 等)会在 locals 窗口中显示其 X# 类型名称
  • -
    - 测试 - -
  • 已添加对 “测试资源管理器 ”窗口的支持
  • -
  • 添加了使用 XUnit、NUnit 和 Microsoft Test 进行单元测试的模板
  • -
    - 其他 - -
  • 添加了在 XSharp 之后(重新)安装 Vulcan 时的警告,这可能会导致 Visual Studio 集成出现问题
  • -
  • VS 解析器将接口标记为结构而非接口。这一问题已得到修复。
  • -
  • 在 VS 工具菜单中,XPorter 工具有了更好的名称
  • -
  • 在查找类型信息时暂停 VS 后台分析器,以提高intellisense速度
  • -
  • 对 X# 附带的模板进行了几处修改
  • -
    - XPorter - -
  • 修复属性组条件中的问题。
  • -
    - VOXPorter - -
  • 生成 clipper 构造函数现在默认为禁用
  • -
  • 修正了 VS 模板文件中的一个问题。
  • -
    - - - Changes in 1.0.3 - 编译器 - -
  • 修正了使用 usual 参数索引的 Vulcan 数组的索引计算问题
  • -
  • 修正了以 begin sequence 语句或 try 语句结束的代码自动生成返回值的问题
  • -
  • 优化了字面符号的运行性能。
    编译器现在会为字面符号生成一个符号表,应用程序中使用的每个字面符号只创建一次。
    如果您的应用程序使用了大量(数千个)字面符号,启动时可能会有一点延迟。但运行时的性能应该会更好。
  • -
  • 为使用与 VO 兼容的 _CAST 操作符将数字转换为 OBJECT 的代码添加了编译器错误。
    现在已经不允许这样做了:
    LOCAL nValue as LONG
    LOCAL oObject as OBJECT
    nValue := 123
    oObject := OBJECT(_CAST, nValue)
  • -
    - - - Changes in 1.0.2 - 编译器 - -
  • 添加了对 XML 文档生成的支持。我们支持与 C# 编译器和其他 .Net 编译器相同的标记。
  • -
  • 改进了一些解析器错误。
  • -
  • 为编译器和脚本分别创建了可移植和非可移植(.Net 框架 4.6)项目
  • -
  • 修正了从 USUAL 转换到已知类型的代码生成。现在,当 usual 中的对象类型与目标变量的类型不匹配时,会生成与 Vulcan 相同的错误信息
  • -
  • 当声明与程序集名称相同的类型时,会产生编译器错误,并给出建议的解决方法。
  • -
  • 修正了在方法调用中使用 PTR() 操作时出现的奇怪编译器信息
  • -
  • 使用 VO 方言时,PSZ 中字节的索引访问现在与 VO 中一样基于 1。Vulcan 方言需要像 Vulcan 那样基于 0 的索引访问。
  • -
  • 删除了 FLOAT 和 USUAL 复合赋值的错误信息。编译器现在包含了 Vulcan Runtime 中该问题的解决方法
  • -
  • 对于编译器必须在函数调用和任何其他类中的静态方法调用之间做出选择的模糊代码,编译器现在会选择函数调用而不是方法调用(Vo 和 Vulcan 方言)。警告仍会生成。
  • -
  • 当使用 @ 符号通过引用传递变量时,编译器现在会检查函数/方法参数的声明类型是否与局部变量的类型一致。
  • -
  • 在 VO/Vulcan 方言中,一些针对未使用变量的编译器警告被抑制。现在它们又被激活了。
  • -
    - 脚本 - -
  • 脚本在 1.01 版中不起作用
  • -
    - Visual Studio 集成 - -
  • QuickInfo 可能会在 VS 编辑器中产生 “挂起 ”现象。现已修复
  • -
  • 为 globals 和 defines 添加了快速信息
  • -
  • 为 globals 和 defines 添加了完成列表
  • -
  • 新增 VO 表单编辑器,用于编辑 vnfrm/xsfrm 文件并生成代码和资源
  • -
  • 已添加 VO 菜单编辑器,用于编辑 vnmnu/xsmnu 文件并生成代码和资源
  • -
  • 添加了 VO DbServer 编辑器和 VO Fieldspec 编辑器,用于编辑 vndbs/xsdbs 和 vnfs/xsfs 文件并生成代码和资源。
  • -
  • 增加了关键字和标识符的同步功能。
  • -
  • 修正了在编辑器中键入 SUPER( 可能产生异常的问题)
  • -
  • 项目文件中的 “预生成 ”和 “生成后 ”条目现在针对特定配置了
  • -
  • 在项目系统中添加了对 XML 文档生成的支持
  • -
  • 修复了 Visual Studio 2017 15.3 及更高版本可能出现的 “挂起 ”问题
  • -
    - VO Xporter - -
  • 修正了导入某些 VO 2.7 AEF 文件时出现的问题
  • -
  • 修正了解决方案文件夹名称中可接受字符的问题
  • -
  • xsproj 文件中还包含 VO 表单和菜单实体
  • -
  • 为 INI 文件添加了一个选项,用于指定 Vulcan Runtime 文件的位置 ( )
  • -
    - - - Changes in General Release (1.0.1.1) - 编译器 - -
  • 修复了 Vulcan Runtime 非常老的版本的一个问题
  • -
  • 以 DIM Byte[] 及类似方式声明的变量现在会被编译器固定
  • -
  • 编译器未正确处理 [Return] 属性。现已修复
  • -
  • 由于 Vulcan 运行时的问题,USUAL 和 FLOAT 的复合赋值(u+= f 或 -=)在运行时导致堆栈溢出。现在,这些表达式会生成编译器错误,并建议更改为简单赋值 ( u := u + f)
  • -
    - Visual Studio 集成 - -
  • 在解析类型时,XSharp 项目之间的项目引用也作为 assemblyreference 加载。这可能会导致速度问题和不必要的内存占用
  • -
  • 提高了生成完成列表(如类型的方法和字段)的速度。
  • -
  • 我们还添加了 “完成列表选项卡”,你可以在不同的选项卡上看到字段、属性、方法等。您可以在 “工具/选项/文本编辑器/XSharp/Intellisense”选项页面中启用/禁用该功能。
  • -
    - VO XPorter - -
  • 我们添加了一项检查,以确保 X# 项目的默认命名空间不能包含空白字符
  • -
    - - - Changes in General Release (1.0.1) - 新特性 - -
  • 我们新增了对 ENUM 基本类型(ENUM Foo AS WORD)的支持
  • -
  • 我们为 Lambda 表达式添加了单独的语法
  • -
  • 我们新增了对匿名方法表达式的支持
  • -
  • 类型化的局部变量现在也可用于 PCALL() 调用
  • -
  • 带有 ExtensionAttribute 属性的方法和带有 ParamArrayAttribute 属性的参数现在可以正确编译,但会发出警告
  • -
    - 编译器 - -
  • 修正了字面代码块后期绑定赋值的问题
  • -
  • 解决多个名称冲突
  • -
  • 改进了若干错误信息
  • -
  • 修正了只使用 SET 访问器的属性的编译问题
  • -
  • 修正了带有 if ... endif 语句的 switch 块中的崩溃问题
  • -
  • 修复虚实例方法和结构的问题
  • -
  • 修正了数组字面意义中使用的 foreach 变量的名称冲突问题
  • -
  • 更改了函数和静态方法的同名解析。
    在 VO/Vulcan 方言中,函数优先于静态方法。如果要调用静态方法,则需要在方法调用前加上类名。
  • -
  • 本文档中有一个单独的主题,介绍了代码块、Lambda 表达式和匿名方法表达式之间的语法异同。
  • -
  • 修正了带有错误原型的 Start() 函数的错误信息。
  • -
  • 如果检测到函数和静态方法之间存在歧义,就会显示警告信息
  • -
    - Visual Studio - -
  • 为 “Using Static”类中的函数和方法添加了参数提示
  • -
  • 为 Clipper调用约定函数和方法添加了参数提示
  • -
  • 在intellisense中添加了对泛型的支持
  • -
  • intellisense将显示关键字,而不是本地类型名称(例如 WORD,而不是 System.UInt16)
  • -
  • 现在,当用户输入开头的“(”或“{”以及逗号“, ”时,都会显示参数提示。
  • -
  • 参数提示会显示 REF OUT 和 AS 修饰符
  • -
  • 为 COM 引用(包括普通 COM 引用和主要互操作程序集)添加了智能提示。此外,已实现接口中的成员现在也包含在内嵌代码自动完成中(这在 COM 中非常常见)。
  • -
  • 改进了其他语言(如 C# 和 VB)项目引用的直观显示。
  • -
  • 为引用项目中的函数和引用的 Vulcan 和/或 X# 程序集添加了intellisense功能
  • -
  • 抑制intellisense列表中的 "特殊类型名称”
  • -
  • 已添加对 “VulcanClassLibrary ”属性的支持,以帮助查找类型和函数
  • -
  • 本地资源编译器的错误现在也包含在错误列表中
  • -
  • 修正了构造函数参数提示的问题
  • -
  • 已为 X# 类型关键字(如 STRING、REAL4 等)添加成员列表支持。
  • -
  • 修正了 Windows 窗体编辑器中与 ActiveX 控件有关的几个问题
  • -
  • 添加了启动 VO Xporter 工具的菜单选项
  • -
  • 添加了依赖项后台扫描功能,确保新生成的代码经过扫描后可用于intellisense
  • -
  • 对 Windows 窗体编辑器和项目系统进行了多项修改:
  • - -
  • 添加了对添加 ActiveX 控件的支持
  • -
  • 已添加对表单继承的支持。在 C# 继承表单向导中也能看到我们的表单
  • -
  • 添加了将 Windows 窗体自定义控件添加到 Visual Studio 工具箱的支持
  • -
  • Windows 表单编辑器使用的 Codedom 解析器的一些性能增强。对于较大的表单,您应该会注意到这一点。
  • -
    -
    - -
  • 修复了用户报告的若干崩溃问题
  • -
  • 本地资源文件 (.rc) 现在可在源代码编辑器中打开
  • -
  • 提高后台解析速度
  • -
  • 提高关键字着色速度
  • -
  • 改进了编辑器中 “类型 ”和 “成员 ”下拉菜单的处理方式
  • -
    - 工具 - -
  • 添加了 VO Xporter 工具的第一个版本
  • -
  • 安装程序现在可以注册 .xsproj 文件、.prg、.ppo、.vh、.xh 和 .xs 文件,以便用 Visual Studio 打开它们。
  • -
    - 文档 - -
  • 我们添加了一些章节,介绍如何将 VO AEF 和/或 PRG 文件转换为 XIDE 项目和/或 Visual Studio 解决方案。
  • -
    - - - Changes in 0.2.12 - 脚本 - -
  • 我们增加了使用 X# 脚本的功能。有关如何工作的一些文档可以在这里找到。 您还可以在 下面文件夹中查找脚本示例
    c:\Users\Public\Documents\XSharp\Scripting folder
  • -
    - 编译器 - 所有方言 - -
  • 编译器现在基于 C# 7 的 Roslyn 源代码。
  • -
  • 现在,不同源文件中同一(分部)类的同名 Accesses 和 Assigns 将合并为一个属性。这将在一定程度上降低编译器的运行速度。我们建议您在同一源文件中定义 ACCESS 和 ASSIGN。
  • -
  • 在预处理器中添加了对重复结果标记的支持
  • -
  • 我们添加了编译器宏 __DIALECT_HARBOUR__
  • -
  • 修正了类型、命名空间、字段、属性、方法、全局等之间的名称解析。Core 方言非常接近 C# 规则,其他方言则遵循 VO 规则。
  • -
  • 添加了一些对不明确代码的警告
  • -
  • _Chr()使用未类型化的数值时会崩溃。该问题已得到修复。
  • -
  • 我们对字符字面规则做了一些修改。对于 VO 和 Harbour 方言,现在有了其他规则,而对于 Core 和 Vulcan,则没有这些规则。请参见 Char 字面量
  • -
    - VO 和 Vulcan 方言 - -
  • 修复了多个 VO 兼容性问题
  • -
  • QUIT、ACCEPT、WAIT、DEFAULT TO 和 STORE 命令现已从编译器中移除,并在我们的标准头文件 “XSharpDefs.xh ”中定义,该文件位于 Program Files(x86)/XSharp\Include 文件夹中。这些命令不在 Core 方言中编译
  • -
  • 已添加对 CONSTRUCTOR() CLASS MyClass 和 DESTRUCTOR CLASS MyClass(换句话说,在 CLASS ... ENDCLASS 结构之外)的支持
  • -
    - -
  • 如果在关键字 NIL、NULL_STRING、NULL_OBJECT 等之前使用 #(不等于)运算符而不留空格,那么 #NIL 就不会被视为符号 NIL,而会被视为 Not Equal To NIL。
  • -
  • SizeOf 和 _TypeOf 是 VO 中的特殊标记,不能缩写。我们改变了 X# 的行为,使之与之相匹配。这样可以防止与 _type 等变量的名称冲突。
  • -
  • 我们增加了对带有嵌入式 @ 符号的 DLL 入口点的支持,例如 “CAVOADAM.AdamCleanupProtoType@12”。
  • -
  • (DWORD) (-1) 将需要使用 unchecked 操作符。现在这与 Vulcan 兼容,生成的 DWORD 值为 System.Uint32.MaxValue。
  • -
  • STATIC VOSTRUCT 现在会被编译为 INTERNAL VOSTRUCT。这意味着您的应用程序中不能出现两次相同的结构。为什么要这样做呢?
  • -
  • 修正了 VO 编译出 “不正确 ”代码的几种情况,例如看起来像这样的代码块:
    cb := { |x|, x[1] == 1 }
    注意多出来的逗号。
    现在编译成了相同的代码块:
  • -
    - cb := { |x| x[1] == 1 } - -
  • 由于 /vo16 编译器选项有太多副作用,目前已(译者注:暂时)被禁用(不起任何作用)。
  • -
    - Visual Studio 集成 - -
  • 删除的文件和文件夹会被移动到回收站。
  • -
  • 修正了 XAML 编辑器中的intellisense问题
  • -
  • 添加了对不同 X# 项目之间代码完成的支持
  • -
  • 为 VB 和 C# 项目中的源代码添加了对代码完成和其他intellisense功能的支持
  • -
  • 已添加对参数信息的支持
  • -
    - 文档 - -
  • 我们为所有未注明的编译器错误添加(生成)了主题。有些主题只包含编译器显示的文本。更多文档将陆续发布。此外,我们还为 X# 脚本添加了一些文档。
  • -
    - - - Changes in 0.2.11 - 编译器 - 所有方言 - -
  • 改进了某些错误信息,例如未终止字符串的错误信息
  • -
  • 已添加对 /s(仅限语法检查)命令行选项的支持
  • -
  • 已添加对 /parseonly 命令行选项的支持,该选项用于intellisense解析器
  • -
    - -
  • 针对无效代码添加了一些编译器错误和警告
  • -
  • 预处理器没有正确处理 #command 和 #translate 的 4 个字母缩写。现已修复
  • -
  • 修正了预处理器中发现的一些问题
  • -
  • 我们改用了新的 Antlr 解析器运行时。这样性能应该会略有提高。
  • -
  • 更改了字面字符和字符串的定义方式:
  • - -
  • 在 Vulcan 方言中,用单引号括起来的字面字符串是 Char 字面量。双引号是 String 字面量
  • -
  • 在 Core 和 VO 方言中,用单引号括起来的字面字符串就是 String 字面量。双引号也是 String 字面量。
    要在 Core 和 VO 中指定 Char 字面量,需要在字面量前加上 “c”:
  • -
    -
    - -      LOCAL cChar as CHAR
         cChar := c'A'
    - -
  • 更改了字面字符和字符串的定义方式:
  • -
  • 在为 x86 或 x64 编译时,sizeof() 和 _sizeof() 不再产生需要 “不安全 ”代码的警告。但在为 AnyCpu 编译时,仍会产生警告。
  • -
  • 如果未设置 includedir 环境变量,则也无法自动找到 XSharp\Include 文件夹。
  • -
    - VO/Vulcan 兼容性 - -
  • 已添加 /vo16 编译器选项,以便为没有构造函数的类自动生成带有 Clipper 调用约定的构造函数
  • -
    - Harbour 兼容性 - -
  • 开始编写 Harbour 方言。这与 VO/Vulcan 方言完全相同。目前唯一的区别是,IIF() 表达式是可选的
  • -
    - Visual Studio - 新特性 / 更改的行为: - -
  • 新增括号匹配功能
  • -
  • 添加了速览定义(Alt-F12)
  • -
  • 所有关键字不会自动成为完成列表的一部分
  • -
  • 修正了命名空间内函数和过程的成员查找问题
  • -
  • 提高大型项目的后台解析器速度
  • -
  • 修复从父类查找字段和属性的类型
  • -
  • 修正了 CSharp 项目无法找到 XSharp 项目引用输出的问题
  • -
  • 智能感应解析器现在可正确使用所有当前项目的编译器选项。
  • -
  • 当 X# 语言缓冲区被输入 C# 代码等 “垃圾 ”时,防止程序崩溃
  • -
    - 安装 - -
  • VS2017 的本地模板缓存和组件缓存未正确清除,现已修复。
  • -
  • 已添加代码,以便在安装时正确取消注册现有的 CodeDomProvider
  • -
    - 文档 - -
  • 现在隐藏了几个空章节。
  • -
  • 添加了模板说明
  • -
    - - - Changes in 0.2.10 - 该版本重点解决了 VO 和 Vulcan 兼容性方面的最后遗留问题,并为 Visual Studio 集成添加了大量新功能。 - 编译器 - VO/Vulcan 兼容性 - -
  • 我们已完成对 DEFINE 关键字的支持。类型子句现在是可选的。如果未指定类型,编译器将找出定义的类型。
    如果在编译时无法确定表达式(例如字面日期或符号),DEFINE 将被编译为函数类的常量字段或只读静态字段。
  • -
  • 我们扩展了预处理器 。它现在支持 #command、#translate、#xcommand 和 #xtranslate。此外,还支持 “伪函数” 定义,如 :

    #define MAX(x,y) IIF((x) > (y), (x), (y))

    其工作原理与 #xtranslate 相同,但定义是区分大小写的(除非启用了 “VO 兼容预处理器 ”选项 (/vo8).
    预处理器中唯一不起作用的是重复结果标记
  • -
  • 在 VO/Vulcan 模式下,编译器现在可以接受ENDIF 和 NEXT 等关键字与语句结尾之间的 “垃圾”,就像 VO 编译器一样。
    因此,您不必再删除 NEXT 或 ENDIF 之后的 “注释 ”标记。这将在不更改 VO 和 Vulcan 方言的情况下进行编译:

      IF X == Y
          DoSomething()
      ENDIF X == Y

      FOR I := 1 to 10
         DoSomething()
      NEXT I
    我们不推荐这种编码方式,但这种代码非常常见...
  • -
  • 修正了单引号字符串的识别问题。现在这些字符串被视为 STRING_CONST,编译器后台也进行了调整,以便在需要时将 STRING 字面量转换为 CHAR 字面量。
  • -
  • 在 VO 和 Vulcan 方言中,当使用编译器选项 /vo1 时,Init() 和 Axit() 方法允许使用不带值或返回值为 SELF 的 RETURN 语句。其他返回值将触发编译器警告并被忽略。
  • -
    - 新特性 / 更改的行为: - -
  • 编译器现在在源文件以未终止的多行注释结尾时会产生错误。
  • -
  • 添加了 ASTYPE 表达式,类似于其他语言中的 AS 结构。这将分配一个正确类型的值,如果表达式的类型不正确,则分配 NULL:
  • -
    - VAR someVariable := <AnExpression> ASTYPE <SomeType>
    - -
  • 如果参数是编译时常数,Chr() 和 _Chr() 函数现在会转换为字符串或字符字面量
  • -
  • 对于包含大量函数、过程、定义、全局或 _dll 函数的程序集,编译速度有所提高。
  • -
  • _DLL 函数现在会自动标记为 CharSet.Auto
  • -
  • 修正了冒号(:)和点号(.)互操作性与 super 关键字之间的一些不一致之处
  • -
  • 修正了 FOX 订阅者和其他用户报告的几个编译器问题。
  • -
    - Visual Studio - 新特性 / 更改的行为: - -
  • 经测试可与 Visual Studio 2017 发布版本一起使用
  • -
    - -
  • 我们在 VS 编辑器中添加了对区域的支持。目前,大多数 “实体 ”以及语句块、区域和使用列表、#includes 和注释都是可折叠的。
  • -
  • 我们在 VS 编辑器中添加了对成员和类型下拉菜单的支持
  • -
  • 我们在 VS 编辑器中添加了对代码自动补全的支持
  • -
  • 我们在 VS 编辑器中添加了对 "转到定义" 的支持
  • -
  • 现在,智能感应扫描检测到的错误也包含在 VS 错误列表中。
  • -
  • 我们为 VS 错误列表中的错误添加了帮助链接。帮助链接将带您进入 X# 网站上的相应页面。虽然不是所有的帮助页面都已完成,但至少基础架构已经正常运行。
  • -
  • 我们增加了对代码片段的支持,并在安装程序中加入了多个代码片段
  • -
  • 我们对项目属性对话框做了几处修改
  • - -
  • 生成前和生成后事件现在位于 “项目属性 ”的单独页面上。这些事件现在也不是按配置定义的,而是在不同配置之间共享。
    如果要将输出结果复制到不同配置的不同文件夹中,应使用 $(Configuration) 和 $(Platform) 变量
  • -
  • 我们已将 Platform 和 Prefer32Bits 属性移至 “生成” 页面,使其取决于配置
  • -
  • 修正了 AnyCPU 平台大小写的一个问题,该问题会导致 VS 平台组合框中出现重复项目
  • -
  • 添加了对 ARM 和 Itanium 平台类型的支持
  • -
  • 某些属性保存在没有平台标识符的项目文件组中。现已修复
  • -
  • 我们添加了一个项目属性,用于控制托管文件资源的包含方式:  使用与 Vulcan 兼容的托管资源
    如果为 “True”,则资源文件包含在程序集中,不带命名空间前缀。当 “False ”时,资源文件将以应用程序的命名空间作为前缀,就像其他 .Net 语言(如 C#)一样。
  • -
    -
    - -
  • 我们更正了一些代码生成问题
  • -
  • Windows 窗体编辑器中使用的解析器现在也能正确处理背景图片。无论是表单 resx 中的图像,还是共享项目资源中的背景图像
  • -
  • 我们为项目系统添加了 Nuget 支持。
  • -
  • 我们做了几处修改,以修复项目文件中的问题
  • - -
  • 项目系统现在可静默修复重复项目问题
  • -
  • 修正了 xaml 文件与其依赖的 designer.prg 文件和其他依赖文件之间的依赖关系问题
  • -
  • 修正了子文件夹或文件夹树中包含点的文件夹名称中的从属项的问题。
  • -
  • 修正了 WPF 模板中的一个问题
  • -
    -
    - -
  • 修复了删除引用节点时的刷新问题
  • -
  • 添加了 JetBrains 使用的 OAProject.Imports 属性的实现
  • -
    - XPorter - -
  • 修复了一个转换 WPF 风格项目的问题
  • -
    - - - Changes in 0.2.9 - 编译器 - 除了 Vulcan 没有发现的 Vulcan SDK 中的一些明显错误外,您可以在不做任何更改的情况下编译 Vulcan SDK! - 根据编译器的当前状态,我们认为编译器的 Vulcan 兼容性已经完成。现在,所有 Vulcan 代码的编译都不会出现问题。 - VO/Vulcan 兼容性 - 新特性 / 更改的行为: - -
  • 现在,所有 Init 程序都能在启动时正确调用。因此,不仅是 VOSDK 库中的 Init 程序,其他库中的 init 程序和主 exe 程序也会被正确调用。
  • -
  • 更改了方法和类型解析代码:
  • - -
  • 现在,带单一 object 参数的方法比带 Object[] 参数的方法更受青睐
  • -
  • 当一个函数(静态方法)和一个实例方法同时存在时,我们现在会在方法内部的代码中调用静态方法,而不会使用 SELF: 或 SUPER: 前缀。
  • -
  • 在使用 @ 操作符通过引用传递变量的情况下。
  • -
  • 使其与 Vulcan 更为兼容,以便使用不同数字类型的重载。
  • -
  • 优先选择有特定参数的方法,而不是有 usual 参数的方法
  • -
  • 为避免出现类型和命名空间同名的问题。
  • -
  • 当只传递一个参数时,优先选择带 OBJECT 参数的方法,而不是带 OBJECT[] 参数的方法
  • -
  • 当在引用程序集中检测到 2 个相同的函数或类型时,我们现在会像 Vulcan 一样选择第一个引用程序集中的函数或类型,并生成警告 9043
  • -
    -
    - -
  • sizeof 操作符现在返回 DWORD,以便与 VO 和 Vulcan 兼容。
  • -
  • 新增了对 EXIT PROCEDURES(PROCEDURE MyProcedure EXIT)的支持。这些程序将在程序关闭时自动调用,就在所有全局变量被清除之前。
    现在,编译器会为每个程序集生成一个 $Exit 函数,调用其中的退出程序,并清除程序集中的全局引用。在主程序中创建的 $AppExit() 函数将调用所有引用 X# 程序集中的 $Exit 函数。当引用 Vulcan 编译的程序集时,所有公共全局引用将从 $AppExit() 函数中清除。
  • -
  • 添加了对 PCALL PCALLNATIVE 的支持
  • -
  • 添加了对多个 Vulcan 兼容编译器选项的支持:
  • - -
  • /vo1 允许在构造函数和销毁函数中使用 Init() 和 Axit() 函数
  • -
  • /vo6 允许(全局)函数指针。DotNet 不 “认识 ”这些指针。它们被编译为 IntPtr。函数信息将被保留,因此您可以在 PCALL() 中使用这些指针。
  • -
  • /ppo 将预处理后的编译器输出保存到文件中
  • -
  • /Showdefs 在控制台上显示定义及其值的列表
  • -
  • /showincludes 在控制台上显示包含的头文件列表
  • -
  • /verbose 在控制台上显示包含、源文件名、定义等信息。
  • -
  • DEFAULT TO 命令
  • -
  • ACCEPT 命令
  • -
  • WAIT 命令
  • -
    -
    - -
  • 若干代码生成变更:
  • - -
  • 更改了 VOStruct 数组内 DIM 元素的代码生成,因为 Vulcan 编译器依赖于特定的命名方案,无法识别我们的名称。
  • -
  • 改进了使用 CLIPPER 调用约定的方法内部代码生成。
  • -
    -
    - Bug 修复 - -
  • 现在,只有启用 /ins 编译器选项时,才会使用隐式命名空间。在 Vulcan 方言中,命名空间 Vulcan 总是包含在内。
  • -
  • 修正了 @ 操作符和 VOSTRUCT 类型的几个问题
  • -
  • 修复了 VOSTRUCT 类型的 DIM 数组的一个问题
  • -
  • 修正了 VOSTRUCT 和 UNION 类型中 LOGIC 值的问题
  • -
  • 修正了 VOStyle _CAST 和转换操作符的几个问题。
  • -
  • 修正了几个数字转换问题
  • -
  • 修正了混合使用 NULL、NULL_PTR 和 NULL_PSZ 时的若干问题
  • -
  • 修正了 _CAST 操作符的几个问题
  • -
  • 修正了 PSZ 比较的几个问题。X# 现在可以像 Vulcan 和 VO 一样工作,并产生相同(有时无用)的结果
  • -
  • 修正了多维 XBase 数组 USUAL 数组索引的一个问题
  • -
  • 修正了最后表达式为 VOID 的代码块问题
  • -
  • 更改了 NULL_SYMBOL 的代码生成
  • -
  • 预处理器 #defines 有时会与类名或命名空间名冲突。例如,当选择 /vo8 时,System.Diagnostics.Debug.WriteLine() 方法无法调用,因为 DEBUG 定义删除了类名。我们修改了预处理器,使其不再替换 DOT 或 COLON 操作符前后的单词。
  • -
  • 修复了启用后期绑定后调用 System.Object 类中静态方法时编译器崩溃的问题
  • -
  • 修正了 PROPERTY GET 和 PROPERTY SET 中的 String2Psz() 问题
  • -
  • 还有很多更改。
  • -
    - 所有方言 - 新特性 / 更改的行为: - -
  • 对代码生成进行了多项修改:
  • - -
  • ACCESS 和 ASSIGN 的代码生成已发生变化。类中不再有单独的方法,但这些方法的内容现在已内联到生成属性的 Get 和 Set 方法中。
  • -
  • 优化了 IIF 语句的代码生成。
  • -
  • 调试器/步骤信息已得到改进。调试器现在也应在 IF 语句、FOR 语句、CASE 语句等语句时停止。
  • -
    -
    - -
  • 对使用 SELF 关键字定义的属性的索引访问现在也可以使用 “Index”属性名了
  • -
  • 暂时不允许使用类内函数和过程
  • -
  • ASSIGN 方法内的 RETURN <LiteralValue> 将不再分配变量并产生警告
  • -
  • 现在有几个关键字也可以作为标识符(不再需要@@作为前缀):
    Delegate, Enum, Event, Field, Func, Instance, Interface, Operator, Proc, Property, Structure, Union, VOStruct
    因此,以下代码现在是有效代码(但不推荐使用):

    FUNCTION Start AS VOID
      LOCAL INTERFACE AS STRING
      LOCAL OPERATOR AS LONG
      ? INTERFACE, OPERATOR
      RETURN
  • -
    - 您可以看到,Visual Studio 语言支持还识别出 INTERFACE 和 OPERATOR 在此上下文中不作为关键字使用 - Bug 修复 - -
  • 修正了 REPEAT UNTIL 语句的一个问题
  • -
  • 修正了包含 DO CASE 但没有匹配 END CASE 的代码崩溃问题
  • -
  • 修正了 _DLL FUNCTION 和 _DLL PROCEDURE 代码生成中的几个问题
  • -
  • 修正了在程序集中嵌入本地资源的问题(在 Roslyn 代码中)。
  • -
  • 修正了_OR() 和 _AND()运算符在使用 2 个以上参数时出现的问题。
  • -
  • 已添加使用 VO/Vulcan 语法对指针取消引用的支持: DWORD(p) => p[1]
  • -
  • 修正了 @ 操作符的几个问题
  • -
  • 当两个分部类具有相同的名称和不同大小写时,编译器无法正确合并类的定义。
  • -
  • 当代码中的 #define 与命令行中的定义相同时,修复了崩溃问题
  • -
  • 索引指针访问不遵守 /AZ 编译器选项(总是假定基于 0 的数组)。现已修复
  • -
  • 修正了预处理文件的缓存问题,尤其是包含 #ifdef 结构的文件。
  • -
  • 修正了当两个分部类名称相同但大小写不同时可能出现的问题
  • -
  • 修正了当引用的程序集有重复命名空间时编译器崩溃的问题。
  • -
  • 修正了带有 [DllImport] 属性的函数的问题。
  • -
  • ACCESS/ASSIGN 方法的错误信息有时会指向源文件中一个奇怪的位置。这一问题已得到修复。
  • -
  • 修正了带有 STATIC 修饰符的 Init 程序的问题
  • -
  • 修正了预处理器在检测头文件的编码时出现的问题。这可能会导致在读取带有特殊字符(如版权标志 ©)的头文件时出现问题。
  • -
  • 还有很多修复
  • -
    - Visual Studio 集成 - -
  • 在用户界面和生成系统中添加了对所有编译器选项的支持
  • -
  • 修复了子文件夹中依赖文件项的问题
  • -
  • 优化编译器选项不起作用
  • -
  • "清除" 生成选项现在还能清除错误列表
  • -
  • 在某些情况下,即使输出窗格中有信息,错误列表仍然是空的。这一问题已得到解决。
  • -
  • xsproj 文件中的 <Documentationfile> 属性会导致项目重建,即使源代码没有更改也是如此
  • -
  • 早期版本的 XPorter 创建的 xsproj 文件可能无法正常生成。现在,项目系统会自动修复这一问题
  • -
  • 修正了一个与生成系统和某些嵌入式托管资源有关的问题
  • -
    - - 文档 - -
  • 我们在命令行选项中增加了许多描述
  • -
  • 我们添加了最常见的编译器错误和警告
  • -
    - - - Changes in 0.2.8 - 编译器 - VO/Vulcan 兼容性 - -
  • 默认参数现在可以像 VO 和 Vulcan 一样处理。这意味着您也可以将日期常量、符号常量等作为默认参数
  • -
  • 字符串 “单个等号” 规则现在与 “可视对象” 100% 相同。我们发现有一种情况,Vulcan 返回的结果与 Visual Objects 不一致。我们选择与 VO 兼容。
  • -
  • 在 VO/Vulcan 模式下编译时,将自动调用 VO SDK 库中的启动程序。您不必再在代码中调用这些程序。 此外,主程序集中的初始程序也会在启动时被调用。
  • -
  • 实现了 /vo7 编译器选项(隐式转换)。这还包括支持在 REF 参数中使用 @ 符号
  • -
  • 现在,您可以使用 DOT 操作符访问 VOSTRUCT 变量中的成员了
  • -
  • 我们修复了几个 USUAL - 其他类型转换问题,这些问题在以前的版本中需要进行转换
  • -
  • 现在,编译器可以正确解析包含 DECLARE METHOD、DECLARE ACCESS 和 DECLARE ASSIGN 语句的 VO 代码,并忽略这些语句。
  • -
  • 现在,编译器会将 “VO Style ”编译器 pragma(~“keyword”)解析为空格,并忽略这些空格。
  • -
  • 修正了一个问题,即使用 “LOCAL aSomething[10] AS ARRAY ”语法声明的数组不会以适当的元素数初始化
  • -
  • 修正了使用单个 USUAL 参数调用 Clipper Calling Convention 构造函数时出现的问题
  • -
  • _DLL 实体上的属性无法正确编译。这些属性暂时会被识别,但会被忽略。
  • -
  • 修正了几个数字转换问题
  • -
    - 新特性 - -
  • 我们添加了对集合初始化Object 初始化程序的支持
  • -
  • 匿名类型成员不再需要命名。如果选择一个属性作为匿名类型成员,那么匿名类型也将使用相同的属性名称。
  • -
  • 缺失的结束关键字(如 NEXT、ENDIF、ENDCASE 和 ENDDO)现在会产生更好的错误信息
  • -
  • 现在,IIF() 表达式也可以作为表达式语句使用。生成的代码与 IF 语句相同
  • -
    - FUNCTION IsEven(nValue as LONG) AS LOGIC
      LOCAL lEven as LOGIC
      IIF( nValue %2 == 0, lEven := TRUE, lEven := FALSE)
    RETURN lEven
    - 我们确实不鼓励隐藏赋值操作,但如果您确实使用了这种编码风格,它现在可以正常工作<g>。 - -
  • 现在允许将 AS VOID 作为 PROCEDURE 的(唯一)类型规范
  • -
  • 我们在 exe 中为共享编译器添加了一个 .config 文件,它应该能让编译器运行得更快。
  • -
  • 现在,编译时会自动包含 XSharp 中的 XSharpStdDefs.xh 文件。该文件暂时声明了 CRLF 常量。
  • -
  • 编译器现在会缓存包含文件。这将提高依赖大型包含文件(如 Vulcan 的 Win32APILibrary 头文件)的项目的编译速度。
  • -
  • 如果在外部程序集中找到一个函数,而在当前程序集中找到一个具有相同名称和参数的函数,那么编译器将使用当前程序集中的函数
  • -
  • 改进编译器关于缺少闭合符号的错误信息
  • -
  • 改进了意外标记的编译器错误信息
  • -
    - Bug 修复 - -
  • 编译器没有正确处理几个带减号的命令行选项
  • -
  • 修复了与向后期绑定的属性分配 NULL_OBJECT 或 NULL 有关的若干崩溃问题
  • -
  • 分部类不再需要在每个源代码位置指定父类型。当然,指定时父类型必须相同。类实现的父接口也可以分布在多个位置上
  • -
  • 我们更正了在大型包含文件中出现错误/警告时可能导致崩溃的问题
  • -
  • 抽象方法不再使用 /vo3 获得虚修饰符
  • -
  • 修正了子类中的虚方法会隐藏父类方法的问题
  • -
  • 自动返回值生成也会生成 ASSIGN 方法的返回值。这一问题已得到修复。
  • -
  • 我们修复了 LINQ 表达式的连接子句中一个会导致编译器异常的问题
  • -
  • /vo10(兼容 iif)编译器选项不再在 Core 方言中添加强制转换。只有 VO/Vulcan 方言才会这样做
  • -
    - Visual Studio 集成 - 我们更改了错误列表和输出窗口的更新方式。在以前的版本中,输出窗口中可能会缺少某些行,而且错误代码列是空的。现在应该可以正常工作了。 - -
  • 我们从其他一些基于 MPF 的项目系统中合并了一些代码,如 WIX(称为 Votive)、NodeJS 和 Python(PTVS),以帮助扩展我们的项目系统。因此
  • - -
  • 我们的项目系统现在支持链接文件
  • -
  • 我们的项目系统现在支持 “显示所有文件”,您现在可以包含和排除文件。该设置会保存在 .user 文件中,因此您可以根据需要将其从 SCC 中排除。
  • -
  • 我们做了一些更改,以更好地支持 “拖放 ”功能
  • -
    -
    - -
  • 我们更正了几个与从属项目有关的问题
  • -
  • 在包含表单或用户控件的文件中加入表单或用户控件时,现在可以识别这些表单或控件,并在项目文件中设置相应的子类型,这样就可以打开窗口表单编辑器了
  • -
  • 我们现在支持为 .Settings 和 .Resx 文件生成源代码。
  • -
  • 托管资源编辑器和托管设置工具中可在内部代码和公共代码之间进行选择的组合框现已启用。在组合框中选择不同的值将改变文件属性中的工具。
  • -
  • 编译器和本地资源编译器的最后响应文件现在保存在用户 Temp 文件夹中,以帮助调试问题。
  • -
    - -
  • 现在,响应文件将每个编译器选项都放在新的一行,以便在必要时更容易阅读和调试。
  • -
  • 代码生成现在保留了实体(方法)之间的注释
  • -
  • 我们修复了模板中的几个小问题
  • -
  • 当错误和警告的数量大于 500 的内置限制时,将显示一条信息,说明错误列表已被截断
  • -
  • 在生成过程结束时,输出窗口将写入一行内容,列出发现的警告和错误总数
  • -
  • 源代码编辑器中的颜色现在与 C# 和 VB 等标准语言的源代码编辑器共享。
  • -
  • 如果源代码中有一个不活动的代码段,并嵌入了一个计算值为 FALSE 的 #ifdef,那么该代码段将显示为灰色,并且不会出现关键字高亮显示。编辑器的源代码分析器会获取包含文件并尊重路径设置。应用程序属性对话框和活动配置中的定义尚未得到尊重。这将在下一个版本中实现。
  • -
    - - - Changes in 0.2.7.1 - 编译器 - -
  • 编译器不接受 AssemblyFileVersion 属性和 AssemblyInformationVersion 属性的通配符字符串。现已修复
  • -
  • 无法识别 #Pragma 命令 #Pragma Warnings(Push) 和 #Pragma Warnings(Pop)。现已修复。
  • -
  • 编译器无法识别 global::System.String.Compare(..) 这样的表达式。现已修复
  • -
    - Visual Studio 集成 - -
  • 无法正确识别项目子文件夹中的从属项目,打开项目时可能会出错
  • -
  • 修复了 VulcanApp 模板中的一个问题
  • -
  • Windows 窗体编辑器无法打开没有 begin namespace ... end namespace 的文件中的窗体。现已修复
  • -
  • 源代码文件中 “实体” 之间的源代码注释现在可以正确保存,并在表单编辑器重新生成源代码时恢复原状
  • -
  • 抑制生成源代码中不必要的空行
  • -
  • XPorter 工具现在是安装程序的一部分。
  • -
  • 续行符后的注释未正确着色
  • -
  • 更改了 XSharp VS 编辑器的配色方案,使某些项目更易于阅读
  • -
  • 新的托管资源文件不会被标记为适当的项目类型。因此,资源在运行时不可用。这一问题已得到修复。
  • -
  • 在属性窗口中添加了 “Copy to Output Directory(复制到输出目录)” 属性
  • -
    - 安装 - -
  • 现在,installer.exe 文件和文档都有证书签名
  • -
    - - - Changes in 0.2.7 - 编译器 - 新特性: - -
  • 已添加对 VOSTRUCT 和 UNION 类型的支持
  • -
  • 添加了对作为数值的类型的支持,例如在构造
    IF UsualType(uValue) == LONG
  • -
  • 为变量添加了 FIXED 语句和 FIXED 修饰符
  • -
  • 已添加对 插值字符串的支持
  • -
  • 现在允许在 SWITCH 语句中使用空开关标签。它们可以与下一个标签共享执行。
    新增了错误 9024(SWITCH 语句内不允许使用 EXIT 语句),如果尝试退出围绕 switch 语句的循环,则会出现该错误。
    这是不允许的。
  • -
  • 已添加对多个 /vo 编译器选项的支持:
    - vo8(兼容预处理器行为)。这使得预处理器定义不区分大小写。此外,值为 FALSE 或 0 的定义将被视为 “未定义”。
    - vo9(允许缺失 Return 语句)编译器选项。使用 /vo9 时也允许缺少返回值。
    新增警告 9025(缺少 RETURN 语句)和 9026(缺少 RETURN 值)。
    - vo12(Clipper 整数除法)
  • -
  • 现在,预处理器会自动定义从 __VO1__ 到 __VO15__ 的,根据编译器选项的设置,宏值为 TRUE 或 FALSE。
  • -
  • FOX 订阅版本的编译器现在以 Release 模式发布,速度更快。此外,还安装了调试版本的编译器,以便在需要时帮助查找编译器问题。
  • -
    - 更改的行为 - -
  • 编译器为 Core 方言生成的 Globals 类现在称为 Functions,而不再是 Xs$Globals。
  • -
  • 现在,重载 VulcanRTFuncs 中的函数无需指定命名空间:
    当编译器找到两个候选函数,其中一个在 VulcanRTFuncs 中,那么就会选择不在 VulcanRTFuncs 中的函数。
  • -
  • 现在,VO/Vulcan 方言的 9001 号警告(隐含不安全修饰符)已被抑制。不过,如果编译不安全代码,必须通过 /unsafe 编译器选项!
  • -
  • 改进了编译器发布模式的错误信息
  • -
    - Bug 修复 - -
  • Switch 语句中的 RETURN 和 THROW 语句会产生 “代码不可达” 警告。现已修复
  • -
  • 修复了有符号和无符号数组索引混合使用时的几个问题
  • -
  • 修正了 FOR ... NEXT 语句的几个问题。现在,“To ”表达式将在循环的每次迭代中进行计算,就像在 VO 和 Vulcan 中一样。
  • -
  • 修复了若干编译器崩溃问题
  • -
  • 修正了构造函数隐式代码生成的问题
  • -
  • 修正了静态函数内静态变量的可见性问题
  • -
    - Visual Studio 集成 - -
  • 修正了在同一个 Visual Studio 中使用 XSharp 和 Vulcan.NET,以及从输出窗口或查找结果窗口打开文件时选择了错误的语言服务的问题
  • -
  • 修正了生成代码中 “异常” 行尾的一些问题
  • -
  • 修正了类库模板中的一个问题
  • -
  • 修正了启动调试器时使用非标准命令行的问题
  • -
    - - Changes in 0.2.6 - 编译器 - -
  • 已添加事件定义的替代语法。请参阅文档中的 EVENT 关键字
  • -
  • 增加了代码块支持
  • -
  • 实现了 /vo13(兼容 VO 的字符串比较)
  • -
  • 已添加对 /vo4(与 VO 兼容的隐式数字转换)的支持
  • -
  • 现在完全支持别名表达式
  • -
  • 修正了 &= 运算符的一个问题
  • -
  • 修正了几处源代码不正确导致的崩溃。
  • -
  • 修正了几个与 usual、float 和 date 的隐式转换有关的问题
  • -
  • 索引属性(如 String:Chars)现在可按名称使用
  • -
  • 索引属性现在可以使用不同参数类型的重载
  • -
  • 已添加对索引式 ACCESS 和 ASSIGN 的支持
  • -
  • 修复了在调用 Clipper Calling Convention 函数和/或方法时使用单个参数的问题
  • -
  • 修复了预处理器中定义的崩溃问题
  • -
  • _CODEBLOCK 现在是 CODEBLOCK 类型的别名
  • -
  • 修正了使用括号或方括号定义但不带实际参数的属性的崩溃问题
  • -
    - Visual Studio 集成 - -
  • 完成对 Windows.Forms 的 .designer.prg 支持
  • -
  • 修复了 CodeDom 生成器在为服务生成包装器时的一个问题
  • -
  • XSharp语言服务将不再用于Vulcan PRG文件的Side by Side安装。
  • -
  • 改进了编辑器处理大型源文件的性能。
  • -
  • 现在,所有生成的文件都以 UTF 格式存储,以确保特殊字符的正确存储。如果在生成代码时看到有关代码页转换的警告,请从 Visual Studio 菜单中选择 “文件 - 高级保存选项”,然后选择 Unicode 文件格式,将文件保存为 UTF 格式。
  • -
    - - Changes in 0.2.51 - Visual Studio 集成 & 生成系统 - -
  • 本地资源编译器现在能 “找到 ”头文件,如 Vulcan.NET include 文件夹中的 “VOWin32APILibrary.vh”。此外,在 “正常 ”信息模式下运行时,资源编译器的输出现在不再那么冗长。在 “详细 ”或 “诊断 ”模式下运行时,输出现在也包括资源编译器的冗长输出。
  • -
    - 编译器 - -
  • 修正了一个会导致 PDB 文件无法使用的问题
  • -
  • "重复定义但值不同“(9012)的错误已改为警告,因为我们的预处理器进行文本比较时,并没有  ”看到“ ”10 “ 和 ”(10)“ 以及 ”0xA“ 和 ”0xa" 是相同的。当然,您有责任确保这些值确实相同。
  • -
  • 指数 REAL 常量只能使用小写字母 “e”。现在不区分大小写了
  • -
  • 对解析器的 _DLL FUNCTION 和 _DLL PROCEDURE 规则做了一些修改。现在,我们能正确识别 “DLL 提示”(#123),并允许在这些定义中进行扩展。顺序号也能正确解析,但会产生错误 (9018),因为 .Net 运行时不再支持这些顺序号。此外,调用约定现在是强制性的,生成的 IL 代码包括 SetLastError = true 和 ExactSpelling = true。
  • -
  • 修正了 ~ 运算符的一个问题。VO 和 Vulcan(以及 X#)将该运算符用作一元运算符和二元运算符。
    一元运算符进行 bitwise negation(一元补码),二元运算符进行 XOR。
    这与 C# 不同,在 C# 中,~ 运算符是 Bitwise Negation,^ 运算符是 XOR(当然,我们的 Roslyn 后端使用的是 C# 语法)。
  • -
    - - Changes in 0.2.5 - Visual Studio 集成 - -
  • 修正了为 WPF 生成时输出文件名包含管道符号的问题
  • -
  • 修复了 WPF 表单、页面和用户控件的项目类型问题
  • -
  • 安装程序现在可以选择不从已安装的 Vulcan 项目系统中删除 PRG、VH 和 PPO 项目的关联。
  • -
  • 在项目中添加了对几种新项目类型的支持
  • -
  • 新增对嵌套项目的支持
  • -
  • 为 WPF、RC、ResX、设置、位图、光标等添加了多个项目模板。
  • -
    - 生成系统 - -
  • 添加了对新的 /vo15 命令行开关的支持。
  • -
  • 添加了对编译本地资源的支持。
  • -
    - 编译器 - -
  • 使用 VO/Vulcan 方言编译时,现在必须引用 VulcanRT 和 VulcanRTFuncs。
  • -
  • 为 VO/Vulcan 数组的索引访问添加了支持
  • -
  • 已添加对 VO/Vulcan 风格构造器链的支持(其中 SUPER() 或 SELF() 调用不是构造器主体内的第一次调用)
  • -
  • 在 VO/Vulcan 方言中添加了对 &() 宏操作符的支持
  • -
  • 在 VO/Vulcan 方言中添加了对 FIELD 语句的支持
  • -
    - - -
  • 该语句被编译器识别
  • -
  • FIELD 语句中列出的字段现在优先于同名的局部变量或实例变量
  • -
    -
    - -
  • 在 VO/Vulcan 方言中添加了对 ALIAS 操作符 (->) 的支持,但别名表达式 (AREA->(<Expression>) 除外。)
  • -
  • 已添加对后期绑定代码的支持(在 VO/Vulcan 方言中)
  • -
    - - -
  • 后期绑定方法调用
  • -
  • 后期绑定属性 get
  • -
  • 后期绑定属性 set
  • -
  • 后期绑定的委托调用
  • -
    -
    - -
  • 新增了 /vo15 命令行选项(允许未类型化的局部变量和返回类型):
    默认情况下,VO/Vulcan 方言允许缺失类型,并用 USUAL 类型替换。
    如果指定 /vo15-,则不允许使用未类型化的 locals 和返回类型,必须指定它们。
    当然,您也可以将它们指定为 USUAL
  • -
    - -
  • 在为 VO/Vulcan 方言编译时,? 和 ?? 语句现在可直接映射到相应的 VO/Vulcan 运行时函数。
  • -
  • 我们现在还支持 VO 和 Vulcan 方言的 VulcanClassLibrary 属性和 VulcanCompilerVersion 属性。
    有了这种支持,Vulcan 宏编译器和 Vulcan Runtime 应该能够找到我们的函数和类
  • -
  • 现在,生成的静态类名称与 VO & Vulcan 方言中 Vulcan 生成的类名称更加一致。
  • -
  • 为 USUAL 类型添加了几种隐式转换操作。
  • -
  • 在访问 VO & Vulcan 方言中的某些功能(如 USUAL 类型)时,编译器现在会检查是否包含 VulcanRTFuncs.DLL 和/或 VulcanRT.DLL。
    如果没有,则会显示有意义的错误信息。
  • -
  • 已添加对固有函数 _GetInst() 的支持
  • -
  • 修正了区分大小写的命名空间比较的一个问题
  • -
  • 修正了 operator 方法中的一个问题
  • -
    - -
  • 添加了预处理器宏 __DIALECT__, __DIALECT_CORE__, __DIALECT_VO__ 和 __DIALECT_VULCAN__
  • -
  • _Chr() 伪函数现在将被映射为 Chr() 函数
  • -
    - -
  • 已添加对参数列表中缺少参数的支持(仅限 VO 和 Vulcan 方言)
  • -
  • 修正了计算头文件中标记位置时的崩溃问题
  • -
  • 现在,安装程序会将 Vulcan 头文件复制到 XSharp Include 文件夹中
  • -
  • 已添加在 (VO) 字面数组构造函数中跳过参数的支持
  • -
    - 文档 - -
  • 在 Visual Studio 帮助集中添加了 XSharp 文档
  • -
  • 已添加 Vulcan 运行时参考文档
  • -
    - - Changes in 0.2.4 - Visual Studio 集成 - -
  • 双击错误浏览器中的错误现在可以正确打开源文件并定位光标
  • -
  • 修正了项目和项目模板中的几个问题
  • -
  • 现在,安装程序还会检测 Visual Studio 15 预览版,并在此环境中安装我们的项目系统。
  • -
    - 生成 - -
  • 修正了 /unsafe 编译器选项的一个问题
  • -
  • 修正了 /doc 编译器选项的一个问题
  • -
  • 总是将警告视为错误。现已修复。
  • -
    - 编译器 - -
  • 已添加对带有表达式列表的 Lambda 表达式的支持
  • -
    - LOCAL dfunc AS System.Func<Double,Double> - dfunc := {|x| x := x + 10, x^2} - ? dfunc(2) - -
  • 已添加对带有语句列表的 Lambda 表达式的支持
  • -
    - LOCAL dfunc AS System.Func<Double,Double> - dfunc :={|x| - ? 'square of', x - RETURN x^2 - } - -
  • 添加了对 NAMEOF 固有函数的支持
  • -
    - FUNCTION Test(cFirstName AS STRING) AS VOID - FUNCTION Test(cFirstName AS STRING) AS VOID - IF String.IsNullOrEmpty(cFirstName) - THROW ArgumentException{"Empty argument", nameof(cFirstName)} - ENDIF - -
  • 已添加对使用 Clipper 调用约定创建方法和函数的支持(仅限 VO 和 Vulcan 方言)
  • -
  • Using 语句现在可以包含变量声明:
  • -
    - 原来: -    VAR ms := System.IO.MemoryStream{} -    BEGIN USING ms -         // do the work - - END USING - 现在: - BEGIN USING VAR ms := System.IO.MemoryStream{} - // do the work - END USING - -
  • 已添加对 /vo10(兼容 IIF 行为)的支持。在 VO 和 Vulcan 方言中,表达式被转换为 USUAL。在 Core 方言中,表达式被转换为 OBJECT。
  • -
    - VO 和 Vulcan 方言的新语言特性 - -
  • 现在允许在构造函数的任何位置调用 SELF() 或 SUPER() 构造函数(仅限 VO 和 Vulcan 方言)。Core 方言仍要求将构造函数链作为构造函数主体内的第一个表达式
  • -
  • 已添加对 PCOUNT、_GETFPARAM 和 _GETMPARAM 固有函数的支持
  • -
  • 已添加对 String2Psz() 和 Cast2Psz() 的支持
  • -
  • 已添加对 BEGIN SEQUENCE ... END 的支持
  • -
  • 增加了对 BREAK 的支持
  • -
    - 已修复的问题: - -
  • 嵌套的数组初始化器
  • -
  • BREAK 语句的崩溃
  • -
  • 泛型参数的 Assertion 错误
  • -
  • 关于常量隐式引用的 Assertion
  • -
  • 允许在构造函数上使用 ClipperCallingConvention 属性,即使该属性被标记为 “仅适用于方法” 也是如此
  • -
  • 修正了全局常量声明的一个问题
  • -
  • 索引属性内的 __ENTITY__ 预处理器宏
  • -
    - - Changes in 0.2.3 - Visual Studio 集成 - -
  • 我们已改为使用 Visual Studio Integration 的 MPF 风格。
  • -
  • 我们增加了对 Windows 窗体编辑器的支持
  • -
  • 我们增加了对 WPF 编辑器的支持
  • -
  • 我们已添加了对 Codedom Provider 的支持,这意味着上述两个编辑器将使用解析器和代码生成器
  • -
  • 对项目属性页面进行了详细说明。现在可以使用更多的功能。
  • -
  • 我们添加了几个模板
  • -
    - 生成系统 - -
  • 新增了对多个命令行选项的支持,如 /dialect
  • -
  • 运行共享编译器时,命令行选项未正确重置。这一问题已得到修复。
  • -
    - -
  • 生成系统会将传给 Visual Studio 的错误数量限制为每个项目最多 500 个。命令行编译器仍会显示所有错误。
  • -
    - 编译器 - -
  • 我们已开始为 Vulcan 提供自带运行时支持。请参见下面的单独标题。
  • -
  • 现在还支持 __SIG__ 和 __ENTITY__ 宏,以及 __WINDIR__ 、 __SYSDIR__ 和 __WINDRIVE__ 宏。
  • -
  • 调试器说明已得到改进。使用此版本,你将获得更好的调试体验
  • -
  • 一些表明类型与方法参数、返回类型或属性类型之间存在可见性差异的错误已变为警告。当然,您应该考虑在代码中修正这些问题。
  • -
  • #Error 和 #warning 预处理器命令不再要求参数为字符串
  • -
  • 现在,编译器会对 SLen() 函数调用进行内联(就像在 Vulcan 中一样)
  • -
  • AltD() 函数将在 IF System.Diagnostics.Debugger.IsAttached 检查中插入对 “System.Diagnostics.Debugger.Break” 的调用。
  • -
  • 修复了若干编译器崩溃问题
  • -
  • 为方法和函数参数添加了 PARAMS 关键字支持。
  • -
  • 修正了 DYNAMIC 类型的一个问题。
  • -
    - BYOR - -
  • 正确解析 XBase 类型名称(ARRAY、DATE、SYMBOL、USUAL 等)
  • -
  • 现在可正确解决字面值问题(ARRAY、DATE、SYMBOL)
  • -
  • NULL_ 字面已正确解析(NULL_STRING 遵循 /vo2 编译器选项、NULL_DATE、NULL_SYMBOL)。
  • -
  • 已启用 /vo14 编译器选项(浮点字面量)
  • -
  • 编译器会自动在每个程序中插入 “Using Vulcan ”和 “using static VulcanRtFuncs.Functions”。
  • -
  • 您必须在项目中添加对 VulcanRTFuncs 和 VulcanRT 程序集的引用。这可能是 Vulcan 3 和 Vulcan 4 版本的运行时。也许 Vulcan 2 也能运行,但我们没有测试过。
  • -
  • 使用 Clipper 调用约定调用方法的效果符合预期。
  • -
  • 没有返回类型的方法/函数被视为返回 USUAL
  • -
  • 如果方法/函数包含类型化和类型化参数,那么未类型化的参数被视为 USUAL 参数
  • -
  • 暂不支持仅包含非类型参数(Clipper 调用约定)的方法
  • -
  • ? 命令将对参数调用 AsString()
  • -
    - - Changes in 0.2.2 - Visual Studio 集成 - -
  • 添加了更多项目属性。其中一个新属性是 “使用共享编译器” 选项。这将提高编译速度,但可能会产生副作用,即某些编译器(解析器)错误不会显示在详细信息中。
    如果您遇到这种情况,请禁用该选项。
  • -
  • 为生成系统添加了更多属性。现在,X# 也应支持所有 C# 属性,尽管其中一些在 VS 内部的属性对话框中不可见。
  • -
  • 为生成系统添加了 CreateManifest 任务,因此包含托管资源的项目不会再出现错误
  • -
  • 该版本的编辑器性能应该会更好。
  • -
  • 将文本块标记为注释或取消标记并不总是在编辑器颜色中反应变化。这一问题已得到修复。
  • -
    - 编译器 - -
  • 我们添加了第一版预处理器。该预处理器支持 #define 命令、#ifdef、#ifndef、#else、#endif、#include、#error 和 #warning。 目前还不支持 #command 和 #translate(添加用户定义的命令)。
  • -
  • 缺少类型(参数列表、字段定义等)有时会产生不明确的错误信息。我们修改了编译器,使其产生 “缺少类型 ”的错误信息。
  • -
  • 我们将 Roslyn 的底层代码推进到了 VS 2015 Update 1。虽然从外观上看不出什么变化<g>,但编译器中已经加入了一些修复和增强功能。
  • -
  • 添加了 YIELD EXIT 语句(也可使用 YIELD BREAK)。
  • -
  • 添加了 OVERRIDE 关键字(可选),该关键字可用作子类中被重载的虚方法的修饰符。
  • -
  • 添加了一个 NOP 关键字,您可以在故意为空的代码(例如 case 语句的其他分支)中使用该关键字。如果在代码中插入 NOP 关键字,编译器将不再对空代码块发出警告。
  • -
  • OnOff 关键字可能会导致问题,因为它们不是位置关键字(它们是 pragma 语句的一部分)。这一问题已得到解决。
  • -
  • 带有一个参数的 _AND()_OR() 表达式现在会引发编译器错误。
  • -
  • 编译器现在可以识别 /VO14(将字面量存储为浮点数)编译器开关(尚未实施)。
  • -
  • 添加了 ** 操作符作为 ^(指数)操作符的别名。
  • -
  • 在字符串上使用减运算符时,添加了 “不支持 ”错误。
  • -
  • 修正了编译器中的一个 “堆栈溢出” 错误,该错误可能会在很长的表达式中出现。
  • -
  • 右移操作符不再与两个 “大于 ”操作符冲突,这使您可以声明或创建泛型,而不必在它们之间留出空格。
    (var x := List<Tuple<int,int>>{}
  • -
    - - Changes in 0.2.1 - Visual Studio 集成 - -
  • 添加并改进了多个项目属性
  • -
  • 修复 “附加编译器选项” 的问题
  • -
  • 改进编辑器中关键词、注释等的颜色。你可以在 “工具/选项 ”对话框的 “常规/字体和颜色 ”下设置颜色。查找名称为 “XSharp"( 关键字)的条目。
  • -
  • 已添加 Windows 窗体模板
  • -
    - 编译器 - -
  • 若干错误已降级为警告,以便与 VO/Vulcan 更好地兼容
  • -
  • 添加了对以星号开头的注释行的支持
  • -
  • 已添加对 DEFINE 语句的支持。目前,DEFINE 语句的类型必须是
    DEFINE WM_USER := 0x0400 AS DWORD
  • -
  • 修正了反向 GET 和 SET 的单行属性问题
  • -
  • 结合 /VO3 兼容性选项对虚方法和非虚方法进行了多项修复
  • -
    - - Changes in 0.1.7 - -
  • "ns"(为没有命名空间的类添加默认命名空间)已经实现
  • -
  • 实现了 “vo3” 编译器选项(使所有方法都成为虚方法)。
  • -
  • 修正了括号之间表达式的发送操作符编译不正确的问题
  • -
  • 现在支持字符串的关系运算符(>, >=, <, <=)。它们使用 String.Compare() 方法实现。
  • -
  • 修正了在 FOR ... NEXT 语句的起始行声明局部变量时出现的问题
  • -
  • 添加了 CHM 和 PDF 格式的第一版文档
  • -
  • 在 Visual Studio 项目属性对话框中添加了几个属性,以便设置新的编译器选项
  • -
  • 修正了 MsBuild 使用的目标文件中的一个问题,因为某些标准宏(如 $(TargetPath))无法正常工作
  • -
  • 包含 XIDE 0.1.7。该版本的 XIDE 完全使用 XSharp .NET 技术编译!
  • -
  • 某些 MsBuild 支持文件的名称已更改。这可能会导致在加载 VS 项目时出现问题,如果你使用的是上一个版本中的 VS 支持文件的话。如果是这种情况,请在 Visual Studio 中编辑 xsproj 文件,并将 “XSharpProject ”的所有引用替换为 “XSharp”。然后确保 xsproj 文件的安全,并尝试重新加载项目
  • -
  • WHILE. ENDDO(没有前导 DO 的 DO WHILE)现在可以正确识别了
  • -
    - - Changes in 0.1.6 - -
  • 该版本现在附带安装程序
  • -
  • 该版本包含 Visual Studio 集成的第一个版本。您可以在 Visual Studio 中进行编辑、生成、运行和调试。没有 “intellisense ”功能。
  • -
  • 编译器现在使用以 1 为基础的数组,“az ”编译器选项可将编译器切换为使用以 0 为基础的数组。
  • -
  • 实现了 “vo2” 编译器选项(用 String.Empty 初始化字符串变量)。
  • -
  • 请注意,VS 项目属性对话框中还没有 az 和 vo2 编译器选项。您可以使用 “附加编译器选项 ”来指定这些编译器选项。
  • -
  • 错误信息中的 “this ”和 “base ”已更改为 “SELF ”和 “SUPER”。
  • -
  • "可见性" 类型的错误(例如暴露 private 或 internal 类型的 public 属性)已改为警告
  • -
  • 修正了 TRY ... ENDTRY 语句中不包含 CATCH 子句的问题
  • -
  • 编译器现在可以更好地解决其他 (X#) 程序集中的函数问题
  • -
  • 修正了一个问题,当混合使用不同的数字类型时,该问题可能会导致 “运算符不明确 ”的信息。
  • -
    - - Changes in 0.1.5 - -
  • 当解析阶段出现错误时,X# 将不再进入编译器的后续阶段,以防止崩溃。除了解析器的错误外,还会显示错误 9002。
  • -
  • 解析器错误现在也会在错误信息中包含源文件名,并采用与其他错误信息相同的格式。请注意,我们尚未完成对这些错误信息的处理。在即将推出的版本中,这些错误信息的格式将得到改进。
  • -
  • 当程序使用 Xbase 类型(ARRAY、DATE、FLOAT、PSZ、SYMBOL、USUAL)之一时,编译器将显示 “功能不可用”(8022)错误。
  • -
  • 修正了 VOSTRUCT 和 UNION 类型的一个错误
  • -
  • 修正了感叹号 (!) NOT 运算符的一个问题
  • -
    - - Changes in 0.1.4 - -
  • 允许使用整数和枚举进行计算的几处更改
  • -
  • 为实现与 VO 兼容的 _OR、_AND、_NOT 和 _XOR 操作而做的几处修改
  • -
  • 修复 interface/abstract VO 属性
  • -
  • 只有在未明确声明的情况下,才插入隐式 "USING SYSTEM"
  • -
  • 错误 0542 转为警告(成员名称不能与它们的封闭类型相同)
  • -
  • .XOR.表达式定义的变化
  • -
  • 修复 CHAR_CONST 词法规则中的双引号
  • -
  • 允许在类/结构等名称中声明命名空间(CLASS Foo.Bar)
  • -
  • 修复在标识符名称为(位置)ACCESS 关键字时 access/assign 崩溃的问题
  • -
  • 预处理器关键字无法在空格后识别,只能在行首识别。这一问题已得到解决。
  • -
  • 防止属性 GET SET 被解析为表达式正文
  • -
  • 修复接口事件的默认可见性
  • -
  • 使用 /unsafe 选项时,不安全错误变为警告,PTR 为 void*
  • -
  • 修复 dim 数组字段的声明
  • -
  • 初步支持 VO cast 和 VO 转换规则(TYPE(_CAST, Expression) 和 TYPE(Expression))。_CAST 始终 unchecked(LONG(_CAST, dwValue)),而转换则遵循 checked/unchecked 规则(LONG(dwValue))
  • -
  • 修复了参数列表为空的代码块问题
  • -
  • 修复了 GlobalAttributes 的问题。
  • -
  • 不带 GET SET 的 AUTO 属性现在会自动添加一个 GET 和 SET 块
  • -
  • 允许隐式常量从 double 到 single 的转换
  • -
    - - Changes in 0.1.3 - -
  • 将不一致的字段可访问性错误改为警告和其他类似错误
  • -
  • 添加了对 Vulcan 参数的命令行支持。除非 Roslyn (C#) 编译器存在等效参数,否则这些参数不会再导致错误信息,但不会真正实现。例如 /ovf 和 /fovf 都被映射到 /checked,/wx 被映射到 /warnaserror 。不应使用 /w,因为其含义与 /warning level(警告级别)不同。而应使用 /nowarn:nnnn
  • -
  • 修复了将 PUBLIC 修饰符分配给接口成员或析构函数的问题
  • -
  • 防止表达式语句以 CONSTRUCTOR() 或 DESTRUCTOR() 开头
  • -
  • 已添加对不带参数的 ? 语句的支持
  • -
  • 如果未指定,赋值的默认返回类型现在是 VOID
  • -
  • 已添加对 “旧风格”委托实例化的支持
  • -
  • 添加了对枚举的支持
  • -
  • 为 TRY ... END TRY(无 catch 和 finally)添加了隐式空 catch 块
  • -
  • 在 LINQ 语句中添加了对 DESCENDING 关键字的支持
  • -
  • 为 属性 和 事件添加了对 VIRTUAL 和 OVERRIDE 的支持
  • -
  • 防止隐含覆盖插入抽象接口成员
  • -
  • 修复了一个无法解析 System.Void 的问题
  • -
  • 修复了 ACCESS/ASSIGN 属性生成的问题
  • -
  • 修复了 Abstract 方法处理的问题
  • -
    - - Changes in 0.1.2.1 - -
  • 添加了默认表达式
  • -
  • 修复了与事件有关的问题
  • -
  • 修复了一些小的词法问题
  • -
  • 修复了 _DLL FUNCTION 和 _DLL PROCEDURE 的问题
  • -
    - - Changes in 0.1.2 - -
  • 修复了处理扩展字符串中转义序列的问题
  • -
  • 修复了 FOR... NEXT 语句中的问题
  • -
  • 修复了 SWITCH 语句的一个问题
  • -
  • 修复了 sizeof() 运算符的一个问题
  • -
  • 修复了 REPEAT ... UNTIL 语句中的一个问题
  • -
  • 修复了 TRY ... CATCH ... FINALLY ... END TRY 语句中的一个问题。
  • -
  • 修复了条件访问表达式 ( Expr ? Expr) 中的问题
  • -
  • 允许使用 args 类型访问名称的绑定成员
  • -
  • 修复了包含多个 LOCAL 语句的 问题
  • -
  • 修复了在编译不带主体的方法时使用调试信息的问题
  • -
  • 优化了 Lexer。这将大大提高编译速度
  • -
  • 修复了代码中的一个问题,该问题会报告一项功能尚不支持
  • -
  • 修复了使用 STRUCTURE 约束条件定义泛型时出现的问题
  • -
  • 编译器宏(__ENTITY__、__LINE__ 等)导致崩溃。现在,编译器会插入一个包含宏名称的字面字符串。
  • -
  • 版本 0.1.1 不包含 XSC.RSP
  • -
  • 修复了当标识符匹配(新)关键字时无法识别的问题
  • -
    - +
  • 我们现已包含大多数运行时 DLL 的 .Net 8 版本。
  • +
  • 运行时现同时提供 DLL 格式和 Nuget 包两种形式。有关这些包和 DLL 的说明,请参阅本帮助文件中关于运行时的单独主题
  • +
  • FoxPro 运行时中已添加若干新功能
  • + + 错误修复 + Visual Studio 集成
    新功能
    + +
  • 现已支持SDK风格项目。为此对Visual Studio支持代码进行了全面改动
  • +
  • 现全面支持Visual Studio 2026
  • +
  • 不再支持 Visual Studio 2017。
  • +
  • 我们仍支持 Visual Studio 2019,但该版本将不再新增功能。
  • +
    + 错误修复 + 工具
    新功能
    + 错误修复
    diff --git a/docs/Help_ZH-CN/Topics/VersionHistoryXSharp1.xml b/docs/Help_ZH-CN/Topics/VersionHistoryXSharp1.xml new file mode 100644 index 0000000000..cb3c77bdf6 --- /dev/null +++ b/docs/Help_ZH-CN/Topics/VersionHistoryXSharp1.xml @@ -0,0 +1,1175 @@ + + + + 历史 XSharp 1 及更早版本 + + Changes + Runtime chapter + String Literals + Version History + XSharp 1 + + +
    + 历史 XSharp 1 及更早版本 +
    + Changes in 1.2.1 + 编译器 + +
  • 修正了一个问题,在该问题中,编译错误会导致 “Failed to emit module” 的信息,而没有进一步的信息
  • +
  • 修正了别名表达式(如 CUSTOMER->CUSTNO++)中 ++、-- += 和类似操作的问题
  • +
  • 在带参数的构造函数之后,构造函数初始化器和集合初始化器不起作用。现已修复。
  • +
  • 修正了启用溢出检查时 USUAL 中存储的负字面值的问题。
  • +
  • 对于 CATCH 子句,现在 ID 和 TypeName 都是可选的。这意味着有 4 种变化。
    您只能有一个不带类型的 catch 子句,因为它默认为 System.Exception 类型。但是,您可以使用多个不带 ID 的 catch 子句。
  • +
    +   CATCH ID AS ExceptionType
      CATCH ID                  // 默认为 Exception类型
      CATCH AS ExceptionType  
      CATCH            // 默认为 Exception类型
    + Visual Studio 集成 + +
  • 提高后台代码扫描速度
  • +
  • 提高编辑器内后台解析器的速度
  • +
  • 修正了窗口窗体编辑器使用的 codedom provider中的一个问题
  • +
    + + + Changes in 1.2.0 + 编译器 + +
  • 为了与 VO 和 Vulcan 兼容,现在可以为通过引用声明的参数传递 NULL。
    我们强烈建议不要这样做,除非你确保函数期望这样做,并且不会在没有检查 NULL 引用的情况下赋值给引用参数。只有启用 /vo7 编译器选项后,这种做法才有效。
  • +
  • 我们对 Lexer 进行了一些优化。因此,编译器的速度应该会更快一些
  • +
  • 我们更正了自动生成构造函数 (/vo16) 的一个问题,该构造函数适用于继承自外部 DLL 中定义的类的类
  • +
  • 当使用 /vo2 编译时,在调用 super 构造函数之前在子类中分配的任何字符串字段都会被空字符串覆盖。现在,只有当字符串为 NULL 时,生成的代码才会分配空字符串。
    注意:我们不建议在调用 super 构造函数前在子构造函数中分配父字段。手动编码的父字段的默认值仍会覆盖在调用 super 构造函数之前在子构造函数中分配的值。
  • +
  • 修正了 VO 方言中 CHECKED() 和 UNCHECKED() 语法的一个问题
  • +
  • 修正了一个问题,即在一个重载存在单个 object 参数和一个重载存在 object[] 参数的情况下,为方法选择重载。
  • +
  • 已为 LOCAL STATIC 语法分析程序添加支持
  • +
  • 修正了编译器选项 /vo9(允许缺少返回值)和返回 VOID 的过程或方法的一个问题
  • +
  • 改进调试器序列点生成。编译器不再为 VO/Vulcan 方言中的启动和关闭代码生成 “隐藏 ”断点信息,对于表达式语句也不再需要双步骤。
  • +
  • 分部类的 ACCESS 和 ASSIGN 可能会生成没有源文件名的错误信息。这个问题已经解决。
    现在,编译器为这些 “partial”属性生成的代码略有不同。
    Access 和 Assign 是作为编译器生成的方法实现的,现在属性 getter 和属性 setter 都会调用这些方法。
  • +
  • 编译器无法识别 _WINCALL 调用约定。现已修复。
  • +
  • 编译器现在会在使用 #pragma 命令时发出警告
  • +
    + Visual Studio 集成 + +
  • 进一步提高编辑器的性能。特别是包含错误代码的大型源文件可能会降低编辑器的运行速度。
  • +
  • 当包含文件只包含 #defines(如 Vulcan 头文件)时,编辑器解析器不再重复尝试解析这些文件
  • +
  • 源代码编辑器试图为注释区域中的单词显示 intellisense。该问题已得到解决。
  • +
  • 我们已开始开发对象浏览器和类浏览器。
  • +
  • 项目的开启和关闭应稍快一些
  • +
  • 现在,编辑器使用的内部代码模型会在项目关闭时处理已加载的信息,任何项目都不再需要这些信息。这将减少 X# 项目系统的内存使用量
  • +
  • 匹配的关键字,如 IF ... ENDIF 和 FOR ... NEXT,现在应在编辑器中突出显示
  • +
  • 如果在编辑器中选择了一个标识符,那么当前方法/函数中所有使用该标识符的地方都会高亮显示该标识符。
  • +
  • 我们添加了几项功能,您需要在 “工具/选项/文本编辑器/XSharp/Intellisense”对话框中启用/禁用这些功能:
  • + +
  • 按下点时,编辑器中的代码补全也支持实例成员补全。
    请注意,编译器只接受 Core 语言中的这一选项,而不接受 VO 和 Vulcan 方言中的这一选项。因此,该选项在使用其他方言的项目中不起作用。
  • +
  • 我们添加了一些选项来控制编辑器中下拉式组合框的排序,以及这些组合框中是否应包含字段/实例变量。如果不进行排序,下拉框中的条目将按照它们在源文件中的顺序显示。
  • +
  • 我们添加了键入时自动完成标识符的选项。这包括locals、参数、类字段、命名空间、类型等。
  • +
    +
    + +
  • 子类中的重载方法,如果其签名与其重载的父类方法相同,则在完成列表中不再被视为重载方法
  • +
  • 缺少一个引用 DLL 可能会 “杀死 ”intellisense 引擎。现在这种情况不再发生。当然,缺失的引用 DLL 的类型信息不会包含在内。
  • +
  • 生成的 XAML 代码源文件(OBJ 文件夹中的 .g.prg 文件)中的属性和方法现在也会被解析,并包含在intellisense以及类浏览器和对象浏览器窗口中的完成列表中。
  • +
    + VOXPorter + +
  • 现在,安装程序包含了正确版本的 VOXPorter <g> 。
  • +
  • VOXporter 现在支持以下命令行选项:
    /s:<source folder or aef>
  • +
    + /d:<destination folder> + /r:<runtime folder> + /nowarning + + +
  • 针对图形用户界面类中发现的问题添加了一些代码更正
  • +
  • 现在,从不同工作目录运行 VOXPorter 时也能找到模板文件了
  • +
    + + + Changes in 1.1.2 + 编译器 + +
  • 已为包含 #pragma 的代码添加编译器警告
  • +
  • 修正了 iif() 函数和负字面值的一个问题
  • +
    + Visual Studio 集成 + +
  • 修复了键入发送(:)运算符后编辑器运行缓慢的问题
  • +
  • 枚举值现在能在调试器中正确解码
  • +
  • 修正了用于处理字面 FALSE 值和负数的 CodeDom 提供程序。因此,更多(Vulcan 创建的)winforms 应能顺利打开
  • +
  • 当某些位置关键字(如 ADD 和 REMOVE)出现在冒号“: ”或点号“. ”之后时,在编辑器中不再将其显示为不完整代码的关键字;
  • +
    + VOXPorter + +
  • 修复从 SDK 导出 VO RDD 类的问题
  • +
    + + + Changes in 1.1.1 + 编译器 + +
  • 修正了调试器 DO CASE 和 OTHERWISE 断点的一个问题
  • +
  • 修正了在 #included 文件中定义的源代码的调试器断点问题
  • +
  • 已添加对 Harbour Global 语法的支持,其中 GLOBAL 关键字是可选的
  • +
  • 修正了带有负步长值的 FOR... NEXT 循环的一个问题
  • +
  • 在某些情况下,没有从工作区名称或字段名称中删除用于避免关键字冲突的 @@ 前缀。现已修复
  • +
  • 在 VO/Vulcan 方言中,当自动生成默认无参数 SUPER 构造函数调用时,会产生警告 (XS9015)。现在该错误信息已被消除。不过,生成的带参数 SUPER 构造函数调用仍会产生警告。
  • +
  • 为 Xbase 类型名称和 XSharp Runtime 中的函数名称准备编译器
  • +
    + 预处理器 + +
  • 修复了预处理器中的一个崩溃问题
  • +
  • 对于没有匹配标记的块,预处理器会产生 “可选块不包含匹配标记 ”的错误。现在允许了。
    (例如,某些数据库 UDC 中的 ALL 子句)
  • +
  • 当多个源文件使用同一个包含文件,而该文件的不同部分因 #ifdef 条件的不同而被包含时,预处理器会感到 “困惑”。这一问题已得到修复。
  • +
  • 无法正确处理从 #include 文件导入的源代码中的调试器文件/行号信息。
  • +
    + Visual Studio 集成 + +
  • 修复了 Windows 窗体编辑器的几个问题
  • +
  • VO 兼容编辑器生成的类声明现在包含 PARTIAL 修饰符。
  • +
    + + + Changes in 1.1 + 编译器 + +
  • 修正了 X# 1.0.3 发布后在后期绑定代码中使用代码块的问题
  • +
  • 修复了一个问题,即在子类中覆盖从只定义了赋值(Set)或访问(Get)的类继承的属性时出现的问题。
  • +
  • 已启用编译器选项 /vo16 :自动生成 VO Clipper 构造函数。
  • +
  • 修复了源文件第 1 行第 1 列出现编译器错误时编译器崩溃的问题
  • +
  • 修正了溢出检查不遵循 /ovf 编译器选项的问题
  • +
  • 修正了接口方法 public 修饰符的问题
  • +
  • 为外部 DLL 中无法访问的字段添加了正确的错误信息
  • +
  • 修正了调试器序列点(调试器步进)的一个问题
  • +
  • X# 生成的 pdb 文件现在标有 X# 语言 GUID,因此在 VS 调试器中可识别为 X# 文件
  • +
  • DATETIME (26) 和 DECIMAL (27) 作为 UsualType 添加到编译器中,为允许使用这些类型的 usuals 类型的 X# 运行时做准备。
  • +
  • 编译器选项 /VO15 和 /VO16 现在在 VO/Vulcan 方言之外使用时会产生错误信息
  • +
  • 在类外声明的方法(VO 风格代码)将声明 private 类,而不是 public 类
  • +
  • ASTYPE 已改为位置关键字
  • +
  • 修正了 Chr() 和 _Chr() 函数在字面数字大于 127 时的一个问题
  • +
  • 已添加对 __CLR2__ 和 __CLR4__ 编译器宏的支持。版本源于 mscorlib.dll 和/或 system.dll 的文件夹名称
  • +
  • 代码块语法在 Core 方言中不起作用。
  • +
  • 一些新关键字,如 REPEAT、UNTIL、CATCH、FINALLY、VAR、IMPLIED、NAMESPACE、LOCK、SCOPE、YIELD、SWITCH 等,现在也是位置关键字,只有在行首或匹配的其他关键字之后才会被识别为关键字。
    当这些关键字用作函数名时,这将有助于避免出现令人费解的错误信息。
  • +
    + Visual Studio + 源代码编辑器 + +
  • 为函数和过程添加了转到定义
  • +
  • 改进函数和过程的信息提示
  • +
  • 改进的大小写同步
  • +
  • 添加了第一版智能缩进
  • +
  • 修正了intellisense引擎中可能锁死 VS 的查找问题
  • +
  • 编译器生成的类型现在不会出现在完成列表中。
  • +
  • 已为 LOCAL IMPLIED 和 VAR 变量的intellisense添加部分支持
  • +
  • 已添加对格式化文档的支持。这也会根据工具/选项菜单中定义的工具设置标识符的情况
  • +
  • 改进后台文件扫描器的性能。在编译过程中,该扫描器也会暂停,以提高编译速度。
  • +
    + 项目系统和 MsBuild + +
  • 修正了项目文件中条件属性组的一个问题。现有项目将自动更新
  • +
  • 在 MsBuild 和 VS 项目属性页面中添加了对 /vo16 编译器选项的支持。
  • +
  • 修正了 /nostddefs 编译器选项无法正常工作的问题。
  • +
  • 修正了在项目属性对话框中输入资源或设置时可能出现的问题
  • +
  • 修正了 /nostdlib 编译器选项的一个问题
  • +
  • License.Licx 文件现在添加为 “嵌入式资源”。
  • +
  • 修正了自动添加许可证文件的问题
  • +
  • 当一个项目有一个 “中断的引用”,而新的引用被添加到正确的位置时,中断的引用将被删除,新的引用将被添加。
  • +
  • 在 64 位进程内运行时,MSBuild 支持 DLL 无法找到编译器和本地资源编译器的位置
  • +
    + 表单编辑器 + +
  • 改进了 Windows 窗体编辑器对项目引用中定义的类型的支持。现在,我们将检测这些项目的输出文件位置,就像 C# 和 VB 项目系统一样。
  • +
  • 表单编辑器的代码分析器在处理未类型化的方法时出现问题。现已修复。
  • +
    + VO 窗口和菜单编辑器 + +
  • 窗口和菜单编辑器的代码生成器将删除未使用的旧定义。
  • +
  • 更改了 VO 窗口的项目模板,以解决为尚未保存的窗口添加事件处理程序时出现的问题
  • +
  • 窗口编辑器的代码生成器未输出 WS_VISIBLE 的样式。现已修复。
  • +
    + 调试器 + 该版本引入了第一版 XSharp 调试器支持 + +
  • Visual Studio 调试器现在可在调用堆栈窗口和其他地方显示 X# 语言
  • +
  • 函数、方法和过程现在以 X# 语言风格显示在调用栈窗口中
  • +
  • 编译器生成的变量不再显示在局部变量列表中
  • +
  • locals 列表现在显示的是 SELF,而不是 this
  • +
  • X# 预定义类型(如 WORD、LOGIC 等)会在 locals 窗口中显示其 X# 类型名称
  • +
    + 测试 + +
  • 已添加对 “测试资源管理器 ”窗口的支持
  • +
  • 添加了使用 XUnit、NUnit 和 Microsoft Test 进行单元测试的模板
  • +
    + 其他 + +
  • 添加了在 XSharp 之后(重新)安装 Vulcan 时的警告,这可能会导致 Visual Studio 集成出现问题
  • +
  • VS 解析器将接口标记为结构而非接口。这一问题已得到修复。
  • +
  • 在 VS 工具菜单中,XPorter 工具有了更好的名称
  • +
  • 在查找类型信息时暂停 VS 后台分析器,以提高intellisense速度
  • +
  • 对 X# 附带的模板进行了几处修改
  • +
    + XPorter + +
  • 修复属性组条件中的问题。
  • +
    + VOXPorter + +
  • 生成 clipper 构造函数现在默认为禁用
  • +
  • 修正了 VS 模板文件中的一个问题。
  • +
    + + + Changes in 1.0.3 + 编译器 + +
  • 修正了使用 usual 参数索引的 Vulcan 数组的索引计算问题
  • +
  • 修正了以 begin sequence 语句或 try 语句结束的代码自动生成返回值的问题
  • +
  • 优化了字面符号的运行性能。
    编译器现在会为字面符号生成一个符号表,应用程序中使用的每个字面符号只创建一次。
    如果您的应用程序使用了大量(数千个)字面符号,启动时可能会有一点延迟。但运行时的性能应该会更好。
  • +
  • 为使用与 VO 兼容的 _CAST 操作符将数字转换为 OBJECT 的代码添加了编译器错误。
    现在已经不允许这样做了:
    LOCAL nValue as LONG
    LOCAL oObject as OBJECT
    nValue := 123
    oObject := OBJECT(_CAST, nValue)
  • +
    + + + Changes in 1.0.2 + 编译器 + +
  • 添加了对 XML 文档生成的支持。我们支持与 C# 编译器和其他 .Net 编译器相同的标记。
  • +
  • 改进了一些解析器错误。
  • +
  • 为编译器和脚本分别创建了可移植和非可移植(.Net 框架 4.6)项目
  • +
  • 修正了从 USUAL 转换到已知类型的代码生成。现在,当 usual 中的对象类型与目标变量的类型不匹配时,会生成与 Vulcan 相同的错误信息
  • +
  • 当声明与程序集名称相同的类型时,会产生编译器错误,并给出建议的解决方法。
  • +
  • 修正了在方法调用中使用 PTR() 操作时出现的奇怪编译器信息
  • +
  • 使用 VO 方言时,PSZ 中字节的索引访问现在与 VO 中一样基于 1。Vulcan 方言需要像 Vulcan 那样基于 0 的索引访问。
  • +
  • 删除了 FLOAT 和 USUAL 复合赋值的错误信息。编译器现在包含了 Vulcan Runtime 中该问题的解决方法
  • +
  • 对于编译器必须在函数调用和任何其他类中的静态方法调用之间做出选择的模糊代码,编译器现在会选择函数调用而不是方法调用(Vo 和 Vulcan 方言)。警告仍会生成。
  • +
  • 当使用 @ 符号通过引用传递变量时,编译器现在会检查函数/方法参数的声明类型是否与局部变量的类型一致。
  • +
  • 在 VO/Vulcan 方言中,一些针对未使用变量的编译器警告被抑制。现在它们又被激活了。
  • +
    + 脚本 + +
  • 脚本在 1.01 版中不起作用
  • +
    + Visual Studio 集成 + +
  • QuickInfo 可能会在 VS 编辑器中产生 “挂起 ”现象。现已修复
  • +
  • 为 globals 和 defines 添加了快速信息
  • +
  • 为 globals 和 defines 添加了完成列表
  • +
  • 新增 VO 表单编辑器,用于编辑 vnfrm/xsfrm 文件并生成代码和资源
  • +
  • 已添加 VO 菜单编辑器,用于编辑 vnmnu/xsmnu 文件并生成代码和资源
  • +
  • 添加了 VO DbServer 编辑器和 VO Fieldspec 编辑器,用于编辑 vndbs/xsdbs 和 vnfs/xsfs 文件并生成代码和资源。
  • +
  • 增加了关键字和标识符的同步功能。
  • +
  • 修正了在编辑器中键入 SUPER( 可能产生异常的问题)
  • +
  • 项目文件中的 “预生成 ”和 “生成后 ”条目现在针对特定配置了
  • +
  • 在项目系统中添加了对 XML 文档生成的支持
  • +
  • 修复了 Visual Studio 2017 15.3 及更高版本可能出现的 “挂起 ”问题
  • +
    + VO Xporter + +
  • 修正了导入某些 VO 2.7 AEF 文件时出现的问题
  • +
  • 修正了解决方案文件夹名称中可接受字符的问题
  • +
  • xsproj 文件中还包含 VO 表单和菜单实体
  • +
  • 为 INI 文件添加了一个选项,用于指定 Vulcan Runtime 文件的位置 ( )
  • +
    + + + Changes in General Release (1.0.1.1) + 编译器 + +
  • 修复了 Vulcan Runtime 非常老的版本的一个问题
  • +
  • 以 DIM Byte[] 及类似方式声明的变量现在会被编译器固定
  • +
  • 编译器未正确处理 [Return] 属性。现已修复
  • +
  • 由于 Vulcan 运行时的问题,USUAL 和 FLOAT 的复合赋值(u+= f 或 -=)在运行时导致堆栈溢出。现在,这些表达式会生成编译器错误,并建议更改为简单赋值 ( u := u + f)
  • +
    + Visual Studio 集成 + +
  • 在解析类型时,XSharp 项目之间的项目引用也作为 assemblyreference 加载。这可能会导致速度问题和不必要的内存占用
  • +
  • 提高了生成完成列表(如类型的方法和字段)的速度。
  • +
  • 我们还添加了 “完成列表选项卡”,你可以在不同的选项卡上看到字段、属性、方法等。您可以在 “工具/选项/文本编辑器/XSharp/Intellisense”选项页面中启用/禁用该功能。
  • +
    + VO XPorter + +
  • 我们添加了一项检查,以确保 X# 项目的默认命名空间不能包含空白字符
  • +
    + + + Changes in General Release (1.0.1) + 新特性 + +
  • 我们新增了对 ENUM 基本类型(ENUM Foo AS WORD)的支持
  • +
  • 我们为 Lambda 表达式添加了单独的语法
  • +
  • 我们新增了对匿名方法表达式的支持
  • +
  • 类型化的局部变量现在也可用于 PCALL() 调用
  • +
  • 带有 ExtensionAttribute 属性的方法和带有 ParamArrayAttribute 属性的参数现在可以正确编译,但会发出警告
  • +
    + 编译器 + +
  • 修正了字面代码块后期绑定赋值的问题
  • +
  • 解决多个名称冲突
  • +
  • 改进了若干错误信息
  • +
  • 修正了只使用 SET 访问器的属性的编译问题
  • +
  • 修正了带有 if ... endif 语句的 switch 块中的崩溃问题
  • +
  • 修复虚实例方法和结构的问题
  • +
  • 修正了数组字面意义中使用的 foreach 变量的名称冲突问题
  • +
  • 更改了函数和静态方法的同名解析。
    在 VO/Vulcan 方言中,函数优先于静态方法。如果要调用静态方法,则需要在方法调用前加上类名。
  • +
  • 本文档中有一个单独的主题,介绍了代码块、Lambda 表达式和匿名方法表达式之间的语法异同。
  • +
  • 修正了带有错误原型的 Start() 函数的错误信息。
  • +
  • 如果检测到函数和静态方法之间存在歧义,就会显示警告信息
  • +
    + Visual Studio + +
  • 为 “Using Static”类中的函数和方法添加了参数提示
  • +
  • 为 Clipper调用约定函数和方法添加了参数提示
  • +
  • 在intellisense中添加了对泛型的支持
  • +
  • intellisense将显示关键字,而不是本地类型名称(例如 WORD,而不是 System.UInt16)
  • +
  • 现在,当用户输入开头的“(”或“{”以及逗号“, ”时,都会显示参数提示。
  • +
  • 参数提示会显示 REF OUT 和 AS 修饰符
  • +
  • 为 COM 引用(包括普通 COM 引用和主要互操作程序集)添加了智能提示。此外,已实现接口中的成员现在也包含在内嵌代码自动完成中(这在 COM 中非常常见)。
  • +
  • 改进了其他语言(如 C# 和 VB)项目引用的直观显示。
  • +
  • 为引用项目中的函数和引用的 Vulcan 和/或 X# 程序集添加了intellisense功能
  • +
  • 抑制intellisense列表中的 "特殊类型名称”
  • +
  • 已添加对 “VulcanClassLibrary ”属性的支持,以帮助查找类型和函数
  • +
  • 本地资源编译器的错误现在也包含在错误列表中
  • +
  • 修正了构造函数参数提示的问题
  • +
  • 已为 X# 类型关键字(如 STRING、REAL4 等)添加成员列表支持。
  • +
  • 修正了 Windows 窗体编辑器中与 ActiveX 控件有关的几个问题
  • +
  • 添加了启动 VO Xporter 工具的菜单选项
  • +
  • 添加了依赖项后台扫描功能,确保新生成的代码经过扫描后可用于intellisense
  • +
  • 对 Windows 窗体编辑器和项目系统进行了多项修改:
  • + +
  • 添加了对添加 ActiveX 控件的支持
  • +
  • 已添加对表单继承的支持。在 C# 继承表单向导中也能看到我们的表单
  • +
  • 添加了将 Windows 窗体自定义控件添加到 Visual Studio 工具箱的支持
  • +
  • Windows 表单编辑器使用的 Codedom 解析器的一些性能增强。对于较大的表单,您应该会注意到这一点。
  • +
    +
    + +
  • 修复了用户报告的若干崩溃问题
  • +
  • 本地资源文件 (.rc) 现在可在源代码编辑器中打开
  • +
  • 提高后台解析速度
  • +
  • 提高关键字着色速度
  • +
  • 改进了编辑器中 “类型 ”和 “成员 ”下拉菜单的处理方式
  • +
    + 工具 + +
  • 添加了 VO Xporter 工具的第一个版本
  • +
  • 安装程序现在可以注册 .xsproj 文件、.prg、.ppo、.vh、.xh 和 .xs 文件,以便用 Visual Studio 打开它们。
  • +
    + 文档 + +
  • 我们添加了一些章节,介绍如何将 VO AEF 和/或 PRG 文件转换为 XIDE 项目和/或 Visual Studio 解决方案。
  • +
    + + + Changes in 0.2.12 + 脚本 + +
  • 我们增加了使用 X# 脚本的功能。有关如何工作的一些文档可以在这里找到。 您还可以在 下面文件夹中查找脚本示例
    c:\Users\Public\Documents\XSharp\Scripting folder
  • +
    + 编译器 + 所有方言 + +
  • 编译器现在基于 C# 7 的 Roslyn 源代码。
  • +
  • 现在,不同源文件中同一(分部)类的同名 Accesses 和 Assigns 将合并为一个属性。这将在一定程度上降低编译器的运行速度。我们建议您在同一源文件中定义 ACCESS 和 ASSIGN。
  • +
  • 在预处理器中添加了对重复结果标记的支持
  • +
  • 我们添加了编译器宏 __DIALECT_HARBOUR__
  • +
  • 修正了类型、命名空间、字段、属性、方法、全局等之间的名称解析。Core 方言非常接近 C# 规则,其他方言则遵循 VO 规则。
  • +
  • 添加了一些对不明确代码的警告
  • +
  • _Chr()使用未类型化的数值时会崩溃。该问题已得到修复。
  • +
  • 我们对字符字面规则做了一些修改。对于 VO 和 Harbour 方言,现在有了其他规则,而对于 Core 和 Vulcan,则没有这些规则。请参见 Char 字面量
  • +
    + VO 和 Vulcan 方言 + +
  • 修复了多个 VO 兼容性问题
  • +
  • QUIT、ACCEPT、WAIT、DEFAULT TO 和 STORE 命令现已从编译器中移除,并在我们的标准头文件 “XSharpDefs.xh ”中定义,该文件位于 Program Files(x86)/XSharp\Include 文件夹中。这些命令不在 Core 方言中编译
  • +
  • 已添加对 CONSTRUCTOR() CLASS MyClass 和 DESTRUCTOR CLASS MyClass(换句话说,在 CLASS ... ENDCLASS 结构之外)的支持
  • +
    + +
  • 如果在关键字 NIL、NULL_STRING、NULL_OBJECT 等之前使用 #(不等于)运算符而不留空格,那么 #NIL 就不会被视为符号 NIL,而会被视为 Not Equal To NIL。
  • +
  • SizeOf 和 _TypeOf 是 VO 中的特殊标记,不能缩写。我们改变了 X# 的行为,使之与之相匹配。这样可以防止与 _type 等变量的名称冲突。
  • +
  • 我们增加了对带有嵌入式 @ 符号的 DLL 入口点的支持,例如 “CAVOADAM.AdamCleanupProtoType@12”。
  • +
  • (DWORD) (-1) 将需要使用 unchecked 操作符。现在这与 Vulcan 兼容,生成的 DWORD 值为 System.Uint32.MaxValue。
  • +
  • STATIC VOSTRUCT 现在会被编译为 INTERNAL VOSTRUCT。这意味着您的应用程序中不能出现两次相同的结构。为什么要这样做呢?
  • +
  • 修正了 VO 编译出 “不正确 ”代码的几种情况,例如看起来像这样的代码块:
    cb := { |x|, x[1] == 1 }
    注意多出来的逗号。
    现在编译成了相同的代码块:
  • +
    + cb := { |x| x[1] == 1 } + +
  • 由于 /vo16 编译器选项有太多副作用,目前已(译者注:暂时)被禁用(不起任何作用)。
  • +
    + Visual Studio 集成 + +
  • 删除的文件和文件夹会被移动到回收站。
  • +
  • 修正了 XAML 编辑器中的intellisense问题
  • +
  • 添加了对不同 X# 项目之间代码完成的支持
  • +
  • 为 VB 和 C# 项目中的源代码添加了对代码完成和其他intellisense功能的支持
  • +
  • 已添加对参数信息的支持
  • +
    + 文档 + +
  • 我们为所有未注明的编译器错误添加(生成)了主题。有些主题只包含编译器显示的文本。更多文档将陆续发布。此外,我们还为 X# 脚本添加了一些文档。
  • +
    + + + Changes in 0.2.11 + 编译器 + 所有方言 + +
  • 改进了某些错误信息,例如未终止字符串的错误信息
  • +
  • 已添加对 /s(仅限语法检查)命令行选项的支持
  • +
  • 已添加对 /parseonly 命令行选项的支持,该选项用于intellisense解析器
  • +
    + +
  • 针对无效代码添加了一些编译器错误和警告
  • +
  • 预处理器没有正确处理 #command 和 #translate 的 4 个字母缩写。现已修复
  • +
  • 修正了预处理器中发现的一些问题
  • +
  • 我们改用了新的 Antlr 解析器运行时。这样性能应该会略有提高。
  • +
  • 更改了字面字符和字符串的定义方式:
  • + +
  • 在 Vulcan 方言中,用单引号括起来的字面字符串是 Char 字面量。双引号是 String 字面量
  • +
  • 在 Core 和 VO 方言中,用单引号括起来的字面字符串就是 String 字面量。双引号也是 String 字面量。
    要在 Core 和 VO 中指定 Char 字面量,需要在字面量前加上 “c”:
  • +
    +
    + +      LOCAL cChar as CHAR
         cChar := c'A'
    + +
  • 更改了字面字符和字符串的定义方式:
  • +
  • 在为 x86 或 x64 编译时,sizeof() 和 _sizeof() 不再产生需要 “不安全 ”代码的警告。但在为 AnyCpu 编译时,仍会产生警告。
  • +
  • 如果未设置 includedir 环境变量,则也无法自动找到 XSharp\Include 文件夹。
  • +
    + VO/Vulcan 兼容性 + +
  • 已添加 /vo16 编译器选项,以便为没有构造函数的类自动生成带有 Clipper 调用约定的构造函数
  • +
    + Harbour 兼容性 + +
  • 开始编写 Harbour 方言。这与 VO/Vulcan 方言完全相同。目前唯一的区别是,IIF() 表达式是可选的
  • +
    + Visual Studio + 新特性 / 更改的行为: + +
  • 新增括号匹配功能
  • +
  • 添加了速览定义(Alt-F12)
  • +
  • 所有关键字不会自动成为完成列表的一部分
  • +
  • 修正了命名空间内函数和过程的成员查找问题
  • +
  • 提高大型项目的后台解析器速度
  • +
  • 修复从父类查找字段和属性的类型
  • +
  • 修正了 CSharp 项目无法找到 XSharp 项目引用输出的问题
  • +
  • 智能感应解析器现在可正确使用所有当前项目的编译器选项。
  • +
  • 当 X# 语言缓冲区被输入 C# 代码等 “垃圾 ”时,防止程序崩溃
  • +
    + 安装 + +
  • VS2017 的本地模板缓存和组件缓存未正确清除,现已修复。
  • +
  • 已添加代码,以便在安装时正确取消注册现有的 CodeDomProvider
  • +
    + 文档 + +
  • 现在隐藏了几个空章节。
  • +
  • 添加了模板说明
  • +
    + + + Changes in 0.2.10 + 该版本重点解决了 VO 和 Vulcan 兼容性方面的最后遗留问题,并为 Visual Studio 集成添加了大量新功能。 + 编译器 + VO/Vulcan 兼容性 + +
  • 我们已完成对 DEFINE 关键字的支持。类型子句现在是可选的。如果未指定类型,编译器将找出定义的类型。
    如果在编译时无法确定表达式(例如字面日期或符号),DEFINE 将被编译为函数类的常量字段或只读静态字段。
  • +
  • 我们扩展了预处理器 。它现在支持 #command、#translate、#xcommand 和 #xtranslate。此外,还支持 “伪函数” 定义,如 :

    #define MAX(x,y) IIF((x) > (y), (x), (y))

    其工作原理与 #xtranslate 相同,但定义是区分大小写的(除非启用了 “VO 兼容预处理器 ”选项 (/vo8).
    预处理器中唯一不起作用的是重复结果标记
  • +
  • 在 VO/Vulcan 模式下,编译器现在可以接受ENDIF 和 NEXT 等关键字与语句结尾之间的 “垃圾”,就像 VO 编译器一样。
    因此,您不必再删除 NEXT 或 ENDIF 之后的 “注释 ”标记。这将在不更改 VO 和 Vulcan 方言的情况下进行编译:

      IF X == Y
          DoSomething()
      ENDIF X == Y

      FOR I := 1 to 10
         DoSomething()
      NEXT I
    我们不推荐这种编码方式,但这种代码非常常见...
  • +
  • 修正了单引号字符串的识别问题。现在这些字符串被视为 STRING_CONST,编译器后台也进行了调整,以便在需要时将 STRING 字面量转换为 CHAR 字面量。
  • +
  • 在 VO 和 Vulcan 方言中,当使用编译器选项 /vo1 时,Init() 和 Axit() 方法允许使用不带值或返回值为 SELF 的 RETURN 语句。其他返回值将触发编译器警告并被忽略。
  • +
    + 新特性 / 更改的行为: + +
  • 编译器现在在源文件以未终止的多行注释结尾时会产生错误。
  • +
  • 添加了 ASTYPE 表达式,类似于其他语言中的 AS 结构。这将分配一个正确类型的值,如果表达式的类型不正确,则分配 NULL:
  • +
    + VAR someVariable := <AnExpression> ASTYPE <SomeType>
    + +
  • 如果参数是编译时常数,Chr() 和 _Chr() 函数现在会转换为字符串或字符字面量
  • +
  • 对于包含大量函数、过程、定义、全局或 _dll 函数的程序集,编译速度有所提高。
  • +
  • _DLL 函数现在会自动标记为 CharSet.Auto
  • +
  • 修正了冒号(:)和点号(.)互操作性与 super 关键字之间的一些不一致之处
  • +
  • 修正了 FOX 订阅者和其他用户报告的几个编译器问题。
  • +
    + Visual Studio + 新特性 / 更改的行为: + +
  • 经测试可与 Visual Studio 2017 发布版本一起使用
  • +
    + +
  • 我们在 VS 编辑器中添加了对区域的支持。目前,大多数 “实体 ”以及语句块、区域和使用列表、#includes 和注释都是可折叠的。
  • +
  • 我们在 VS 编辑器中添加了对成员和类型下拉菜单的支持
  • +
  • 我们在 VS 编辑器中添加了对代码自动补全的支持
  • +
  • 我们在 VS 编辑器中添加了对 "转到定义" 的支持
  • +
  • 现在,智能感应扫描检测到的错误也包含在 VS 错误列表中。
  • +
  • 我们为 VS 错误列表中的错误添加了帮助链接。帮助链接将带您进入 X# 网站上的相应页面。虽然不是所有的帮助页面都已完成,但至少基础架构已经正常运行。
  • +
  • 我们增加了对代码片段的支持,并在安装程序中加入了多个代码片段
  • +
  • 我们对项目属性对话框做了几处修改
  • + +
  • 生成前和生成后事件现在位于 “项目属性 ”的单独页面上。这些事件现在也不是按配置定义的,而是在不同配置之间共享。
    如果要将输出结果复制到不同配置的不同文件夹中,应使用 $(Configuration) 和 $(Platform) 变量
  • +
  • 我们已将 Platform 和 Prefer32Bits 属性移至 “生成” 页面,使其取决于配置
  • +
  • 修正了 AnyCPU 平台大小写的一个问题,该问题会导致 VS 平台组合框中出现重复项目
  • +
  • 添加了对 ARM 和 Itanium 平台类型的支持
  • +
  • 某些属性保存在没有平台标识符的项目文件组中。现已修复
  • +
  • 我们添加了一个项目属性,用于控制托管文件资源的包含方式:  使用与 Vulcan 兼容的托管资源
    如果为 “True”,则资源文件包含在程序集中,不带命名空间前缀。当 “False ”时,资源文件将以应用程序的命名空间作为前缀,就像其他 .Net 语言(如 C#)一样。
  • +
    +
    + +
  • 我们更正了一些代码生成问题
  • +
  • Windows 窗体编辑器中使用的解析器现在也能正确处理背景图片。无论是表单 resx 中的图像,还是共享项目资源中的背景图像
  • +
  • 我们为项目系统添加了 Nuget 支持。
  • +
  • 我们做了几处修改,以修复项目文件中的问题
  • + +
  • 项目系统现在可静默修复重复项目问题
  • +
  • 修正了 xaml 文件与其依赖的 designer.prg 文件和其他依赖文件之间的依赖关系问题
  • +
  • 修正了子文件夹或文件夹树中包含点的文件夹名称中的从属项的问题。
  • +
  • 修正了 WPF 模板中的一个问题
  • +
    +
    + +
  • 修复了删除引用节点时的刷新问题
  • +
  • 添加了 JetBrains 使用的 OAProject.Imports 属性的实现
  • +
    + XPorter + +
  • 修复了一个转换 WPF 风格项目的问题
  • +
    + + + Changes in 0.2.9 + 编译器 + 除了 Vulcan 没有发现的 Vulcan SDK 中的一些明显错误外,您可以在不做任何更改的情况下编译 Vulcan SDK! + 根据编译器的当前状态,我们认为编译器的 Vulcan 兼容性已经完成。现在,所有 Vulcan 代码的编译都不会出现问题。 + VO/Vulcan 兼容性 + 新特性 / 更改的行为: + +
  • 现在,所有 Init 程序都能在启动时正确调用。因此,不仅是 VOSDK 库中的 Init 程序,其他库中的 init 程序和主 exe 程序也会被正确调用。
  • +
  • 更改了方法和类型解析代码:
  • + +
  • 现在,带单一 object 参数的方法比带 Object[] 参数的方法更受青睐
  • +
  • 当一个函数(静态方法)和一个实例方法同时存在时,我们现在会在方法内部的代码中调用静态方法,而不会使用 SELF: 或 SUPER: 前缀。
  • +
  • 在使用 @ 操作符通过引用传递变量的情况下。
  • +
  • 使其与 Vulcan 更为兼容,以便使用不同数字类型的重载。
  • +
  • 优先选择有特定参数的方法,而不是有 usual 参数的方法
  • +
  • 为避免出现类型和命名空间同名的问题。
  • +
  • 当只传递一个参数时,优先选择带 OBJECT 参数的方法,而不是带 OBJECT[] 参数的方法
  • +
  • 当在引用程序集中检测到 2 个相同的函数或类型时,我们现在会像 Vulcan 一样选择第一个引用程序集中的函数或类型,并生成警告 9043
  • +
    +
    + +
  • sizeof 操作符现在返回 DWORD,以便与 VO 和 Vulcan 兼容。
  • +
  • 新增了对 EXIT PROCEDURES(PROCEDURE MyProcedure EXIT)的支持。这些程序将在程序关闭时自动调用,就在所有全局变量被清除之前。
    现在,编译器会为每个程序集生成一个 $Exit 函数,调用其中的退出程序,并清除程序集中的全局引用。在主程序中创建的 $AppExit() 函数将调用所有引用 X# 程序集中的 $Exit 函数。当引用 Vulcan 编译的程序集时,所有公共全局引用将从 $AppExit() 函数中清除。
  • +
  • 添加了对 PCALL PCALLNATIVE 的支持
  • +
  • 添加了对多个 Vulcan 兼容编译器选项的支持:
  • + +
  • /vo1 允许在构造函数和销毁函数中使用 Init() 和 Axit() 函数
  • +
  • /vo6 允许(全局)函数指针。DotNet 不 “认识 ”这些指针。它们被编译为 IntPtr。函数信息将被保留,因此您可以在 PCALL() 中使用这些指针。
  • +
  • /ppo 将预处理后的编译器输出保存到文件中
  • +
  • /Showdefs 在控制台上显示定义及其值的列表
  • +
  • /showincludes 在控制台上显示包含的头文件列表
  • +
  • /verbose 在控制台上显示包含、源文件名、定义等信息。
  • +
  • DEFAULT TO 命令
  • +
  • ACCEPT 命令
  • +
  • WAIT 命令
  • +
    +
    + +
  • 若干代码生成变更:
  • + +
  • 更改了 VOStruct 数组内 DIM 元素的代码生成,因为 Vulcan 编译器依赖于特定的命名方案,无法识别我们的名称。
  • +
  • 改进了使用 CLIPPER 调用约定的方法内部代码生成。
  • +
    +
    + Bug 修复 + +
  • 现在,只有启用 /ins 编译器选项时,才会使用隐式命名空间。在 Vulcan 方言中,命名空间 Vulcan 总是包含在内。
  • +
  • 修正了 @ 操作符和 VOSTRUCT 类型的几个问题
  • +
  • 修复了 VOSTRUCT 类型的 DIM 数组的一个问题
  • +
  • 修正了 VOSTRUCT 和 UNION 类型中 LOGIC 值的问题
  • +
  • 修正了 VOStyle _CAST 和转换操作符的几个问题。
  • +
  • 修正了几个数字转换问题
  • +
  • 修正了混合使用 NULL、NULL_PTR 和 NULL_PSZ 时的若干问题
  • +
  • 修正了 _CAST 操作符的几个问题
  • +
  • 修正了 PSZ 比较的几个问题。X# 现在可以像 Vulcan 和 VO 一样工作,并产生相同(有时无用)的结果
  • +
  • 修正了多维 XBase 数组 USUAL 数组索引的一个问题
  • +
  • 修正了最后表达式为 VOID 的代码块问题
  • +
  • 更改了 NULL_SYMBOL 的代码生成
  • +
  • 预处理器 #defines 有时会与类名或命名空间名冲突。例如,当选择 /vo8 时,System.Diagnostics.Debug.WriteLine() 方法无法调用,因为 DEBUG 定义删除了类名。我们修改了预处理器,使其不再替换 DOT 或 COLON 操作符前后的单词。
  • +
  • 修复了启用后期绑定后调用 System.Object 类中静态方法时编译器崩溃的问题
  • +
  • 修正了 PROPERTY GET 和 PROPERTY SET 中的 String2Psz() 问题
  • +
  • 还有很多更改。
  • +
    + 所有方言 + 新特性 / 更改的行为: + +
  • 对代码生成进行了多项修改:
  • + +
  • ACCESS 和 ASSIGN 的代码生成已发生变化。类中不再有单独的方法,但这些方法的内容现在已内联到生成属性的 Get 和 Set 方法中。
  • +
  • 优化了 IIF 语句的代码生成。
  • +
  • 调试器/步骤信息已得到改进。调试器现在也应在 IF 语句、FOR 语句、CASE 语句等语句时停止。
  • +
    +
    + +
  • 对使用 SELF 关键字定义的属性的索引访问现在也可以使用 “Index”属性名了
  • +
  • 暂时不允许使用类内函数和过程
  • +
  • ASSIGN 方法内的 RETURN <LiteralValue> 将不再分配变量并产生警告
  • +
  • 现在有几个关键字也可以作为标识符(不再需要@@作为前缀):
    Delegate, Enum, Event, Field, Func, Instance, Interface, Operator, Proc, Property, Structure, Union, VOStruct
    因此,以下代码现在是有效代码(但不推荐使用):

    FUNCTION Start AS VOID
      LOCAL INTERFACE AS STRING
      LOCAL OPERATOR AS LONG
      ? INTERFACE, OPERATOR
      RETURN
  • +
    + 您可以看到,Visual Studio 语言支持还识别出 INTERFACE 和 OPERATOR 在此上下文中不作为关键字使用 + Bug 修复 + +
  • 修正了 REPEAT UNTIL 语句的一个问题
  • +
  • 修正了包含 DO CASE 但没有匹配 END CASE 的代码崩溃问题
  • +
  • 修正了 _DLL FUNCTION 和 _DLL PROCEDURE 代码生成中的几个问题
  • +
  • 修正了在程序集中嵌入本地资源的问题(在 Roslyn 代码中)。
  • +
  • 修正了_OR() 和 _AND()运算符在使用 2 个以上参数时出现的问题。
  • +
  • 已添加使用 VO/Vulcan 语法对指针取消引用的支持: DWORD(p) => p[1]
  • +
  • 修正了 @ 操作符的几个问题
  • +
  • 当两个分部类具有相同的名称和不同大小写时,编译器无法正确合并类的定义。
  • +
  • 当代码中的 #define 与命令行中的定义相同时,修复了崩溃问题
  • +
  • 索引指针访问不遵守 /AZ 编译器选项(总是假定基于 0 的数组)。现已修复
  • +
  • 修正了预处理文件的缓存问题,尤其是包含 #ifdef 结构的文件。
  • +
  • 修正了当两个分部类名称相同但大小写不同时可能出现的问题
  • +
  • 修正了当引用的程序集有重复命名空间时编译器崩溃的问题。
  • +
  • 修正了带有 [DllImport] 属性的函数的问题。
  • +
  • ACCESS/ASSIGN 方法的错误信息有时会指向源文件中一个奇怪的位置。这一问题已得到修复。
  • +
  • 修正了带有 STATIC 修饰符的 Init 程序的问题
  • +
  • 修正了预处理器在检测头文件的编码时出现的问题。这可能会导致在读取带有特殊字符(如版权标志 ©)的头文件时出现问题。
  • +
  • 还有很多修复
  • +
    + Visual Studio 集成 + +
  • 在用户界面和生成系统中添加了对所有编译器选项的支持
  • +
  • 修复了子文件夹中依赖文件项的问题
  • +
  • 优化编译器选项不起作用
  • +
  • "清除" 生成选项现在还能清除错误列表
  • +
  • 在某些情况下,即使输出窗格中有信息,错误列表仍然是空的。这一问题已得到解决。
  • +
  • xsproj 文件中的 <Documentationfile> 属性会导致项目重建,即使源代码没有更改也是如此
  • +
  • 早期版本的 XPorter 创建的 xsproj 文件可能无法正常生成。现在,项目系统会自动修复这一问题
  • +
  • 修正了一个与生成系统和某些嵌入式托管资源有关的问题
  • +
    + + 文档 + +
  • 我们在命令行选项中增加了许多描述
  • +
  • 我们添加了最常见的编译器错误和警告
  • +
    + + + Changes in 0.2.8 + 编译器 + VO/Vulcan 兼容性 + +
  • 默认参数现在可以像 VO 和 Vulcan 一样处理。这意味着您也可以将日期常量、符号常量等作为默认参数
  • +
  • 字符串 “单个等号” 规则现在与 “可视对象” 100% 相同。我们发现有一种情况,Vulcan 返回的结果与 Visual Objects 不一致。我们选择与 VO 兼容。
  • +
  • 在 VO/Vulcan 模式下编译时,将自动调用 VO SDK 库中的启动程序。您不必再在代码中调用这些程序。 此外,主程序集中的初始程序也会在启动时被调用。
  • +
  • 实现了 /vo7 编译器选项(隐式转换)。这还包括支持在 REF 参数中使用 @ 符号
  • +
  • 现在,您可以使用 DOT 操作符访问 VOSTRUCT 变量中的成员了
  • +
  • 我们修复了几个 USUAL - 其他类型转换问题,这些问题在以前的版本中需要进行转换
  • +
  • 现在,编译器可以正确解析包含 DECLARE METHOD、DECLARE ACCESS 和 DECLARE ASSIGN 语句的 VO 代码,并忽略这些语句。
  • +
  • 现在,编译器会将 “VO Style ”编译器 pragma(~“keyword”)解析为空格,并忽略这些空格。
  • +
  • 修正了一个问题,即使用 “LOCAL aSomething[10] AS ARRAY ”语法声明的数组不会以适当的元素数初始化
  • +
  • 修正了使用单个 USUAL 参数调用 Clipper Calling Convention 构造函数时出现的问题
  • +
  • _DLL 实体上的属性无法正确编译。这些属性暂时会被识别,但会被忽略。
  • +
  • 修正了几个数字转换问题
  • +
    + 新特性 + +
  • 我们添加了对集合初始化Object 初始化程序的支持
  • +
  • 匿名类型成员不再需要命名。如果选择一个属性作为匿名类型成员,那么匿名类型也将使用相同的属性名称。
  • +
  • 缺失的结束关键字(如 NEXT、ENDIF、ENDCASE 和 ENDDO)现在会产生更好的错误信息
  • +
  • 现在,IIF() 表达式也可以作为表达式语句使用。生成的代码与 IF 语句相同
  • +
    + FUNCTION IsEven(nValue as LONG) AS LOGIC
      LOCAL lEven as LOGIC
      IIF( nValue %2 == 0, lEven := TRUE, lEven := FALSE)
    RETURN lEven
    + 我们确实不鼓励隐藏赋值操作,但如果您确实使用了这种编码风格,它现在可以正常工作<g>。 + +
  • 现在允许将 AS VOID 作为 PROCEDURE 的(唯一)类型规范
  • +
  • 我们在 exe 中为共享编译器添加了一个 .config 文件,它应该能让编译器运行得更快。
  • +
  • 现在,编译时会自动包含 XSharp 中的 XSharpStdDefs.xh 文件。该文件暂时声明了 CRLF 常量。
  • +
  • 编译器现在会缓存包含文件。这将提高依赖大型包含文件(如 Vulcan 的 Win32APILibrary 头文件)的项目的编译速度。
  • +
  • 如果在外部程序集中找到一个函数,而在当前程序集中找到一个具有相同名称和参数的函数,那么编译器将使用当前程序集中的函数
  • +
  • 改进编译器关于缺少闭合符号的错误信息
  • +
  • 改进了意外标记的编译器错误信息
  • +
    + Bug 修复 + +
  • 编译器没有正确处理几个带减号的命令行选项
  • +
  • 修复了与向后期绑定的属性分配 NULL_OBJECT 或 NULL 有关的若干崩溃问题
  • +
  • 分部类不再需要在每个源代码位置指定父类型。当然,指定时父类型必须相同。类实现的父接口也可以分布在多个位置上
  • +
  • 我们更正了在大型包含文件中出现错误/警告时可能导致崩溃的问题
  • +
  • 抽象方法不再使用 /vo3 获得虚修饰符
  • +
  • 修正了子类中的虚方法会隐藏父类方法的问题
  • +
  • 自动返回值生成也会生成 ASSIGN 方法的返回值。这一问题已得到修复。
  • +
  • 我们修复了 LINQ 表达式的连接子句中一个会导致编译器异常的问题
  • +
  • /vo10(兼容 iif)编译器选项不再在 Core 方言中添加强制转换。只有 VO/Vulcan 方言才会这样做
  • +
    + Visual Studio 集成 + 我们更改了错误列表和输出窗口的更新方式。在以前的版本中,输出窗口中可能会缺少某些行,而且错误代码列是空的。现在应该可以正常工作了。 + +
  • 我们从其他一些基于 MPF 的项目系统中合并了一些代码,如 WIX(称为 Votive)、NodeJS 和 Python(PTVS),以帮助扩展我们的项目系统。因此
  • + +
  • 我们的项目系统现在支持链接文件
  • +
  • 我们的项目系统现在支持 “显示所有文件”,您现在可以包含和排除文件。该设置会保存在 .user 文件中,因此您可以根据需要将其从 SCC 中排除。
  • +
  • 我们做了一些更改,以更好地支持 “拖放 ”功能
  • +
    +
    + +
  • 我们更正了几个与从属项目有关的问题
  • +
  • 在包含表单或用户控件的文件中加入表单或用户控件时,现在可以识别这些表单或控件,并在项目文件中设置相应的子类型,这样就可以打开窗口表单编辑器了
  • +
  • 我们现在支持为 .Settings 和 .Resx 文件生成源代码。
  • +
  • 托管资源编辑器和托管设置工具中可在内部代码和公共代码之间进行选择的组合框现已启用。在组合框中选择不同的值将改变文件属性中的工具。
  • +
  • 编译器和本地资源编译器的最后响应文件现在保存在用户 Temp 文件夹中,以帮助调试问题。
  • +
    + +
  • 现在,响应文件将每个编译器选项都放在新的一行,以便在必要时更容易阅读和调试。
  • +
  • 代码生成现在保留了实体(方法)之间的注释
  • +
  • 我们修复了模板中的几个小问题
  • +
  • 当错误和警告的数量大于 500 的内置限制时,将显示一条信息,说明错误列表已被截断
  • +
  • 在生成过程结束时,输出窗口将写入一行内容,列出发现的警告和错误总数
  • +
  • 源代码编辑器中的颜色现在与 C# 和 VB 等标准语言的源代码编辑器共享。
  • +
  • 如果源代码中有一个不活动的代码段,并嵌入了一个计算值为 FALSE 的 #ifdef,那么该代码段将显示为灰色,并且不会出现关键字高亮显示。编辑器的源代码分析器会获取包含文件并尊重路径设置。应用程序属性对话框和活动配置中的定义尚未得到尊重。这将在下一个版本中实现。
  • +
    + + + Changes in 0.2.7.1 + 编译器 + +
  • 编译器不接受 AssemblyFileVersion 属性和 AssemblyInformationVersion 属性的通配符字符串。现已修复
  • +
  • 无法识别 #Pragma 命令 #Pragma Warnings(Push) 和 #Pragma Warnings(Pop)。现已修复。
  • +
  • 编译器无法识别 global::System.String.Compare(..) 这样的表达式。现已修复
  • +
    + Visual Studio 集成 + +
  • 无法正确识别项目子文件夹中的从属项目,打开项目时可能会出错
  • +
  • 修复了 VulcanApp 模板中的一个问题
  • +
  • Windows 窗体编辑器无法打开没有 begin namespace ... end namespace 的文件中的窗体。现已修复
  • +
  • 源代码文件中 “实体” 之间的源代码注释现在可以正确保存,并在表单编辑器重新生成源代码时恢复原状
  • +
  • 抑制生成源代码中不必要的空行
  • +
  • XPorter 工具现在是安装程序的一部分。
  • +
  • 续行符后的注释未正确着色
  • +
  • 更改了 XSharp VS 编辑器的配色方案,使某些项目更易于阅读
  • +
  • 新的托管资源文件不会被标记为适当的项目类型。因此,资源在运行时不可用。这一问题已得到修复。
  • +
  • 在属性窗口中添加了 “Copy to Output Directory(复制到输出目录)” 属性
  • +
    + 安装 + +
  • 现在,installer.exe 文件和文档都有证书签名
  • +
    + + + Changes in 0.2.7 + 编译器 + 新特性: + +
  • 已添加对 VOSTRUCT 和 UNION 类型的支持
  • +
  • 添加了对作为数值的类型的支持,例如在构造
    IF UsualType(uValue) == LONG
  • +
  • 为变量添加了 FIXED 语句和 FIXED 修饰符
  • +
  • 已添加对 插值字符串的支持
  • +
  • 现在允许在 SWITCH 语句中使用空开关标签。它们可以与下一个标签共享执行。
    新增了错误 9024(SWITCH 语句内不允许使用 EXIT 语句),如果尝试退出围绕 switch 语句的循环,则会出现该错误。
    这是不允许的。
  • +
  • 已添加对多个 /vo 编译器选项的支持:
    - vo8(兼容预处理器行为)。这使得预处理器定义不区分大小写。此外,值为 FALSE 或 0 的定义将被视为 “未定义”。
    - vo9(允许缺失 Return 语句)编译器选项。使用 /vo9 时也允许缺少返回值。
    新增警告 9025(缺少 RETURN 语句)和 9026(缺少 RETURN 值)。
    - vo12(Clipper 整数除法)
  • +
  • 现在,预处理器会自动定义从 __VO1__ 到 __VO15__ 的,根据编译器选项的设置,宏值为 TRUE 或 FALSE。
  • +
  • FOX 订阅版本的编译器现在以 Release 模式发布,速度更快。此外,还安装了调试版本的编译器,以便在需要时帮助查找编译器问题。
  • +
    + 更改的行为 + +
  • 编译器为 Core 方言生成的 Globals 类现在称为 Functions,而不再是 Xs$Globals。
  • +
  • 现在,重载 VulcanRTFuncs 中的函数无需指定命名空间:
    当编译器找到两个候选函数,其中一个在 VulcanRTFuncs 中,那么就会选择不在 VulcanRTFuncs 中的函数。
  • +
  • 现在,VO/Vulcan 方言的 9001 号警告(隐含不安全修饰符)已被抑制。不过,如果编译不安全代码,必须通过 /unsafe 编译器选项!
  • +
  • 改进了编译器发布模式的错误信息
  • +
    + Bug 修复 + +
  • Switch 语句中的 RETURN 和 THROW 语句会产生 “代码不可达” 警告。现已修复
  • +
  • 修复了有符号和无符号数组索引混合使用时的几个问题
  • +
  • 修正了 FOR ... NEXT 语句的几个问题。现在,“To ”表达式将在循环的每次迭代中进行计算,就像在 VO 和 Vulcan 中一样。
  • +
  • 修复了若干编译器崩溃问题
  • +
  • 修正了构造函数隐式代码生成的问题
  • +
  • 修正了静态函数内静态变量的可见性问题
  • +
    + Visual Studio 集成 + +
  • 修正了在同一个 Visual Studio 中使用 XSharp 和 Vulcan.NET,以及从输出窗口或查找结果窗口打开文件时选择了错误的语言服务的问题
  • +
  • 修正了生成代码中 “异常” 行尾的一些问题
  • +
  • 修正了类库模板中的一个问题
  • +
  • 修正了启动调试器时使用非标准命令行的问题
  • +
    + + Changes in 0.2.6 + 编译器 + +
  • 已添加事件定义的替代语法。请参阅文档中的 EVENT 关键字
  • +
  • 增加了代码块支持
  • +
  • 实现了 /vo13(兼容 VO 的字符串比较)
  • +
  • 已添加对 /vo4(与 VO 兼容的隐式数字转换)的支持
  • +
  • 现在完全支持别名表达式
  • +
  • 修正了 &= 运算符的一个问题
  • +
  • 修正了几处源代码不正确导致的崩溃。
  • +
  • 修正了几个与 usual、float 和 date 的隐式转换有关的问题
  • +
  • 索引属性(如 String:Chars)现在可按名称使用
  • +
  • 索引属性现在可以使用不同参数类型的重载
  • +
  • 已添加对索引式 ACCESS 和 ASSIGN 的支持
  • +
  • 修复了在调用 Clipper Calling Convention 函数和/或方法时使用单个参数的问题
  • +
  • 修复了预处理器中定义的崩溃问题
  • +
  • _CODEBLOCK 现在是 CODEBLOCK 类型的别名
  • +
  • 修正了使用括号或方括号定义但不带实际参数的属性的崩溃问题
  • +
    + Visual Studio 集成 + +
  • 完成对 Windows.Forms 的 .designer.prg 支持
  • +
  • 修复了 CodeDom 生成器在为服务生成包装器时的一个问题
  • +
  • XSharp语言服务将不再用于Vulcan PRG文件的Side by Side安装。
  • +
  • 改进了编辑器处理大型源文件的性能。
  • +
  • 现在,所有生成的文件都以 UTF 格式存储,以确保特殊字符的正确存储。如果在生成代码时看到有关代码页转换的警告,请从 Visual Studio 菜单中选择 “文件 - 高级保存选项”,然后选择 Unicode 文件格式,将文件保存为 UTF 格式。
  • +
    + + Changes in 0.2.51 + Visual Studio 集成 & 生成系统 + +
  • 本地资源编译器现在能 “找到 ”头文件,如 Vulcan.NET include 文件夹中的 “VOWin32APILibrary.vh”。此外,在 “正常 ”信息模式下运行时,资源编译器的输出现在不再那么冗长。在 “详细 ”或 “诊断 ”模式下运行时,输出现在也包括资源编译器的冗长输出。
  • +
    + 编译器 + +
  • 修正了一个会导致 PDB 文件无法使用的问题
  • +
  • "重复定义但值不同“(9012)的错误已改为警告,因为我们的预处理器进行文本比较时,并没有  ”看到“ ”10 “ 和 ”(10)“ 以及 ”0xA“ 和 ”0xa" 是相同的。当然,您有责任确保这些值确实相同。
  • +
  • 指数 REAL 常量只能使用小写字母 “e”。现在不区分大小写了
  • +
  • 对解析器的 _DLL FUNCTION 和 _DLL PROCEDURE 规则做了一些修改。现在,我们能正确识别 “DLL 提示”(#123),并允许在这些定义中进行扩展。顺序号也能正确解析,但会产生错误 (9018),因为 .Net 运行时不再支持这些顺序号。此外,调用约定现在是强制性的,生成的 IL 代码包括 SetLastError = true 和 ExactSpelling = true。
  • +
  • 修正了 ~ 运算符的一个问题。VO 和 Vulcan(以及 X#)将该运算符用作一元运算符和二元运算符。
    一元运算符进行 bitwise negation(一元补码),二元运算符进行 XOR。
    这与 C# 不同,在 C# 中,~ 运算符是 Bitwise Negation,^ 运算符是 XOR(当然,我们的 Roslyn 后端使用的是 C# 语法)。
  • +
    + + Changes in 0.2.5 + Visual Studio 集成 + +
  • 修正了为 WPF 生成时输出文件名包含管道符号的问题
  • +
  • 修复了 WPF 表单、页面和用户控件的项目类型问题
  • +
  • 安装程序现在可以选择不从已安装的 Vulcan 项目系统中删除 PRG、VH 和 PPO 项目的关联。
  • +
  • 在项目中添加了对几种新项目类型的支持
  • +
  • 新增对嵌套项目的支持
  • +
  • 为 WPF、RC、ResX、设置、位图、光标等添加了多个项目模板。
  • +
    + 生成系统 + +
  • 添加了对新的 /vo15 命令行开关的支持。
  • +
  • 添加了对编译本地资源的支持。
  • +
    + 编译器 + +
  • 使用 VO/Vulcan 方言编译时,现在必须引用 VulcanRT 和 VulcanRTFuncs。
  • +
  • 为 VO/Vulcan 数组的索引访问添加了支持
  • +
  • 已添加对 VO/Vulcan 风格构造器链的支持(其中 SUPER() 或 SELF() 调用不是构造器主体内的第一次调用)
  • +
  • 在 VO/Vulcan 方言中添加了对 &() 宏操作符的支持
  • +
  • 在 VO/Vulcan 方言中添加了对 FIELD 语句的支持
  • +
    + + +
  • 该语句被编译器识别
  • +
  • FIELD 语句中列出的字段现在优先于同名的局部变量或实例变量
  • +
    +
    + +
  • 在 VO/Vulcan 方言中添加了对 ALIAS 操作符 (->) 的支持,但别名表达式 (AREA->(<Expression>) 除外。)
  • +
  • 已添加对后期绑定代码的支持(在 VO/Vulcan 方言中)
  • +
    + + +
  • 后期绑定方法调用
  • +
  • 后期绑定属性 get
  • +
  • 后期绑定属性 set
  • +
  • 后期绑定的委托调用
  • +
    +
    + +
  • 新增了 /vo15 命令行选项(允许未类型化的局部变量和返回类型):
    默认情况下,VO/Vulcan 方言允许缺失类型,并用 USUAL 类型替换。
    如果指定 /vo15-,则不允许使用未类型化的 locals 和返回类型,必须指定它们。
    当然,您也可以将它们指定为 USUAL
  • +
    + +
  • 在为 VO/Vulcan 方言编译时,? 和 ?? 语句现在可直接映射到相应的 VO/Vulcan 运行时函数。
  • +
  • 我们现在还支持 VO 和 Vulcan 方言的 VulcanClassLibrary 属性和 VulcanCompilerVersion 属性。
    有了这种支持,Vulcan 宏编译器和 Vulcan Runtime 应该能够找到我们的函数和类
  • +
  • 现在,生成的静态类名称与 VO & Vulcan 方言中 Vulcan 生成的类名称更加一致。
  • +
  • 为 USUAL 类型添加了几种隐式转换操作。
  • +
  • 在访问 VO & Vulcan 方言中的某些功能(如 USUAL 类型)时,编译器现在会检查是否包含 VulcanRTFuncs.DLL 和/或 VulcanRT.DLL。
    如果没有,则会显示有意义的错误信息。
  • +
  • 已添加对固有函数 _GetInst() 的支持
  • +
  • 修正了区分大小写的命名空间比较的一个问题
  • +
  • 修正了 operator 方法中的一个问题
  • +
    + +
  • 添加了预处理器宏 __DIALECT__, __DIALECT_CORE__, __DIALECT_VO__ 和 __DIALECT_VULCAN__
  • +
  • _Chr() 伪函数现在将被映射为 Chr() 函数
  • +
    + +
  • 已添加对参数列表中缺少参数的支持(仅限 VO 和 Vulcan 方言)
  • +
  • 修正了计算头文件中标记位置时的崩溃问题
  • +
  • 现在,安装程序会将 Vulcan 头文件复制到 XSharp Include 文件夹中
  • +
  • 已添加在 (VO) 字面数组构造函数中跳过参数的支持
  • +
    + 文档 + +
  • 在 Visual Studio 帮助集中添加了 XSharp 文档
  • +
  • 已添加 Vulcan 运行时参考文档
  • +
    + + Changes in 0.2.4 + Visual Studio 集成 + +
  • 双击错误浏览器中的错误现在可以正确打开源文件并定位光标
  • +
  • 修正了项目和项目模板中的几个问题
  • +
  • 现在,安装程序还会检测 Visual Studio 15 预览版,并在此环境中安装我们的项目系统。
  • +
    + 生成 + +
  • 修正了 /unsafe 编译器选项的一个问题
  • +
  • 修正了 /doc 编译器选项的一个问题
  • +
  • 总是将警告视为错误。现已修复。
  • +
    + 编译器 + +
  • 已添加对带有表达式列表的 Lambda 表达式的支持
  • +
    + LOCAL dfunc AS System.Func<Double,Double> + dfunc := {|x| x := x + 10, x^2} + ? dfunc(2) + +
  • 已添加对带有语句列表的 Lambda 表达式的支持
  • +
    + LOCAL dfunc AS System.Func<Double,Double> + dfunc :={|x| + ? 'square of', x + RETURN x^2 + } + +
  • 添加了对 NAMEOF 固有函数的支持
  • +
    + FUNCTION Test(cFirstName AS STRING) AS VOID + FUNCTION Test(cFirstName AS STRING) AS VOID + IF String.IsNullOrEmpty(cFirstName) + THROW ArgumentException{"Empty argument", nameof(cFirstName)} + ENDIF + +
  • 已添加对使用 Clipper 调用约定创建方法和函数的支持(仅限 VO 和 Vulcan 方言)
  • +
  • Using 语句现在可以包含变量声明:
  • +
    + 原来: +    VAR ms := System.IO.MemoryStream{} +    BEGIN USING ms +         // do the work + + END USING + 现在: + BEGIN USING VAR ms := System.IO.MemoryStream{} + // do the work + END USING + +
  • 已添加对 /vo10(兼容 IIF 行为)的支持。在 VO 和 Vulcan 方言中,表达式被转换为 USUAL。在 Core 方言中,表达式被转换为 OBJECT。
  • +
    + VO 和 Vulcan 方言的新语言特性 + +
  • 现在允许在构造函数的任何位置调用 SELF() 或 SUPER() 构造函数(仅限 VO 和 Vulcan 方言)。Core 方言仍要求将构造函数链作为构造函数主体内的第一个表达式
  • +
  • 已添加对 PCOUNT、_GETFPARAM 和 _GETMPARAM 固有函数的支持
  • +
  • 已添加对 String2Psz() 和 Cast2Psz() 的支持
  • +
  • 已添加对 BEGIN SEQUENCE ... END 的支持
  • +
  • 增加了对 BREAK 的支持
  • +
    + 已修复的问题: + +
  • 嵌套的数组初始化器
  • +
  • BREAK 语句的崩溃
  • +
  • 泛型参数的 Assertion 错误
  • +
  • 关于常量隐式引用的 Assertion
  • +
  • 允许在构造函数上使用 ClipperCallingConvention 属性,即使该属性被标记为 “仅适用于方法” 也是如此
  • +
  • 修正了全局常量声明的一个问题
  • +
  • 索引属性内的 __ENTITY__ 预处理器宏
  • +
    + + Changes in 0.2.3 + Visual Studio 集成 + +
  • 我们已改为使用 Visual Studio Integration 的 MPF 风格。
  • +
  • 我们增加了对 Windows 窗体编辑器的支持
  • +
  • 我们增加了对 WPF 编辑器的支持
  • +
  • 我们已添加了对 Codedom Provider 的支持,这意味着上述两个编辑器将使用解析器和代码生成器
  • +
  • 对项目属性页面进行了详细说明。现在可以使用更多的功能。
  • +
  • 我们添加了几个模板
  • +
    + 生成系统 + +
  • 新增了对多个命令行选项的支持,如 /dialect
  • +
  • 运行共享编译器时,命令行选项未正确重置。这一问题已得到修复。
  • +
    + +
  • 生成系统会将传给 Visual Studio 的错误数量限制为每个项目最多 500 个。命令行编译器仍会显示所有错误。
  • +
    + 编译器 + +
  • 我们已开始为 Vulcan 提供自带运行时支持。请参见下面的单独标题。
  • +
  • 现在还支持 __SIG__ 和 __ENTITY__ 宏,以及 __WINDIR__ 、 __SYSDIR__ 和 __WINDRIVE__ 宏。
  • +
  • 调试器说明已得到改进。使用此版本,你将获得更好的调试体验
  • +
  • 一些表明类型与方法参数、返回类型或属性类型之间存在可见性差异的错误已变为警告。当然,您应该考虑在代码中修正这些问题。
  • +
  • #Error 和 #warning 预处理器命令不再要求参数为字符串
  • +
  • 现在,编译器会对 SLen() 函数调用进行内联(就像在 Vulcan 中一样)
  • +
  • AltD() 函数将在 IF System.Diagnostics.Debugger.IsAttached 检查中插入对 “System.Diagnostics.Debugger.Break” 的调用。
  • +
  • 修复了若干编译器崩溃问题
  • +
  • 为方法和函数参数添加了 PARAMS 关键字支持。
  • +
  • 修正了 DYNAMIC 类型的一个问题。
  • +
    + BYOR + +
  • 正确解析 XBase 类型名称(ARRAY、DATE、SYMBOL、USUAL 等)
  • +
  • 现在可正确解决字面值问题(ARRAY、DATE、SYMBOL)
  • +
  • NULL_ 字面已正确解析(NULL_STRING 遵循 /vo2 编译器选项、NULL_DATE、NULL_SYMBOL)。
  • +
  • 已启用 /vo14 编译器选项(浮点字面量)
  • +
  • 编译器会自动在每个程序中插入 “Using Vulcan ”和 “using static VulcanRtFuncs.Functions”。
  • +
  • 您必须在项目中添加对 VulcanRTFuncs 和 VulcanRT 程序集的引用。这可能是 Vulcan 3 和 Vulcan 4 版本的运行时。也许 Vulcan 2 也能运行,但我们没有测试过。
  • +
  • 使用 Clipper 调用约定调用方法的效果符合预期。
  • +
  • 没有返回类型的方法/函数被视为返回 USUAL
  • +
  • 如果方法/函数包含类型化和类型化参数,那么未类型化的参数被视为 USUAL 参数
  • +
  • 暂不支持仅包含非类型参数(Clipper 调用约定)的方法
  • +
  • ? 命令将对参数调用 AsString()
  • +
    + + Changes in 0.2.2 + Visual Studio 集成 + +
  • 添加了更多项目属性。其中一个新属性是 “使用共享编译器” 选项。这将提高编译速度,但可能会产生副作用,即某些编译器(解析器)错误不会显示在详细信息中。
    如果您遇到这种情况,请禁用该选项。
  • +
  • 为生成系统添加了更多属性。现在,X# 也应支持所有 C# 属性,尽管其中一些在 VS 内部的属性对话框中不可见。
  • +
  • 为生成系统添加了 CreateManifest 任务,因此包含托管资源的项目不会再出现错误
  • +
  • 该版本的编辑器性能应该会更好。
  • +
  • 将文本块标记为注释或取消标记并不总是在编辑器颜色中反应变化。这一问题已得到修复。
  • +
    + 编译器 + +
  • 我们添加了第一版预处理器。该预处理器支持 #define 命令、#ifdef、#ifndef、#else、#endif、#include、#error 和 #warning。 目前还不支持 #command 和 #translate(添加用户定义的命令)。
  • +
  • 缺少类型(参数列表、字段定义等)有时会产生不明确的错误信息。我们修改了编译器,使其产生 “缺少类型 ”的错误信息。
  • +
  • 我们将 Roslyn 的底层代码推进到了 VS 2015 Update 1。虽然从外观上看不出什么变化<g>,但编译器中已经加入了一些修复和增强功能。
  • +
  • 添加了 YIELD EXIT 语句(也可使用 YIELD BREAK)。
  • +
  • 添加了 OVERRIDE 关键字(可选),该关键字可用作子类中被重载的虚方法的修饰符。
  • +
  • 添加了一个 NOP 关键字,您可以在故意为空的代码(例如 case 语句的其他分支)中使用该关键字。如果在代码中插入 NOP 关键字,编译器将不再对空代码块发出警告。
  • +
  • OnOff 关键字可能会导致问题,因为它们不是位置关键字(它们是 pragma 语句的一部分)。这一问题已得到解决。
  • +
  • 带有一个参数的 _AND()_OR() 表达式现在会引发编译器错误。
  • +
  • 编译器现在可以识别 /VO14(将字面量存储为浮点数)编译器开关(尚未实施)。
  • +
  • 添加了 ** 操作符作为 ^(指数)操作符的别名。
  • +
  • 在字符串上使用减运算符时,添加了 “不支持 ”错误。
  • +
  • 修正了编译器中的一个 “堆栈溢出” 错误,该错误可能会在很长的表达式中出现。
  • +
  • 右移操作符不再与两个 “大于 ”操作符冲突,这使您可以声明或创建泛型,而不必在它们之间留出空格。
    (var x := List<Tuple<int,int>>{}
  • +
    + + Changes in 0.2.1 + Visual Studio 集成 + +
  • 添加并改进了多个项目属性
  • +
  • 修复 “附加编译器选项” 的问题
  • +
  • 改进编辑器中关键词、注释等的颜色。你可以在 “工具/选项 ”对话框的 “常规/字体和颜色 ”下设置颜色。查找名称为 “XSharp"( 关键字)的条目。
  • +
  • 已添加 Windows 窗体模板
  • +
    + 编译器 + +
  • 若干错误已降级为警告,以便与 VO/Vulcan 更好地兼容
  • +
  • 添加了对以星号开头的注释行的支持
  • +
  • 已添加对 DEFINE 语句的支持。目前,DEFINE 语句的类型必须是
    DEFINE WM_USER := 0x0400 AS DWORD
  • +
  • 修正了反向 GET 和 SET 的单行属性问题
  • +
  • 结合 /VO3 兼容性选项对虚方法和非虚方法进行了多项修复
  • +
    + + Changes in 0.1.7 + +
  • "ns"(为没有命名空间的类添加默认命名空间)已经实现
  • +
  • 实现了 “vo3” 编译器选项(使所有方法都成为虚方法)。
  • +
  • 修正了括号之间表达式的发送操作符编译不正确的问题
  • +
  • 现在支持字符串的关系运算符(>, >=, <, <=)。它们使用 String.Compare() 方法实现。
  • +
  • 修正了在 FOR ... NEXT 语句的起始行声明局部变量时出现的问题
  • +
  • 添加了 CHM 和 PDF 格式的第一版文档
  • +
  • 在 Visual Studio 项目属性对话框中添加了几个属性,以便设置新的编译器选项
  • +
  • 修正了 MsBuild 使用的目标文件中的一个问题,因为某些标准宏(如 $(TargetPath))无法正常工作
  • +
  • 包含 XIDE 0.1.7。该版本的 XIDE 完全使用 XSharp .NET 技术编译!
  • +
  • 某些 MsBuild 支持文件的名称已更改。这可能会导致在加载 VS 项目时出现问题,如果你使用的是上一个版本中的 VS 支持文件的话。如果是这种情况,请在 Visual Studio 中编辑 xsproj 文件,并将 “XSharpProject ”的所有引用替换为 “XSharp”。然后确保 xsproj 文件的安全,并尝试重新加载项目
  • +
  • WHILE. ENDDO(没有前导 DO 的 DO WHILE)现在可以正确识别了
  • +
    + + Changes in 0.1.6 + +
  • 该版本现在附带安装程序
  • +
  • 该版本包含 Visual Studio 集成的第一个版本。您可以在 Visual Studio 中进行编辑、生成、运行和调试。没有 “intellisense ”功能。
  • +
  • 编译器现在使用以 1 为基础的数组,“az ”编译器选项可将编译器切换为使用以 0 为基础的数组。
  • +
  • 实现了 “vo2” 编译器选项(用 String.Empty 初始化字符串变量)。
  • +
  • 请注意,VS 项目属性对话框中还没有 az 和 vo2 编译器选项。您可以使用 “附加编译器选项 ”来指定这些编译器选项。
  • +
  • 错误信息中的 “this ”和 “base ”已更改为 “SELF ”和 “SUPER”。
  • +
  • "可见性" 类型的错误(例如暴露 private 或 internal 类型的 public 属性)已改为警告
  • +
  • 修正了 TRY ... ENDTRY 语句中不包含 CATCH 子句的问题
  • +
  • 编译器现在可以更好地解决其他 (X#) 程序集中的函数问题
  • +
  • 修正了一个问题,当混合使用不同的数字类型时,该问题可能会导致 “运算符不明确 ”的信息。
  • +
    + + Changes in 0.1.5 + +
  • 当解析阶段出现错误时,X# 将不再进入编译器的后续阶段,以防止崩溃。除了解析器的错误外,还会显示错误 9002。
  • +
  • 解析器错误现在也会在错误信息中包含源文件名,并采用与其他错误信息相同的格式。请注意,我们尚未完成对这些错误信息的处理。在即将推出的版本中,这些错误信息的格式将得到改进。
  • +
  • 当程序使用 Xbase 类型(ARRAY、DATE、FLOAT、PSZ、SYMBOL、USUAL)之一时,编译器将显示 “功能不可用”(8022)错误。
  • +
  • 修正了 VOSTRUCT 和 UNION 类型的一个错误
  • +
  • 修正了感叹号 (!) NOT 运算符的一个问题
  • +
    + + Changes in 0.1.4 + +
  • 允许使用整数和枚举进行计算的几处更改
  • +
  • 为实现与 VO 兼容的 _OR、_AND、_NOT 和 _XOR 操作而做的几处修改
  • +
  • 修复 interface/abstract VO 属性
  • +
  • 只有在未明确声明的情况下,才插入隐式 "USING SYSTEM"
  • +
  • 错误 0542 转为警告(成员名称不能与它们的封闭类型相同)
  • +
  • .XOR.表达式定义的变化
  • +
  • 修复 CHAR_CONST 词法规则中的双引号
  • +
  • 允许在类/结构等名称中声明命名空间(CLASS Foo.Bar)
  • +
  • 修复在标识符名称为(位置)ACCESS 关键字时 access/assign 崩溃的问题
  • +
  • 预处理器关键字无法在空格后识别,只能在行首识别。这一问题已得到解决。
  • +
  • 防止属性 GET SET 被解析为表达式正文
  • +
  • 修复接口事件的默认可见性
  • +
  • 使用 /unsafe 选项时,不安全错误变为警告,PTR 为 void*
  • +
  • 修复 dim 数组字段的声明
  • +
  • 初步支持 VO cast 和 VO 转换规则(TYPE(_CAST, Expression) 和 TYPE(Expression))。_CAST 始终 unchecked(LONG(_CAST, dwValue)),而转换则遵循 checked/unchecked 规则(LONG(dwValue))
  • +
  • 修复了参数列表为空的代码块问题
  • +
  • 修复了 GlobalAttributes 的问题。
  • +
  • 不带 GET SET 的 AUTO 属性现在会自动添加一个 GET 和 SET 块
  • +
  • 允许隐式常量从 double 到 single 的转换
  • +
    + Changes in 0.1.3 + +
  • 将不一致的字段可访问性错误改为警告和其他类似错误
  • +
  • 添加了对 Vulcan 参数的命令行支持。除非 Roslyn (C#) 编译器存在等效参数,否则这些参数不会再导致错误信息,但不会真正实现。例如 /ovf 和 /fovf 都被映射到 /checked,/wx 被映射到 /warnaserror 。不应使用 /w,因为其含义与 /warning level(警告级别)不同。而应使用 /nowarn:nnnn
  • +
  • 修复了将 PUBLIC 修饰符分配给接口成员或析构函数的问题
  • +
  • 防止表达式语句以 CONSTRUCTOR() 或 DESTRUCTOR() 开头
  • +
  • 已添加对不带参数的 ? 语句的支持
  • +
  • 如果未指定,赋值的默认返回类型现在是 VOID
  • +
  • 已添加对 “旧风格”委托实例化的支持
  • +
  • 添加了对枚举的支持
  • +
  • 为 TRY ... END TRY(无 catch 和 finally)添加了隐式空 catch 块
  • +
  • 在 LINQ 语句中添加了对 DESCENDING 关键字的支持
  • +
  • 为 属性 和 事件添加了对 VIRTUAL 和 OVERRIDE 的支持
  • +
  • 防止隐含覆盖插入抽象接口成员
  • +
  • 修复了一个无法解析 System.Void 的问题
  • +
  • 修复了 ACCESS/ASSIGN 属性生成的问题
  • +
  • 修复了 Abstract 方法处理的问题
  • +
    + Changes in 0.1.2.1 + +
  • 添加了默认表达式
  • +
  • 修复了与事件有关的问题
  • +
  • 修复了一些小的词法问题
  • +
  • 修复了 _DLL FUNCTION 和 _DLL PROCEDURE 的问题
  • +
    + Changes in 0.1.2 + +
  • 修复了处理扩展字符串中转义序列的问题
  • +
  • 修复了 FOR... NEXT 语句中的问题
  • +
  • 修复了 SWITCH 语句的一个问题
  • +
  • 修复了 sizeof() 运算符的一个问题
  • +
  • 修复了 REPEAT ... UNTIL 语句中的一个问题
  • +
  • 修复了 TRY ... CATCH ... FINALLY ... END TRY 语句中的一个问题。
  • +
  • 修复了条件访问表达式 ( Expr ? Expr) 中的问题
  • +
  • 允许使用 args 类型访问名称的绑定成员
  • +
  • 修复了包含多个 LOCAL 语句的 问题
  • +
  • 修复了在编译不带主体的方法时使用调试信息的问题
  • +
  • 优化了 Lexer。这将大大提高编译速度
  • +
  • 修复了代码中的一个问题,该问题会报告一项功能尚不支持
  • +
  • 修复了使用 STRUCTURE 约束条件定义泛型时出现的问题
  • +
  • 编译器宏(__ENTITY__、__LINE__ 等)导致崩溃。现在,编译器会插入一个包含宏名称的字面字符串。
  • +
  • 版本 0.1.1 不包含 XSC.RSP
  • +
  • 修复了当标识符匹配(新)关键字时无法识别的问题
  • +
    + + +
    diff --git a/docs/Help_ZH-CN/Topics/VersionHistoryXSharp2.xml b/docs/Help_ZH-CN/Topics/VersionHistoryXSharp2.xml new file mode 100644 index 0000000000..51679728cd --- /dev/null +++ b/docs/Help_ZH-CN/Topics/VersionHistoryXSharp2.xml @@ -0,0 +1,4472 @@ + + + + 历史XSharp 2 + + Changes + Runtime chapter + String Literals + Version History + XSharp 2 + + +
    + 历史XSharp 2 +
    + Changes in 2.24.0.1 + 编译器
    Bug修复
    + +
  • 为不带可见性修饰符的 VFP 类成员生成文档的功能失效(#1664)
  • +
    + +
  • 修正了默认参数值的类型与参数类型不匹配的问题。例如,为十进制参数使用Long默认值 (#1733)
  • +
    + 生成系统
    Bug修复
    + +
  • WriteCodeFragment 任务现在可以像 C# 编译系统一样,正确支持 _Parameter1 和 _Parameter2 等参数。
  • +
    + 运行时
    Bug修复
    + +
  • 修正了对重载方法的后期绑定调用问题 (#1696)
  • +
    + +
  • 修正了 GoMonth() 函数(VFP 方言)的模糊调用错误问题 (#1724)
  • +
  • 修正了使用 VIA 子句时 COPY TO 命令的问题 (#1726)
  • +
    + Visual Studio 集成
    Bug修复
    + +
  • 从项目中删除文件时,该文件不会从 intellisense 数据库中删除。这一问题已得到修复。
  • +
  • Goto 定义不再包括 BuildAction 文件属性设置为 "None"的 prg 文件的源代码 (#1630)
  • +
  • 对于没有可见性修饰符的字段,Intellisense 无法显示 VFP 类中的字段(#1725)
  • +
  • ToggleLineComment 和 ToggleBlockComment 函数未正确保持前导空白 (#1728)
  • +
  • 修复了 AssemblyCustomAttributes 的代码生成问题
  • +
    + +
  • 修复了 VS 2017 和 VS 2019 中调试器表达式评估器的一个问题
  • +
    + 新特性 + +
  • 添加了从现有 VO 表单生成 Windows 窗体表单的上下文菜单选项 (#1366)
  • +
  • 代码生成器现在可自动生成 END CONSTRUCTOR、END METHOD 等代码。
  • +
    + VOXporter + 新特性 + +
  • 添加特殊标记 "VXP-NOCHANGE"、"{VOXP:NOCHANGE}",指示 VOXporter 完全不修改模块/prg 文件中的代码 (#1723)
  • +
    + XIDE + 常规 + +
  • 添加了 "查看->隐藏侧边栏"(SHIFT+F4)选项,可在集成开发环境中快速显示/隐藏左/右边栏
  • +
  • 启用"调试->查看 DB 工作区"调试窗口
  • +
  • 修复了在未使用图库模板时新应用程序默认为 CLR2 的问题
  • +
  • 为应用程序属性窗口中的 "要运行的应用程序 "选项添加了文件夹按钮
  • +
  • 添加了几个 "每日提示 "项目
  • +
  • ·新增“首选项/突出显示活动文件标题”选项
  • +
  • ·新增“首选项/按应用程序绘制文件标题”选项
  • +
  • ·在“文件->导航”菜单项中添加了键盘快捷键信息
  • +
  • ·在工具窗口的选项卡页面上下文菜单中添加了“停靠到窗格”选项
  • +
  • ·在编辑器文件的主 IDE 窗口上下文菜单中添加了“分离/连接”选项
  • +
  • ·在浮动窗口中的文件也添加了常规上下文菜单选项
  • +
  • ·工具窗口现在也可以通过中间鼠标按钮点击关闭
  • +
    + Changes in 2.23.0.2 + 编译器 + 新特性 + +
  • 添加了一个编译器警告:当将常量 "NIL" 分配给非 usual 类型变量时 (#1688)
  • +
    + Bug修复 + +
  • 修复了在插值字符串中出现语法错误时编译器崩溃的问题 (#1672)
  • +
  • 修复了当应用程序中存在具有相似名称的 prg 文件时静态实体的问题 (#1677)
  • +
  • 修复了父类中同名访问器和字段之间的冲突(#1679)
  • +
  • 修复了在 VFP 方言中将星号 (*) 注释行标记与分号 (;) 一起使用时的问题 (#1685)
  • +
    + 生成系统 + +
  • 将被抑制的警告从 DisabledWarnings 属性移动到 NoWarn (#1697)
  • +
    + 运行时 + 新特性 + +
  • 为数组添加了额外的排序函数 ASortFunc() 和 ASortEx(),支持 .Net 风格的排序 (#1683)
  • +
  • 允许注册特殊错误处理程序,用于在宏编译期间处理错误 (#1686)
    要使用此功能,请声明一个具有以下原型的函数或方法:

    DELEGATE CodeblockErrorHandler(cMacro as STRING, oException as Exception) AS ICodeBlock
  • +
    + +
  • 为 VFP 函数 GoMonth()、Quarter()、Week()、DMY() 和 MDY() 添加了非类型重载 (#1724)
  • +
  • 在 VFP 运行时库中实现了 Seek() 函数 (#1718)
  • +
  • 允许注册特殊错误处理程序,在宏编译过程中出现错误时调用 (#1686)
    要使用此功能,请声明具有以下原型的函数或方法:

    DELEGATE CodeblockErrorHandler(cMacro as STRING, oException as Exception) AS ICodeBlock
  • +
    +
    然后像这样将其注册为代码块错误处理程序:
    RuntimeState.CodeBlockErrorHandler := CodeBlockErrorHandler
    当函数/方法返回 NULL 时,就会抛出异常。
    当函数/错误处理程序返回一个代码块时,该代码块将用于评估宏。例如

    FUNCTION CodeBlockErrorHandler(cMacro AS STRING, oEx AS Exception) AS ICodeblock
      ? Mmacro
      ? oEx:Message
      // 出现类似错误时,Visual Objects 返回 NIL
    RETURN {|| NIL }

    FUNCTION Start() AS VOID STRICT
      RuntimeState.MacroCompilerErrorHandler := CodeBlockErrorHandler
      ? &("'aaa'bbb'")    // 单引号数量不均,错误。
                          // 返回 NIL,因为 ErrorHandler 返回的代码块为 NIL
    + Bug fixes + +
  • 修复了 COPY TO ARRAY / DbCopyToArray() 在处理类型为 "G" 的字段时的问题(#1530)
  • +
  • 修复了 ASort() 在使用 .Net Framework 4.5 排序例程时返回不一致结果的问题 (#1653)
  • +
  • 修复了 Integer() 函数依赖于 SetFloatDelta() 设置的问题 (#1676)
  • +
  • 修复了延迟绑定调用中默认方法参数的多个问题  (#1684)
  • +
  • 修复了 IVarGetInfo() 在覆盖的 ASSIGN 方法具有不同大小写时的问题 (#1692)
  • +
  • 修复了延迟绑定调用中 ENUM 参数的问题 (#1696)
  • +
  • 修复了延迟绑定代码中 FindMethod() 内部的异常(处理了具有相似名称的方法和赋值)(#1702)
  • +
  • 修复了 ProcName(x) 返回错误结果的问题 (#1704)
  • +
  • 修复了在 XBase++ 方言中通过对象实例调用类 access 方法的问题 (#1705)
  • +
  • 修复了在使用 DirChange() 更改当前目录后 File() 函数找不到文件的问题 (#1706)
  • +
  • 修复了 Directory() 函数的多个兼容性问题 (#1707 and #1708)
  • +
    + 宏编译器 + +
  • 宏中的整数除法现在返回 float 而不是 INT (#1641)
  • +
  • 允许宏编译器在 FoxPro 方言中访问 protected 和 private 成员 (#1662)
  • +
  • 修复了宏编译器处理 IN 参数的问题 (#1675)
  • +
  • 修复了脚本和 ExecScript() 的各种问题(#1646, #1682)
  • +
    + RDD System + +
  • 修复了打开没有扩展名的 dbf 文件时的问题 (#1671)
  • +
  • 修复了 DbServer:OrderScope() 在没有新值时总是返回 NIL 并将范围设置为 NIL 的问题 (#1694)
  • +
    + Typed VO SDK + +
  • 修复了 MouseMove( oMev) 未被 FixedText 调用的问题(#1680)
  • +
    + +
  • 为窗口类添加了一个属性 EnableDispatch。当设置为 TRUE 时,将调用 Dispatch() 方法。(#1721)
  • +
    + Visual Studio 集成 + Bug修复 + +
  • 修复了编辑器在显示带注释的多行语句的区域标记时的问题  (#1667)
  • +
  • 修复了 "is not null" 代码模式的错误高亮问题 (#1699)
  • +
    + XIDE + 常规 + +
  • 在 Project 窗口中添加了折叠所有节点的工具栏按钮
  • +
  • 在 Preferences 窗口和插件系统中添加了选择转义文字编辑器颜色的支持
  • +
  • 在查找结果窗口中添加了 复制所有内容/仅代码 的上下文菜单选项
  • +
  • 控件排序窗口现在支持使用键盘移动项目(选项卡顺序),通过使用 CTRL 或 SHIFT + 上/下键
  • +
  • 修复了错误地将 Func<T> 高亮为关键字的问题
  • +
  • 项目/应用程序导出现在还包括本地资源文件 (.rc)
  • +
  • 对每日提示窗口进行了一些改进
  • +
    + 文档 + Bug修复 + +
  • 修复了 CONSTRUCTOR、DESTRUCTOR、ENUM、EVENT、FUNCTION、METHOD OPERATOR、PROPERTY、STRUCTURE 主题的文档问题 (#1655)
  • +
    + Changes in 2.22.0.1 + 编译器 + Bug 修复 + +
  • 修正了 RECOVER USING 语句中未知变量错误行的问题 (#1567)
  • +
  • 修复了参数中的默认值导致编译器崩溃的问题 (#1647)
  • +
  • 修正了在操作系统中使用字体缩放时,VOWED 工具箱窗口中的文本会出现错乱的问题 (#1650)
  • +
  • 修正了向项目中添加 COM 引用时的错误 (#1654)
  • +
    + 生成系统 + +
  • 某些从 Vulcan 转换而来的项目文件可能会导致从错误列表中查找错误的问题。该问题已得到修复:在 Visual Studio 内构建时,属性 GenerateFullPaths 现在总是设置为 “true”。
  • +
  • LastXSharpResponseFile.Rsp 和 LastXSharpNativeResourceResponseFile 文件现在总是在临时文件夹中创建,而不是在临时文件夹中的 MSBuildTemp 子文件夹中创建。
  • +
    + 运行时 + Bug 修复 + +
  • ExecScript() 现在可调用新宏编译器中的脚本代码 (#1646)
  • +
    + 新特性 + +
  • 已将 SetCPU() 和 SetMath() 标记为过时
  • +
  • Bin2Ptr() 和 Ptr2Bin() 现在也能在 X64 模式下运行。返回或预期的字符串长度为 8 个字符。
  • +
    + RDD 系统 + +
  • 修正了当使用比最高索引值更高的底部作用域时,DbOrderInfo() 返回错误的键计数的问题 (#1652)
  • +
    + VOSDK + +
  • 修正了 DataDialog:ToolBar 返回值总是 NULL 的问题,即使分配了工具栏对象也是如此 (#1660)
  • +
    + VOXporter + 新特性 + +
  • 现在,从 .mef 导入时也会生成可视化编辑器的二进制文件和支持文件。 (#1661)
  • +
    + Visual Studio 集成 + Bug 修复 + +
  • 修正了用户扩展方法的 IntelliSense 问题 (#1421)
  • +
  • 修正了格式化文档中的 DEFINEs 问题 (#1642)
  • +
  • 修正了当程序集不存在时读取程序集信息的问题 (#1645)
  • +
  • 修正了 VFP 类项目模板中 DEFINE CLASS 语法的问题 (#1648)
  • +
  • 修复 Window 编辑器工具箱字体大小的问题 (#1650)
  • +
  • 修复在项目中添加 COM 引用的问题 (#1654)
  • +
    + XIDE + 常规 + +
  • 推出 “每日小贴士 ”功能
  • +
  • 项目窗口搜索器提示的显示时间从 2 秒增加到 5 秒
  • +
  • 在项目窗口中添加了使用 F3 重复上次搜索的功能
  • +
  • 为 Locals 详细信息编辑框添加了垂直滚动条
  • +
    + Editor + +
  • 修正了识别某些位置关键字(如 CONSTRUCTOR)的问题
  • +
  • 修正了 X# 特定数据类型(USUAL、FLOAT、DATE 等)的 intellisense 问题
  • +
  • 修正了从 X# 程序集读取名称中包含特殊字符的函数时的 intellisense 问题
  • +
    + 设计器 + +
  • 修复了在表单设计器中解锁控件的问题
  • +
    + 调试器 + +
  • +
    + 插件系统 + +
  • 已添加 ProjectItemBase:SelectNodeInProjectPad() 方法(适用于所有项目项类型)
  • +
  • 添加了属性 Editor:LineHeight、Editor:LineCount 和 Editor:FirstVisibleLine
  • +
  • 添加了方法 PluginService:GetEditorColor(eColor AS EditorColor) 和 PluginService:SetEditorColor(eColor AS EditorColor, oColor AS Color)
  • +
    + 文档 + Bug 修复 + +
  • [查看源代码] 链接指向的是 Github 上的功能分支。现在指向的是主分支。
  • +
  • 更新了关于插值字符串的帮助主题。
  • +
    + Changes in 2.21.0.5 + 2.21.0.5 中可能出现的中断性更改 + 所有方言 + 到目前为止,编译器根据方言为命令行选项提供了几种内置默认值。 + 这意味着当命令行选项不存在而选择了某种方言时,该选项就会自动启用。我们讨论的是以下选项: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + 方言 + + 选项 +
    + Core + + AllowNamedArgs +
    + Core + + AllowDot +
    + FoxPro + + AllowDot +
    + FoxPro + + AllowOldStyleAssignments +
    + FoxPro + + Vo9 +
    + FoxPro + + Vo15 +
    + FoxPro + + InitLocals +
    + Other + + Vo15 +
    + + 这让一些人(也让我们)感到困惑。例如,如果要禁用 /initlocals- 选项,就必须在使用 FoxPro 方言编译时明确添加该命令行选项。 + + 此外,如果项目文件中没有与编译器选项相匹配的特定属性,MsBuild 系统也不会将命令行参数传递给编译器。因此,如果项目文件不包含 <AllowDot> 节点,那么在使用 Core 语言编译项目时,命令行选项 /allowdot 将被启用,但在使用 VO 或 Xbase++ 语言编译项目时,命令行选项 /allowdot 将被禁用。这非常令人困惑! + + 为了解决这个问题,我们采取了以下措施 + +
  • 编译器将删除默认值。
  • +
  • 对于项目文件中未定义的选项,编译系统将生成带有“-”标志的命令行选项。这只会发生在 X# 特定的命令行选项上。我们从 Roslyn “继承”的编译器选项,如/debug、/optimize 等,仍将像以前一样工作。
  • +
  • 在 Visual Studio 中打开项目文件时,我们会检查上面列出的方言和选项。如果项目文件中缺少某个选项,我们就会添加该选项,并将其值设为 “true”。我们还将删除与方言无关的选项。例如:对于 Core 方言,foxpro 和 xpp 的特定设置将被移除。
  • +
    + + 这通常会导致与之前相同的编译结果。你可能看到的唯一区别是,当你用此版本打开项目文件时,文件会自动更新。 + FoxPro 方言 + 到目前为止,DEFINE CLASS 语法不仅可用于创建继承自 FoxPro 兼容 Custom 类的类,还可用于创建继承自其他 .Net 类的类。事实证明这有点复杂。 + 此外,还有一个 /fox1 编译器选项,可使 DEFINE CLASS 命令中的 AS ParentClass 子句成为可选项。没有 AS ParentClass 的类将自动从自定义类继承。 + + 我们做了以下更改: + +
  • AS BaseType 子句将像在 Visual FoxPro 中一样是强制性的
  • +
  • ParentType 必须是 Custom 类或从 Custom 类派生的类。
  • +
  • /fox1 编译器现已过时
  • +
    + + 如果要从 VFP 类层次结构之外的类(标准 .Net 类)继承,则必须使用 CLASS ... END CLASS 语法。END CLASS 语法。 + + 编译器 + Bug 修复 + +
  • 修正了字段/内存变量重复声明时的内部编译器错误 (#1475)
  • +
  • 修正了在启用 /fox2 的 VFP 方言中调用函数时的错误警告 (#1476)
  • +
  • 修正了 FLOAT 类型的最小/最大 IEnumerable 扩展方法的问题 (#1482)
  • +
  • 修正了 XBase++ 方言中acess/assign方法的 StackOverflowException 异常 (#1483)
  • +
  • 修复了读取带有文件结束标记的 clipper/harbour .prg 文件的问题 (#1485)
  • +
  • 修正了预处理器中扩展表达式匹配标记的问题 (#1487)
  • +
  • 修正了在 XBase++ 方言中通过引用传递数组引用或 ivar 的问题 (#1492)
  • +
  • 修正了针对包含在接口中的方法的 Evaluate() 函数中的 AmbiguousMatchException。 (#1494)
  • +
  • 修正了 /fox1 开关在某些情况下被忽略的问题 (#1496)
  • +
  • 编译系统现在会自动为使用 X# 编译的程序集添加 TargetFramework 属性 (#1507)
  • +
  • 修正了命名空间和属性同名时的歧义问题,以及禁用 /allowdot 选项时的若干问题 (#1515)
  • +
  • 修正了带有 TEXTMERGE 子句的 TEXT TO/ENDTEXT 中的问题 (#1517)
  • +
  • 修正了编译器错误报告中关于需要 /memvar 选项的误导性行号 (#1531)
  • +
  • 修正了与定义索引属性有关的一些问题 (#1543)
  • +
  • 修正了 /vo9(处理丢失的 RETURN 语句和返回值)编译器选项的若干问题 (#1544)
  • +
    + +
  • Fixed parser problem with END DEFINE, END PROCEDURE and END FUNCTION in the VFP dialect (#1564)
  • +
    + +
  • 修正了在 FoxPro 方言的 CLASS 语句中使用特性(attributes)的问题 (#1566)
  • +
    + +
  • 修正了宏编译器在编译强类型代码块时出现的问题 (#1591)
  • +
  • 修正了在 VFP 方言中使用 DEFINE CLASS 语法定义的特性(Attributes)被忽略的问题 (#1612)
  • +
    + +
  • 编译器在构建带有 .editorconfig 文件的解决方案时可能会崩溃。
  • +
  • 修正了为 FoxPro 风格类定义内的成员属性生成特性(attributes)输出的问题。
  • +
  • 修正了关于在 VFP 方言中定义不含 AS 子句的类的错误信息中的错字(#1611)
  • +
  • 添加了对无类型参数的泛型的支持,如 typeof(List< >) 和 typeof(Dictionary<,>) (#1623)
  • +
  • 更改与 FoxPro 兼容的 DEFINE CLASS(见上文)
  • +
  • 更改了处理命令行参数缺失的方式(见上文)
  • +
    + +
  • We have added the double colon (::) separator for interpolated strings to separate the expression from the format specifier. C# uses the single colon (:) but that character is also used as member access operator in X#.See the String Literals topic for more information.
  • +
    + 生成系统 + +
  • 我们修正了编译系统中的一个问题,该问题有时会导致重新编译,即使没有更改任何内容。
  • +
    + +
  • 修正了 machine.config 中的语言与内置系统中的语言定义不匹配的问题
  • +
  • 修正了导致 .xml doc 文件写入错误文件夹的问题
  • +
  • 更改了将丢失的项目文件属性转换为命令行参数的方式(见上文)
  • +
    + 运行时 + Bug 修复 + +
  • 修正了一些 DBSetFilter() 与 VO 不兼容的问题 (#1489)
  • +
  • 修正了 DBSetFilter() 在没有匹配记录时导致后续调用 DBSetFilter() 或 DBClearFilter() 失败的问题 (#1493)
  • +
  • 修正了 FoxPro COPY 命令中 WITH CDX 子句的问题(缺少实现) (#1497)
  • +
  • 修正了 SCATTER/GATHER MEMO MEMVAR 的问题 (#1510, #1534)
  • +
  • 修正了一个问题,即添加项目时,Collection(集合)类不会增加Count属性(FoxPro 方言)(#1528)
  • +
  • 修正了带有 FOR 子句的 APPEND FROM 命令的问题 (#1529)
  • +
  • 修正了在 FoxPro 方言中使用 Str() 时的宏编译器问题(导致 INDEX ON 命令出现问题)(#1535)
  • +
  • 修正了宏编译器在使用某些语言关键字(如 REF、FIELD、DEFAULT)作为标识符时出现的问题 (#1557)
  • +
    + +
  • 修复了 VFP 方言中 REPLACE、DELETE 和 UPDATE 命令的问题 (#1574, #1575, #1576, #1577)
  • +
    + +
  • 修正了 USUAL 类型中的一个问题,即浮点数值的 CompareTo 执行不正确 (#1616)
  • +
  • 修正了 USUAL 类型中 ! 运算符与 (LOGIC) cast 相比不能产生正确结果的问题。
  • +
    + +
  • 我们修复了 XSharp.VFP.UI 库中的几个问题
  • +
    + RDD 系统 + +
  • 修正了 DbZap() 与 DBFNTX 之间的一个问题 (#1509)
  • +
    + +
  • 修正了 DBFNTX 中 DBSetOrder(0) 始终返回 FALSE 的问题 (#1520)
  • +
    + +
  • 为与 VO 兼容,当工作区处于 EOF 时使用 FieldPut() 时,消除了运行时错误 (#1542)
  • +
  • 修复了 AXDBFCDX 驱动程序中 OrderDescend() 的问题 (#1608)
  • +
    + +
  • 修正了读取使用多字节编码存储的 DBF 文件的可变长度字段的问题。
  • +
    + +
  • 修正了用简体中文编码的 DBF 文件被解释为粤语的问题。
  • +
  • 修复了 DBF RDD 中的一个问题,即在获取记录或文件锁后,未重新加载 currentbuffer。
  • +
  • 我们修复了 DBF 文件大于 2 Gb(0x7FFFFFFF 字节)时的一个问题
  • +
  • 在 DBFCDX 驱动程序中创建 UNIQUE 索引时会排除 DBF 文件中的第一条记录
  • +
    + VOSDK + +
  • 修正了 Window:__CommandFromEvent 中的拼写错误,该错误会导致来自 SEUIXP 的命令产生运行时错误。
  • +
    + Visual Studio 集成 + Bug 修复 + +
  • 修复了保存/读取 OldStyleAssignment 编译器选项项目设置的问题 (#1495, #1582)
  • +
  • 修正了 VS2022 中的一个问题,即由于 VS 中的一个更改,编辑器中的几个功能不再工作 (#1545)
  • +
  • 修正了编辑器中 SCAN...END SCAN 的缩进问题 (#1549)
  • +
  • 修正了将 Windows 窗体用户控件的 .resx 文件放在解决方案资源管理器中不正确位置的问题 (#1560)
  • +
  • 修复了编辑器中代码片段在 VS 2022 17.11 版中不再工作的问题 (#1564)
  • +
    + +
  • Fixed problem with the parameter list auto-showing tooltip when using <Enter> to accept a method from the member completion list (#1570)
  • +
    + +
  • 修复了带有结束关键字(如 NEXT 和 ENDDO)的缩进行的问题(当这些关键字后跟有 “垃圾 ”时)。
  • +
  • 当 include 中的一个文件声明了实体(如 USING SomeNameSpace)时,在 VS 表单设计器中打开表单可能会失败(#1595,#1596)
  • +
  • 修正了调试器中以“$”字符开头的标识符(如异常对话框中的“$exception”)无法正确评估的问题(#1602)
  • +
  • 修正了使用 DEFINE CLASS  ... ENDDEFINE 声明的 VFP 样式的类的缩进问题(#1609)
  • +
    + 新特性 + +
  • 现在,在 VS 中构建任何项目类型时,TargetFramework 属性都会自动添加到程序集中 (#1507)
  • +
  • 已添加对 GotoBrace 命令的支持,该命令不仅适用于普通括号,还适用于 IF ... ENDIF 等关键字对  (#1522)
  • +
  • 现在,编辑器左上方有一个组合框,显示定义文件的项目。
  • +
  • 如果文件存在于多个项目中(作为链接文件),那么项目组合框将显示使用该文件的所有项目名称。
  • +
  • 从组合框中选择不同的项目时,缓冲区将重新绘制,因为每个项目的条件编译符号可能不同。
  • +
  • 在编辑器中使用 intellisense 时,查找引擎将使用所选的项目。因此,如果一个文件在 2 个项目中使用,那么将使用所选项目的引用和源文件来查找引用数据。
  • +
  • 添加了对 FoxPro 关闭关键字变化(如ENDFOR 和 ENDWITH)的正确缩进支持
  • +
  • 我们已将项目系统中与 X# 语言相关的若干功能移至语言服务,以便为 SDK 项目的新项目系统做好准备。
  • +
  • 我们在 “文件” 级别的完成列表中添加了对片段的支持
  • +
  • 我们不再为没有任何 X# 项目的解决方案创建 X# intellisense 数据库
  • +
  • 我们对 X# intellisense 数据库结构做了一些更改。当您打开一个已有数据库的解决方案时,数据库将被删除,所有源文件将被重新扫描(仅一次)。
  • +
  • X# 源代码编辑器顶部现在多了一个组合框,可列出包含文件的项目。当一个文件包含在多个项目中时,你可以看到所有项目。切换到新项目将改变 “评估上下文”。条件编译(#ifdef)会在编辑器中反映出变化。
  • +
  • 我们在编辑器中添加了对 Edit.NextMethod 和 Edit.PreviousMethod 命令的支持。这些命令通常没有快捷键,但您可以使用 Visual Studio 工具栏上的 “自定义 ”选项来分配它们。例如,您可以指定 Ctrl-DownArrow 和 Ctl-UpArrow。
  • +
  • 改进了 VOWED 中的 “克隆窗口 ”选择对话框 (#1508)
  • +
  • 在 VOWED 中选择多个控件时,现在最后选定的控件将成为 “属性 ”窗口中的 “活动 ”控件
  • +
  • 在 VOWED 中粘贴控件时,控件现在会转到控件顺序列表的底部
  • +
  • 在 “VOWED 控制顺序 ”对话框中添加了选项,以便在 “使用鼠标 ”时,在当前选定控件之后开始调整控件的控制顺序
  • +
  • 将 Mono.Cecil 库更新至 0.11.6
  • +
  • 当以前 “隐含”的属性丢失时,项目文件会被调整(见上文)
  • +
    + XIDE + 常规 + +
  • 在 intellisense 中用 Mono.Cecil 代替 System.Reflection,以提高性能和稳定性
  • +
  • 工具箱编辑器现在还使用 Mono.Cecil 从 dlls 中读取控件
  • +
  • 现在,在打开文件后直接关闭文件时(没有激活另一个文件),焦点会在打开新文件前返回到之前激活的文件。
  • +
  • 改进了对独立文件的支持,在属性窗口中增加了方言、引用等选项
  • +
  • 将各种 XIDE 支持文件的默认名称从 “vi ”改为 “xi”(.xiaef、xiapp 等)
  • +
  • 修正了意外调用旧版本 XIDE 资源编译器和工具箱编辑器的问题
  • +
  • 在生成(build)事件中添加了"%OUTPUTEXT%(输出程序集扩展名)宏
  • +
  • 在应用程序属性中添加了对 -allowdot 编译器选项的支持,所有应用程序默认启用该选项
  • +
  • 修正了无法正确保存编译器选项 /initlocals、/modernsyntax、/allowoldstyleassignments 和 /namedargs 的问题。
  • +
  • XIDE 主窗口状态栏中的剪贴板项现在可在工具提示中显示当前剪贴板内容
  • +
  • 剪贴板选择上下文菜单现在也可显示每个虚拟剪贴板的内容
  • +
  • 插件系统的一些小修正(您可能需要重新编译您的插件)
  • +
  • 为 “项目” 工具窗口中的项目节点添加了 “打开备用文件夹 ”上下文菜单选项
  • +
  • 为窗口资源编辑器添加了包含字符串和文本文件的选项
  • +
  • 为FoxPro、XBase++和Harbour方言添加了应用程序模板
  • +
  • 现在,“新建应用程序 ”对话框中显示的应用程序模板将根据每个图库文件模板的图库索引设置进行排序
  • +
  • 新增菜单选项 View|Load/Save/Reset Layout,用于在 IDE 窗口和工具窗口的不同布局之间切换
  • +
  • 在 template.cfg 中添加了一些新模板(代码片段)
  • +
  • 已添加项目对 /vo15 编译器选项的支持
  • +
  • 为 allowdot 编译器选项添加了独立文件默认设置(Preferences/Compiler)
  • +
  • 添加了在运行控制台应用程序时设置控制台位置的选项(Preferences/Advanced)
  • +
  • 在主菜单(File/Navigate and Edit/Advanced)中加入多个 “hidden”命令
  • +
  • 改进了在Watch工具窗口中删除项目的功能
  • +
  • 改进了 “About XIDE”对话框
  • +
    + + 编辑器 + +
  • 改进对代码中关键字的识别
  • +
  • 修复了代码中 2 个字母长函数的识别问题
  • +
  • 修正了 core 方言应用程序中定义的函数的 intellisense 问题
  • +
  • 已为 FOREACH VAR 添加 intellisense 支持
  • +
  • 修复了编辑器中 VAR locals 崩溃的问题
  • +
  • 修正了 LOCAL IMPLIED 的几个问题
  • +
  • 修正了在名称空间中解析已修改类的问题
  • +
  • 改进编辑器对 FoxPro、Harbour 和 XBase++ 方言的支持
  • +
  • 添加了对大量 FoxPro 关键字的编辑器支持
  • +
  • 添加了对 FoxPro 函数的编辑器支持
  • +
  • 编辑器现在可识别 FoxPro 方言中的行注释标记 &&
  • +
  • 添加了对使用 ? 后缀指定的可空类型(例如 INT?)的 intellisense 支持。
  • +
  • 已添加对 ?: 操作符的 intellisense 支持
  • +
  • 已添加对 IF <identifier> IS <type> VAR <local> 的 intellisense 支持
  • +
    + +
  • 已添加选项(Preferences/Editor/Edit) ,以自动调整包含下划线的数字字面量
  • +
  • 添加了带 REPEAT...UNTIL 和 BEGIN SCOPE...END 选项的上下文菜单 Surround
  • +
  • 添加了在编辑器中排序实体的选项(试验性)(Edit->Sort Entities)
  • +
    + + 设计器 + +
  • 现在,VOWED 属性窗口中的项目按名称排序
  • +
  • 现在可通过键盘上的 SHIFT+ 箭头键调整 WED 中控件的大小
  • +
  • 在设计器中加载 WindowsForms 表单时,所有 TabControl 现在都会初始选择其第一个 TabPage
  • +
  • 自动生成的事件处理程序方法名称现在在控件和名称中的事件部分之间包含下划线
  • +
  • 已添加选项(首选项/设计器),可在生成的代码中添加END(方法、构造函数等)语句
  • +
  • 已添加选项(首选项/设计器)以输入当前操作系统缩放设置(修复了在非默认设置下创建/移动控件时在错误位置显示套索线的问题)
  • +
  • 在 Windows.Forms 和 VO Window 编辑器中添加了锁定/解锁控件的工具栏按钮
  • +
  • 控件的锁定状态现在可在 Windows.Forms 设计器中保留(需要保存表单才能应用)
  • +
  • 修正了将 strip items 的 Text 属性设置为空的问题
  • +
    + +
  • 在 VOWED 控制顺序对话框中添加了选项,以便在 “使用鼠标 ”时,在当前选定控件之后开始调整控件的控制顺序。
  • +
  • 在 Windows.Forms 工具箱中添加了组件 SaveFileDialog、OpenFileDialog 和 FolderBrowserDialog
  • +
    + 调试器 + +
  • 调试时的异常对话框现在可正确显示异常信息
  • +
  • 修正了在排除已处理的异常时不正确中断的问题
  • +
  • 修复了调试器中可能发生的常见崩溃问题
  • +
    + 插件系统 + +
  • 插件系统的一些小修正(您可能需要重新编译插件)
  • +
  • 已添加 Plugin:OnAfterCompileApplication(oApp AS Application, eResult AS CompileResult) 回调方法
  • +
  • 添加了 Editor:SetSelection() 方法,用于在编辑器中选择文本
  • +
  • 从插件系统返回的实体对象不再包含END CLASS 和 END NAMESPACE 语句
  • +
    + 文档 + Bug 修复 + +
  • 文档多处的更正 (#1504, #1506, #1514)
  • +
    + 新特性 + +
  • 中文文档的多处更新
  • +
  • 添加了丢失的 SCAN...ENDSCAN 文档 (#1548)
  • +
  • 为 DBOrderInfo() 函数主题添加了缺失的可用常量 (#1565)
  • +
    + +
  • 修正了文档中有关 -memvar 选项的错误文本 (#1621)
  • +
    + Changes in 2.20.0.3 + 编译器 + Bug 修复 + +
  • 修复了在 FoxPro 方言中 USE 命令 的 AGAIN 子句问题 (#235)
  • +
  • 修复了启用 -namedargs 编译器选项的情况下在编译时调用带有命名参数的类型数组(typed array)构造函数的问题 (#1430)
  • +
  • 修复了 INSTANCE 关键字与类内部使用的不一致 (#1432)
  • +
  • 修复了 REPLACE UDC 可能会阻止使用名为 “replace” 的变量的问题 (#1443)
  • +
  • 修复了 -vo9(处理丢失的 RETURN 语句)编译器选项与分部类中的 ACCESSes 的问题 (#1450)
  • +
  • 修复了词法分析器在 FoxPro 方言中识别字符串内的续行符的问题 (#1453)
  • +
  • 修复了 memvar pragma 选项的问题 (#1454)
  • +
  • 修复了 -xpp1 编译器选项的问题。(#1243, #1458)
  • +
  • 修复了当涉及的对象未定义类型时,从定义成员的类中访问方法中 Hidden 类成员的问题(#1335, #1457)
  • +
  • 修复了单行代码行仅包含单逗号时的内部编译器错误 (#1462)
  • +
  • 修复了使用 USE 命令 时以方括号为包含文件名的字符定界符时产生的问题 (#1468)
  • +
    + 新特性 + +
  • 现在,您可以使用 NULL() 和 DEFAULT() 表达式以默认值初始化任何变量。这相当于 C# 中的 DEFAULT 关键字。
  • +
  • 我们添加了一个新的编译器选项 -modernsyntax (#1394)。这将禁用某些传统功能:
  • + +
  • && 作为行注释
  • +
  • * 在行首表示注释
  • +
  • 使用方括号的字符串
  • +
  • 括号表达式列表(因此更容易识别元组)
  • +
    +
    + +
  • 已添加对 IS NULL 和 IS NOT NULL 模式的支持 (#1422)
  • +
  • 在 Harbour 方言中添加了对文件宽 FIELD 语句(file wide FIELD statements)的支持 (#1436)
  • +
    + 运行时 + Bug 修复 + +
  • 修复了在 Transform() 函数中使用 PTR 参数时的运行时错误 (#1428)
  • +
  • 修复了传递 PSZ 参数时,多个 String 运行时函数抛出运行时错误的问题 (#1429)
  • +
  • 修复了在 ADS RDD 中使用 OrdKeyVal() 和 ADS/ADT 文件时的问题 (#1434)
  • +
  • 修复了在创建和使用长名称的 order 时,与各种 xBase 方言的不兼容问题 (#1438)
  • +
  • 修复了在 ADS RDD 中使用 OrderKeyNo() 时,如果设置 Ax_SetExactKeyPos() 为 TRUE,则会出现 VO 不兼容的问题 (#1444)
  • +
  • 修复了宏编译器在传递超过两个引用参数时的问题 (#1445)
  • +
  • 修复了 DBSetIndex() 设置记录指针在 eof 时的问题 (#1448)
  • +
  • 修复了从 OEM dbfs 读取字段时的问题 (#1449)
  • +
    + 新特性 + +
  • 实现了 DBFMEMO 驱动程序(#604)
  • +
  • 实现了 DBFBLOB 驱动程序(#605)
  • +
  • 添加了缺失的无参数 SetColor() 函数重载(#1440)
  • +
    + +
  • 此版本包含了新的 XSharp.VFP.UI.DLL ,该 DLL 由从 Visual FoxPro 导出的表单使用,通过 VFP Exporter 实现。
  • +
    + Visual Studio 集成 + Bug 修复 + +
  • 修复了 VS 2019 中“跳转到文件”命令的问题 (#1146)
  • +
  • 修复了局部函数的“转到定义”功能不工作的问题 (#1415)
  • +
  • 修复了在某些情况下类导航框显示错误当前条目的问题 (#1426)
  • +
  • 修复了设置 -namedargs(启用命名参数)选项在项目设置中存在的问题 (#1431)
  • +
  • 修复了外部程序集中的类型的代码生成器未为索引属性生成参数的问题 (#1442)
  • +
  • 修复了 VODBServer 编辑器未保存 [DBSERVER] 部分的 access/assigns 和其他实体的问题 (#1452)
  • +
  • 修复了在 VO 窗口编辑器中加载 cavowed.inf 文件提供的带有绝对或相对路径的补充文件的问题 (#1470)
  • +
  • 修复了 VS2022 调试器中不同 DLL 包含相同命名空间但大小写不同时的问题。
  • +
  • 修复了编辑器内的实体解析器未能正确确定包含本地函数或过程的实体结束的问题
  • +
  • 修复了编辑器内的实体解析器在未启用 /memvars 编译选项时,遇到行首的 param 标记时会出错的问题。
  • +
    + 新特性 + +
  • 我们已经在帮助菜单中为中文版本的文档添加了一个菜单项。
  • +
    + VOXporter + Bug 修复 + +
  • 修正了将属性转换为字符串字面量不正确的问题 (#1404)
  • +
    + 新特性 + +
  • 现在可以在任何模块的 VO 代码中定义特殊的 TEXTBLOCK 实体,名称为 “VXP-TOP” 或 “{VOXP:TOP}”,VOXporter 将自动在模块导出的 X# .prg 文件开头插入文本块的内容。这对指定 #using 语句(#1425)等顶级命令特别有用。
  • +
    + VFPXporter + +
  • 该版本的 X# 包含 VFP Exporter 。该工具可将 Visual FoxPro 项目文件转换为 Visual Studio 解决方案
  • +
    + XIDE + +
  • 当尝试在错误的 XIDE 版本中调试 32/64bit 应用程序时,添加了自动打开替代版本的选项。
  • +
  • 修正了编辑器中几个位置关键字的着色问题
  • +
  • 改进了编辑器对 TEXT...END TEXT 的支持
  • +
  • 已添加编辑器对 NOT NULL 代码模式的支持
  • +
  • 已添加对编译器选项 /namedargs、/initlocals、/modernsyntax 和 /allowoldstyleassignments 的项目支持
  • +
  • 现在,启动时按 SHIFT 键会将 IDE 的布局重置为默认位置(退出时不会保存)。
  • +
  • 已添加菜单命令 View->Save Current Layout(查看->保存当前布局)
  • +
  • 修正了在列选择中切换所选文本大小写 (CTR+U) 的问题
  • +
  • 修正了将带有 PROC 或 FUNC 等标识符的行误认为实体定义的若干问题
  • +
    + 文档 + Bug 修复 + +
  • 修复了 /namedargs 编译器选项主题中的拼写错误。
  • +
    + 新特性 + +
  • 我们添加了几个关于修饰符(modifiers) 的章节
  • +
  • 我们添加了(部分)翻译成简体中文的帮助文件。
  • +
    + Changes in 2.19.0.2 + 编译器 + Bug 修复 + +
  • 现在编译器在类型中定义重复字段名时会正确报告错误 (#1385)。
  • +
  • 修复了在泛型类型中定义多个类型约束的问题 (#1389)。
  • +
  • 修复了全局内存变量隐藏同名局部变量或参数的问题 (#1294)。
  • +
  • 修复了在找不到类型时出现虚假编译器错误消息的问题 (#1396)。
  • +
  • 修复了在 FoxPro 方言中缺少对 XSharp.VFP 的引用导致编译器崩溃的问题 (#1405)。
  • +
  • 修复了 -initlocals 编译选项错误地初始化类字段的问题 (#1408)。
  • +
  • 修复了预处理器中扩展匹配符号无法正确匹配以字符串字面量开头的表达式的问题。
  • +
    + 新特性 + +
  • 我们增加了对维度(FoxPro)类属性的支持,例如:

    DIMENSION this.Field(10)
  • +
  • 我们添加了对 FOREACH AWAIT 的支持,如以下示例(适用于 .Net Core、.Net 5 及更高版本)。
  • +
    +
    FOREACH AWAIT VAR data IN GenerateNumbersAsync(number)
         SELF:oListView1:Items:Add(data)
      NEXT
    + +
  • 我们已经添加了对合并成员访问的支持,例如在以下示例中,FirstName 和 LastName 都是 oPerson 对象的属性::
  • +
    + + ? oPerson:(FirstName+" "+LastName) +   + +
  • WITH 命令现在也能识别 AS DataType 子句。
  • +
    + +
  • XBase++ 类声明现在也允许使用 “END CLASS” 作为结束标记。
  • +
    + +
  • 现在,编译器在尝试将 Lambda 表达式转换为常规表达式时会报错 (#1343)
  • +
    + +
  • 我们增加了对元组(TUPLE)数据类型的支持。这包括声明局部变量、参数、返回值等。
  • +
  • 我们还支持将元组返回值分解为多个局部变量。更多信息,请参见元组帮助主题。.
  • +
    + 运行时 + Bug 修复 + +
  • 修复了从宏编译器调用 DoEvents() 的问题 (#872)
  • +
  • 修复了 __Mem2StringRaw()(文档未记录)函数的问题 (#1302)
  • +
  • 修复了在头部中包含不正确排序信息的 DBFCDX 索引文件打开问题 (#1360)
  • +
  • 修复了 OrdSetFocus() 在无参数调用时重置当前顺序的问题 (#1362)
  • +
  • 修复了在 DBPack() 后一些索引文件的问题 (#1367)
  • +
  • 修复了在所有记录都被删除的表上 Deleted() 返回 TRUE 的问题 (#1370)
  • +
  • 修复了以独占和只写模式打开并使用 FWrite() 等函数写入文件的问题 (#1382)
  • +
  • 修复了 SplitPath() 函数中的几个问题(与 VO 不兼容性) (#1384)
  • +
  • 现在,当在 dbf 头部中找不到代码页时,将使用 RuntimeState 中的 DOS 代码页,而不再使用硬编码的代码页 437 (#1386)
  • +
  • 在运行时的某些区域中使用的 Dictionary<,> 类被替换为 ConcurrentDictionary<,>,以避免多线程应用程序中的问题 (#1391)
  • +
  • 在使用 IDynamicProperties(FoxPro 方言)时,修复了 NoIVarget 的问题 (#1401)
  • +
  • 修复了 Hex2C() 使用小写字母时与使用大写字母时产生不同结果的问题。
    请注意,这个 bug 也存在于 VO 中,所以现在在 X# 中使用小写十六进制字母的 Hex2C() 的行为与 VO 不同 (#1402)
  • +
    + +
  • 访问已使用 Advantage RDD 打开的已关闭 DbServer 对象上的属性可能会在调试器中引起问题。现在,当服务器关闭时,DbServer 类将返回空值。
  • +
    + 新特性 + +
  • 实现了 CREATE CURSOR 命令 [FoxPro] (#247)。还实现了 CREATE TABLE 和 ALTER TABLE(FoxPro 方言)
  • +
  • 实现了 INSERT INTO 命令(FoxPro 方言,用于从值、数组、对象和内存变量中插入变量)。SQL 查询中的 INSERT INTO 尚不能使用 (FoxPro 方言)
  • +
    + +
  • 在 XSharp.VFP 中实现了 Str() 函数的新 FoxPro 兼容版本 (#386)
  • +
  • 现在,当打开索引文件失败时会抛出错误 (#1358)
  • +
  • 添加了 AscA() 函数,并使 Asc() 依赖于运行时中的 SetAnsi() 设置 (#1376)
  • +
    + 头文件 + Bug 修复 + +
  • 实现了几个缺失的命令 (#1407)
  • +
  • 修复了 SET DECIMALS TO 命令中的拼写错误 (#1406)
  • +
  • 为 GATHER 命令(FoxPro)添加了缺失的 NAME 和 MEMVAR 子句 (#1409)
  • +
  • 更新了几个命令,使一些标记变为可选,并更加兼容各种方言 (#1410, #1412)
  • +
  • 修复了在各种方言中 COMMIT 命令的各种不兼容性问题 (#1411)
  • +
    + Visual Studio 集成 + Bug 修复 + +
  • 修复了通过静态使用引用的类型中查找公共静态字段的问题 (#1307)
  • +
  • 修复了在块语句内定义的局部变量的 intellisense 问题 (#1345)
  • +
  • 修复了 intellisense 不正确地将代码中指定的类型解析为 usings 列表中的另一个类型的问题 (#1363)
  • +
  • 修复了在输入冒号后不正确显示静态方法的成员完成问题 (#1379)
  • +
  • 修复了特定代码导致编辑器冻结的问题 (#1380)
  • +
  • 修复了在某些情况下类导航栏未显示方法名称的问题 (#1381)
  • +
    + 新特性 + +
  • 增加了对 IEnumerable 和 DataTable 调试可视化器的支持 (#1373)。
    请注意,当浏览 X# 数组时,可视化器中的结果看起来非常丑陋,因为可视化器忽略了隐藏属性和字段的属性,以用于我们的 USUAL 类。
  • +
  • 调整了 Globals、Workareas 等调试器窗口,以遵循在 VS 中选择的全局主题 (#1375)。还向 Workarea 窗口添加了状态面板,这样您可以查看工作区状态或字段名称/值。
  • +
  • 为使用 USING VAR 或 USING (LOCAL) IMPLIED 声明的局部变量添加了 intellisense 支持 (#1390)。
  • +
  • 现在 intellisense 数据库使用了一个具有 ARM 支持的 SQLite 包,因此它也将在 Mac 和其他平台上工作 (#1397)。
  • +
    + VOXporter + 修复 + +
  • 修正了 VOXporter 用 {VOXP:UNC} 标记错误修改先前已注释代码的问题 (#1404)
  • +
    + 文档 + Bug 修复 + +
  • 运行时帮助中函数的文档描述有误。
    例如,“Left” 函数的主题标题原为 “Functions.Left Method”,现已更改为 “Left Function”。
  • +
  • 文档中的 “SingleLineEdit” 类被称为 “Real4LineEdit”,已进行修正。
  • +
    + 新特性 + +
  • 我们在 X# 编程指南中添加了有关多个主题的附加文档。
  • +
    + Changes in 2.18.0.4 + 编译器 + Bug 修复 + +
  • 修正了一些与 XBase++ 相关命令的预处理器问题 (#1213, #1288, #1337)
  • +
  • 修正了隐式访问静态类成员的问题(XBase++ 方言) (#1215)
  • +
  • 修正了 DIMENSION 命令(VFP 方言)的解析器错误 (#1267)
  • +
  • 修正了多行代码中 UDC 的预处理器问题 (#1298)
  • +
  • 现在,每个 “unused variable(未使用变量) ”警告都会在变量定义的确切位置报告,而不是总是在第一个位置报告(#1310)
  • +
  • 修正了 SET RELATION 命令 中错误的 “unreachable code(无法到达代码) ”警告 (#1312)
  • +
  • 修正了为编译器生成的 <Module>.$AppInit 和 <Module>.$AppExit 方法生成 XML 文档的问题 (#1316)
  • +
  • 修正了访问另一个对象的 Hidden 字段的问题(XBase++ 方言)(#1335)
  • +
  • 修正了使用显式类指示调用父方法的问题(Xbase++ 方言) (#1338)
  • +
  • 修正了代码 “SLen(c := SomeFunction())” 中错误调用函数两次的问题 (#1339)
  • +
  • 修正了父类方法在派生类中不可见的问题(Xbase++ 方言) (#1349)
  • +
  • 修正了 ::new() 在类方法中无法正常工作的问题(Xbase++ 方言) (#1350)
  • +
  • 修正了当在头文件中定义的标记出现错误时的异常情况
  • +
  • 修正了从 XBase++ 方法返回 super:Init() 时的编译器错误 (#1357)
  • +
  • 修正了同名 .prg 文件中的静态定义问题 (#1361)
  • +
    + 新特性 + +
  • 引入了未为 OUT 参数指定 OUT 关键字的警告 (#1295)
  • +
  • 更新了不带参数的方法和构造函数调用的解析器规则。这可能会加快编译速度。
  • +
  • 编译器不再 “内联” SLen()。如果您在应用程序中引用 XSharp.Core,SLen() 现在会被解析为 X# Core 中的 SLen() 函数。
    如果编译时没有使用 X# 运行时,或者编译时使用的是 Vulcan 运行时,那么现在就需要在代码中添加 SLen() 函数。
    这是 X# Core 中的代码,您可以将其用作模板
    FUNCTION SLen(cString AS STRING) AS DWORD
      LOCAL len := 0 AS DWORD
      IF cString != NULL
         len := (DWORD) cString:Length
      ENDIF
      RETURN len
  • +
  • 添加了对 Harbour 也支持的预处理器命令 #ycommand 和 #ytranslate 的支持。它们的工作方式与 #xcommand 和 #xtranslate 相同,但标记以区分大小写的模式进行比较 (#1314)
  • +
  • 某些 Xbase++ 特定功能的代码生成发生了变化。
  • +
  • 我们使用 IN <ursor> 子句增加了几个 UDC
  • +
    + +
  • 我们为 FoxPro CAST 表达式添加了 UDC 支持
  • +
  • 更多 SET 命令现在也支持 & 运算符
  • +
  • 编译器现在在更多位置支持“Late bound names(后期绑定名称)”,例如在 REPLACE 命令、With 命令等中。现在可以编译而无问题。
  • +
    + cVar := "FirstName"
    WITH oCustomer
      .&cVar := "John"
    END WITH
    and this too

    cVar := "FirstName"
    REPLACE &cVar with "John"
    + 运行时 + Bug 修复 + +
  • 修正了在清除关系之前错误关闭 dbf 文件的问题 (#1237)
  • +
  • 修复了文件创建后索引范围可见性不正确的问题 (#1238)
  • +
  • 修正了 FFirst()/FNext() 无法找到过滤器指定的所有文件的问题 (#1315)
  • +
  • 修正了 DBSetIndex()/VoDbOrdListAdd() 总是将控制顺序重置为 1 的问题 (#1341)
  • +
  • 修复了当键表达式类型为 DATE 时,在 DBFCDX 驱动程序中更新索引键的问题。
  • +
  • 修正了当 Str() 和 StrZero() 的内置最大字符串长度为 30 时的问题(#1352)
  • +
  • RegisteredRDD 类现在使用 ConcurrentDictionary。
  • +
  • 当目标表中缺少一个字段时,修正了 RDD TransRec() 方法中的一个错误 (#1372)
  • +
  • 修正了 Advantage RDD 中的一个问题,以防止在表关闭时调用 ADS 函数
  • +
  • 修复了 Advantage RDD 中的一个问题,即在读取名称不正确的字段时可能出现的问题
  • +
  • 当当前目录为 UNCPath 时,修正了 CurDir() 函数中的一个问题(\\Server\Share\SomeDir) (#1378)
  • +
    + 新特性 + +
  • 已添加对在 USUAL 类型中访问索引器的支持 (#1296)
  • +
  • 我们添加了一个 DbCurrency 类型,当读取货币型字段时,它会从 RDD 返回。
  • +
  • 实现了 TEXT TO FILE 命令 (#1304)
  • +
  • 现在,当创建索引顺序时 tagname > 最大长度时,RDD 会报告错误(对话框) (#1305)
  • +
  • 添加了一个接受 System.Type 参数的函数 _CreateInstance()
  • +
  • 后期绑定代码现在可以检测 Send()、IVarGet() 和 IVarPut() 的调用位置,并在调用代码与类成员声明类型相同时允许访问私有/隐藏字段。这在一些与 XBase++ 相关的更改中使用。
  • +
  • XBase++ 中的类已稍作调整。
  • +
  • 更改了多个 DBF / Workarea / Cursor 相关 UDC 的映射,使其与 FoxPro 更加兼容。
  • +
  • 我们为 FoxPro CAST 表达式添加了运行时支持
  • +
  • 我们对字典进行了一些小的代码优化 (#1371)
  • +
  • 当服务器关闭时,一些 DbServer 属性不再调用 RDD,而是返回空白值。
  • +
    + 类型化 SDK 类 + +
  • 添加了不带参数的 DbServer:Append() 重载 (#1320)
  • +
  • 添加了丢失的 DataServer:LockcurrentRecord() 方法(#1321)
  • +
  • 修复了以 ShellWindow 为所有者创建 DataWindow 时的运行时错误 (#1324)
  • +
  • 将 DataWindow:Show() 方法改为 CLIPPER,以便与现有代码兼容 (#1325)
  • +
  • 修复了在 VO 窗口上使用 ComboBox 时出现的异常 (#1328)
  • +
  • 修正了打开已分配服务器的 DataWindow 时的错误 (#1332)
  • +
  • 修正了以非类型化的 FileSpec 对象作为第一个参数实例化 DBServer 对象时的运行时错误 (#1348)
  • +
  • 修正了在组合框和列表框中显示项目的问题 (#1347)
  • +
  • 当服务器关闭时,一些 DbServer 属性不再调用 RDD,而是返回空白值。
  • +
    + Visual Studio 集成 + Bug 修复 + +
  • 修正了项目文件中 “allow dot(允许点)” 设置的问题(#1192)
  • +
  • $CALLSTACK 等几个宏无法以预期格式返回值。这一问题已得到修复 (#1236)
  • +
  • 修正了当 form.prg 第一行中存在块注释时的生成问题 (#1334)
  • +
  • 修正了在单行中对代码段进行块注释的问题 (#1336)
  • +
  • 修正了当项目文件包含 <GenerateAssemblyInfo>True</GenerateAssemblyInfo> 属性时项目生成失败的问题 (#1344)
  • +
  • 修正了解析器中的一个问题,该问题会导致表达式计算器中 DebuggerDisplay 属性的解析出错。
  • +
  • 新调试器窗口没有遵循当前窗口主题。现在已部分修复 (#1375)
  • +
    + VO 键入编辑器 + +
  • 修正了在 VOWED 中使用特定字体的 CheckBox 和 RadioButton 标题在设计时的显示问题 (#796)
  • +
  • 修正了 VOWED 编辑器将 prg 中的所有现有类更改为分部类的问题 (#814)
  • +
  • 修正了在 VOWED 中错误添加构造函数代码以实例化 DataBrowser 的问题,即使没有(未删除的)数据列也是如此 (#1365)
  • +
  • 修正了 VOMED 中源代码和资源文件中菜单项定义名称的几个问题 (#1374)
  • +
    + VOXporter + 新特性 + +
  • 引入选项(在现有代码中内嵌),用于注释、取消注释和删除原始 VO 代码中的行 (#1303)
  • +
    + - {VOXP:COM} // comment out line + - {VOXP:UNC} // uncomment line + - {VOXP:DEL} and // {VOXP:REM} // remove line + 安装 + 新特性 + +
  • 安装程序现在会检测是否安装了所需的 Visual Studio 组件 “Core Editor ”和“.Net Desktop Development”。
    如果发现一个或多个 VS 安装,但其中没有一个安装同时具备所需的组件,则会显示警告。
  • +
    + Changes in 2.17.0.3 + 编译器 + Bug 修复 + +
  • 修正了与 XBase++ 在使用类成员方面的不兼容问题 (#1215) UNCONFIRMED
  • +
  • 修正了/vo3 选项在 XBase++ 方言中无法正常工作的问题。还添加了对修饰符 final、introduce 和 override 的支持 (#1244)
  • +
  • 修正了在类字段上使用 NEW 修饰符的问题 (#1246)
  • +
  • 修复了几个与 XPP 方言 UDC 有关的预处理器问题 (#1247、#1250)
  • +
  • 修正了 VO 与方法和属性中 INSTANCE 字段的特殊处理不兼容的问题 (#1253)
  • +
  • 修正了调试器不稳定地跳转到不正确行的问题 (#1254,#1264)
  • +
  • 修正了嵌套语句在某些情况下显示错误行号的问题 (#1268)
  • +
  • 修正了没有 CASE 行的 DO CASE 语句会在编译器中产生内部错误的问题 (#1281)
  • +
  • 修复了几个预处理器问题 (#1284、#1289)
  • +
  • 启用后期绑定后,在使用 SUPER 调用不存在的方法时,修正了编译器缺失错误 (#1285)
  • +
  • 修正了 CONST 类字段缺值赋值时出现的发射模块失败错误 (#1293)
  • +
  • 修正了预处理器中重复匹配标记(如 SET INDEX TO 命令中的匹配标记)的问题。
  • +
  • 修正了一个问题,即当接口在编译时为 “未知” 和/或属性名不是 “Item ”时,带有明确接口前缀的属性定义可能导致编译器崩溃 (#1306)
  • +
    + 新特性 + +
  • 已添加对 “经典” INIT PROCEDURE 和 EXIT PROCEDURE 的支持 (#1290)
  • +
  • 当 case 块、if 块和其他块内的语句列表为空时,已添加警告。要抑制该警告,可在代码中添加 NOP 语句。
  • +
  • 我们对编译器中的词法和解析器进行了一些修改。这可能会减少内存占用量,并加快代码的编译速度。
  • +
    + 运行时 + Bug 修复 + +
  • 修正了 CToD() 中的几个问题(与 VO 不兼容) (#1275)
  • +
  • 已添加对 AAdd() 中第 3 个参数的支持,以指定在何处插入新元素 (#1287)
  • +
  • Default() 函数现在不再更新值为 NULL_OBJECT 的 usuals,以便与 Visual Objects 兼容 (#1119)。
  • +
  • 我们为 AdsSQLServer 类添加了参数支持 (#1282)
  • +
    + Visual Studio 集成 + 新特性 + +
  • 我们为以下项目添加了调试器面板窗口:
  • + +
  • Global variables
  • +
  • Dynamic memory variables (Privates and Publics)
  • +
  • Workareas
  • +
  • Settings
  • +
    +
    + +
  • 您可以在调试过程中通过 Debug/XSharp 菜单打开这些窗口。还有一个特殊的 “X# 调试器工具栏”,也只在调试期间显示。
  • +
  • 这些窗口只有在调试的应用程序使用 X# 运行时才会显示信息(因此无法与 Vulcan 运行时结合使用)。
    如果您正在调试使用 X# 运行时的其他语言编写的应用程序,那么这些窗口也会显示相关信息。
    我们计划在今后的版本中为这些窗口添加更多功能,例如当前选定区域的属性和当前选定工作区中的字段/值。
  • +
  • 我们为 X# 文件添加了对 “FileCodeModel ”的支持。WPF 设计器和 XAML 编辑器都会使用此功能。
    现在还修复了 XAML 编辑器中的“转到定义”  (#1026)
  • +
  • X# 项目的若干属性现在已缓存。这将使性能略有提高。
  • +
  • 我们为用户自定义命令添加了 “转到定义” 支持。例如,在 USE 命令的 USE 关键字上选择 “转到定义”,就会跳转到标准头文件中的定义。
  • +
    + Bug 修复 + +
  • 修正了 Type[,] 数组的成员完成问题 (#980)
  • +
  • 修正了当同名类不存在命名空间时命名空间内类的成员补全缺失 (#1204)
  • +
  • 修正了当实体在预处理行中有属性时自动缩进的问题 (#1210)
  • +
  • 修正了某些情况下静态成员的 intellisense 问题 (#1212)
  • +
  • 修正了代码或声明跨多行时的一些 intellisense 问题 (#1221、#1260)
  • +
  • 修正了命名空间内嵌套类的 intellisense 问题 (#1222)
  • +
  • 当使用类型转换时,修正了对 VAR local 类型的错误解析 (#1224)
  • +
  • 修正了编辑器中折叠/展开代码的几个问题 (#1233)
  • +
  • 修正了显示未知类型的假成员完成列表 (#1255)
  • +
  • 修复了使用 Ctrl + 空格键自动键入文本的一些问题(完整 Word) (#1256)
  • +
  • 修正了 Text .. EndText 语句的着色问题 (#1257)
  • +
  • 修正了泛型的工具提示提示的几个问题 (#1258、#1259、#1273)
  • +
  • 修正了委托签名不显示在 intellisense 工具提示中的问题 (#1265)
  • +
  • 修正了带有多行注释的代码的无效着色 (#1269)
  • +
  • 修正了键入 “self. ”后成员完成中的无效条目。(#1270)
  • +
  • 修正了在选项 X# Custom Editors\Other Editors\Disassembler 中指定的路径带有空格时调用反汇编器的问题 (#1271)
  • +
  • 修复了使用某些 UDC 调用时编辑器着色完全停止的问题 (#1272)
  • +
  • 修正了 FOR 语句中 CONSTANT local 变量不显示提示的问题 (#1274)
  • +
  • 修正了代码包含 LOOP 或 EXIT 关键字时的自动缩进问题 (#1278)
  • +
  • 修正了编辑器在特定情况下输入括号时出现的异常 (#1279)
  • +
  • 修正了在设计模式下尝试打开文件名以大括号开头的文件时出现错误的问题 (#1292)
  • +
  • VS 内的 “XSharp 网站 ”菜单选项已损坏 (#1297)
  • +
  • 修复了匹配相同标识符功能中可能导致 Visual Studio 运行速度减慢的问题
  • +
  • 修复了在调试过程中打开文件时可能发生的 VS 锁定问题。
  • +
  • 带有静态构造函数和普通构造函数的类的参数提示未得到正确处理。这一问题已得到修复。
  • +
    + +
  • 在打开项目时,如果缺少从属项(如 .resx 文件或 .designer.prg 文件)与其父项之间的从属关系,则可能出现异常,导致项目无法打开。这一问题已得到修复。
  • +
  • 当同一行出现两个编译器错误且错误代码相同时,有时会在 VS 输出窗口中显示,但不在错误列表中显示。这一问题已得到修复 (#1308)
  • +
    + VOXporter + 新特性 + +
  • 已添加对特殊标记 {VOXP:COM}、{VOXP:UNC} 和 {VOXP:DEL} 的支持。/ {VOXP:REM},以注释、取消注释和删除原始 VO 代码中的行 (#1303)
  • +
    + Changes in 2.16.0.5 + 编译器 + Xbase++ 方言的新特性 + 我们对 Xbase++ 类定义的生成方式进行了多项修改。请使用新版本并检查您的代码! + +
  • 现在我们为所有类生成一个类函数。它返回的对象与 Xbase++ 类的 ClassObject() 方法相同。
    无论使用 /xpp1 编译器选项与否,都会生成该类函数。
    Class 函数依赖于函数 __GetXppClassObject 和 XSharp.XPP.StaticClassObject 类,这两个函数都可以在 XSharp.XPP 程序集 (#1235) 中找到。
    通过类函数,您可以访问类变量和类方法。
  • +
  • 在 Xbase++ 中,您可以使用相同名称的字段(VAR)和属性(ACCESS / ASSIGN METHOD),甚至具有相同的可见性。而以前是不支持的。
    现在,编译器会自动将字段设为 protected(或 FINAL 类的 private),并使用 [IsInstance] 属性对其进行标记。
    在类的代码中,编译器会将名称解析为字段。在类外的代码中,编译器将把名称解析为属性。
  • +
  • 对于派生类,编译器现在会自动生成一个带有父类名称的属性,该属性被声明为父类,并返回等同于 SUPER 的属性。
  • +
  • 我们更正了 Xbase++ 方法的 FINAL、INTRODUCE 和 OVERRIDE 关键字 (#1244)
  • +
  • 我们更正了在 XBase++ 方言中访问静态类成员的一些问题 (#1215)
  • +
  • 现在,您可以使用 “::” 前缀访问类变量和类方法内部的类方法。
  • +
  • 当一个类被声明为另一个类的子类时,编译器会在子类中生成一个(类型化)属性来访问父类,就像 Xbase++ 所做的那样。该属性返回值为 “super”。
  • +
  • 我们现在支持变量和类变量的 READONLY 子句。这意味着必须在 Init() 方法(实例变量)或 InitClass() 方法(类变量)中分配变量。
  • +
    + + 其他方言的新特性 + +
  • 在 Visual Objects 中,您可以使用 INSTANCE 关键字声明字段,并添加与 INSTANCE 字段同名的 ACCESS/ASSIGN 方法。
    在以前的 X# 版本中,不支持这一功能。
    现在,编译器可以正确处理这种情况,在类的方法/属性内的代码中将名称解析为字段,在类外的代码中将名称解析为属性。
  • +
  • 现在,PPO 文件包含用户定义命令和翻译的原始空白。
  • +
    + Bug 修复 + +
  • 修正了 VO 方言中的一些方法重载解析问题 (#1211)
  • +
  • 修正了大量 DO CASE 语句和大量 IF ELSEIF 语句的内部编译器错误(堆栈不足) (#1214)。
  • +
  • 修正了插值/扩展字符串语法的一个问题 (#1218)
  • +
  • 修正了一些不正确的问题,允许使用冒号操作符访问静态类成员,或使用点操作符访问实例成员 (#1219,#1220)
  • +
  • 修正了使用 MemVarPut() 创建的内存变量的错误可见性 (#1223)
  • +
  • 修正了名称中带引号的 _DLL FUNCTION 无法正常工作的问题 (#1225)
  • +
  • 如果预处理器生成了日期和/或日期时间字面量,则无法识别这些字面量。这一问题已得到修复 (#1232)
  • +
  • 修正了预处理器匹配最后一个可选标记的问题 (#1241)
  • +
  • 修正了在 Xbase++ 方言中识别 ENDSEQUENCE 关键字的问题 (#1242)
  • +
  • 现在只有 USUAL 类型的参数才支持使用 NIL 的默认参数值。对其他参数类型使用 NIL 会产生(新的)警告 XS9117
    此外,将 NIL 赋值给符号,或将 NIL 作为参数用于期望使用符号的函数/方法调用,现在也会产生警告 (#1231)。
  • +
  • 修正了预处理器中的一个问题,即在结果流中两个相邻的标记没有合并为一个标记 (#1247)
  • +
  • 修正了预处理器中的一个问题,即当元素以左括号开始时,预处理器无法检测到可选元素 (#1250)
  • +
  • 修正了包含字面双引号的内插字符串的问题,如 i"SomeText""{iNum}"" "
  • +
  • 修正了 2.16 早期版本中引入的局部函数/程序问题。
  • +
  • 在解析时生成的警告可能会导致另一个关于预处理器定义的警告,即使在不需要预处理器定义的情况下也是如此。这一问题已得到修复。
  • +
  • 修正了 2.16 早期版本中引入的以 “a := NIL,b := NIL as USUAL” 声明的参数的默认参数值问题
  • +
  • 修复了 2.16 早期版本中调试器行为不稳定的问题。
  • +
  • 当您引用外部程序集中的类型时,该类型依赖于另一个外部程序集,但您没有对该另一个外部程序集的引用,那么编译可能会失败,而没有适当的解释。现在,我们会产生一个正常的错误,提示您需要添加对其他程序集的引用。
  • +
  • 对于没有 CLIPPER 调用约定的函数或方法,允许省略参数的类型。这些参数被假定为 USUAL 类型。
    现在会产生一个新的警告 XS9118.
  • +
    + 重大更改 + 如果您正在使用我们的解析器解析源代码,请检查您的代码。我们对处理 if ... else 语句和 case 语句的语言定义做了一些修改(两条规则共享一条新的 condBlock 规则)。这消除了语言中的一些递归。此外,还修改了一些 Xbase++ 的特定规则。请查看 language definition online + 运行时 + 新特性 + +
  • 添加了 DOY() 函数。
  • +
  • 添加缺失的 ADS_LONG 和 ADS_LONGLONG 定义.
  • +
    + +
  • 提高了网络驱动器上 CDX 跳转操作的速度 (#1165)
  • +
    + Bug 修复 + +
  • 修正了 DbSetRelation() 和 RLock() 的一个问题 (#1226)
  • +
  • 调整了从 NULL_PSZ 到字符串的隐式转换,现在返回 NULL 而不是空字符串。
  • +
  • 部分初始化代码已从 _INIT 程序移至 SQLConnection 类的静态构造函数,以便更方便地在非 X# 应用程序中使用该类。
  • +
  • 修正了使用 MemVarPut 函数创建的动态内存变量的可见性问题 (#1223)
  • +
  • 修正了独占模式下 DbServer 类的一个问题 (#1230)。
  • +
  • 从 NULL_PSZ 到字符串的隐式转换返回空字符串而非 NULL (#1234)。
  • +
  • 修正了当日、月或年的前缀为空格时 CTOD() 函数中的一个问题。
  • +
  • 修正了 ADS RDD 中 OrderListAdd() 的一个问题。当索引已打开时,RDD 不再返回错误。
  • +
  • 修正了 MemRealloc 中的一个问题,即对同一指针的第二次调用将返回 NULL_PTR (#1248)
  • +
    + VOSDK + +
  • SDK 类中的全局数组现在由 SQLConnection 类的构造函数初始化,以解决主应用程序不包含 SQL 类程序集链接时出现的问题。
  • +
    + Visual Studio 集成 + 调试 + +
  • 调试器表达式计算器现在也能求值后期绑定的属性和字段(如果在项目中启用了编译器选项)。
    如果这会产生负面影响,可以在 “工具/选项 调试/X# Debugger” 中禁用。
  • +
  • 现在,调试器表达式计算器将使用主程序(如果该程序是 X# 项目)中的编译器选项进行初始化。
    调试器选项对话框 上的设置现在仅在调试由非 X# 启动项目加载的 DLL 时使用。
  • +
  • 对于实例字段、属性和方法,调试器表达式计算器现在总是接受 “.” 字符,与项目选项中的设置无关。
    之所以需要这样做,是因为在向观察窗口添加表达式或更改属性或字段值时,VS 调试器中的几个窗口会自动插入 “.” 字符。
  • +
    + 新特性 + +
  • 已添加对在 DbServer 编辑器中导入索引的支持。
  • +
  • X# 项目系统现在可以记住在设计模式下 Windows 编辑器中打开的窗口,并在重新打开解决方案时正确地重新打开它们。
  • +
  • 我们为 Harbour 控制台应用程序和 Harbour 类库添加了模板。
  • +
  • 我们为 FoxPro 语法类和 Xbase++ 语法类添加了项目模板。
  • +
  • FoxPro 和 XBase++ 方言的类模板现在包含该方言的类定义。
  • +
  • 我们改进了 VS 编辑器对 PPO 文件的支持。
  • +
  • 我们更新了部分项目模板。
  • +
    + Bug 修复 + +
  • 修正了编辑器中 “:=” 运算符的成员列表显示不正确的问题 (#1061)
  • +
  • 修正了 VOMED 生成的菜单项 “定义” 名称与 VO 生成的名称不同的问题 (#1208)。
  • +
  • 修正了 VOWED 在某些情况下生成的代码行顺序不正确的问题 (#1217)。
  • +
  • 转回我们自己的 Mono.Cecil 版本,以避免在 Visual Studio 中有 Xamarin (MAUI) 工作负载的计算机上出现问题。
  • +
  • 修正了在表单设计器中打开包含用函数调用初始化的字段的表单时出现的问题 (#1251)
  • +
  • 关闭解决方案时处于 [设计] 模式的窗口,现在重新打开解决方案时可在 [设计] 模式下正确打开。
  • +
    + Changes in 2.15.0.3 + 编译器 + 新特性 + +
  • 使用 STACKALLOC 语法在堆栈(而非堆)上分配内存块 (#1084)
  • +
  • 为 XBase++ 方法添加了 ASYNC 支持 (#1183)
  • +
    + Bug 修复 + +
  • /allowdot 被禁用时,在使用点访问实例成员时,修正了一些特定情况下编译器缺失的错误 (#1109)
  • +
  • 修正了通过引用传递参数的一些问题 (#1166)
  • +
  • 修正了插值字符串的一些问题 (#1184)
  • +
  • 修正了宏编译器无法检测错误访问静态/实例成员的问题 (#1186)
  • +
  • 修正了 ELSEIF 和 UNTIL 语句错误信息中报告的行号不正确的问题 (#1187)
  • +
  • 当启用 /cs 选项时,修正了在属性设置器内使用名为 “Value ”的 iVar 的问题 (#1189)
  • +
  • 修复了缺少 Start() 函数时错误信息中报告的文件/行信息不正确的问题 (#1190)
  • +
  • 修正了某些情况下关于模棱两可方法的错误警告 (#1191)
  • +
  • 修正了嵌套方括号(在 SUM 和 REPLACE 命令中)的预处理器问题 (#1194)
  • +
  • 修正了 VO 方言中某些情况下错误的方法重载解析 (#1195)
  • +
  • 修正了 OBJECT/IntPtr 参数不正确的模糊调用错误 (#1197)
  • +
  • 修正了在某些情况下跨步代码时调试不稳定的问题 (#1200、#1202)
  • +
  • 修正了一个问题,即当开始和结束之间的代码包含编译器警告时,ENDIF、NEXT、ENDDO 等 “结束关键字”的缺失不会被报告 (#1203)
  • +
  • 修正了生成系统中的一个问题,即有时会显示关于不正确的 “RuntimeIdentifier” 的错误信息
  • +
    + 运行时 + Bug 修复 + +
  • 修正了 DBSort() 中的运行时错误 (#1196)
  • +
  • 修正了 ConvertFromCodePageToCodePage 函数中的错误
  • +
  • 更改 XSharp.RuntimeState 的启动代码可能导致代码页不正确
  • +
    + Visual Studio 集成 + 新特性 + +
  • 为 WED 添加了 VS 选项,以便使用乘法器手动调整生成资源中的 x/y 位置/大小 (#1199)
  • +
  • 新增选项页面,用于控制编辑器在 Complete Word (Ctrl+Space)命令中查找标识符的位置。
  • +
  • 对调试器表达式计算器进行了大量改进 (#1050)。请注意,该调试器表达式计算器仅适用于 Visual Studio 2019 及更高版本。
  • +
  • 添加了调试器选项页面,用于控制新的调试器表达式计算器如何解析表达式。
    您还可以更改这里的设置,禁止在调试时进行编辑。
  • +
  • 我们为 Visual Studio 源代码编辑器添加了上下文帮助。当您按下符号上的 F1 键时,我们将检查该符号。如果符号来自 X#,我们将打开帮助文件中的相关页面。如果来自 Microsoft,我们将打开 Microsoft 在线文档中的相关页面。
    在下一个版本中,我们可能会添加一个选项,让第三方也能注册他们的帮助集。
  • +
  • 如果在编辑器中选择了属于代码块一部分的关键字,如 CASE、OTHERWISE、ELSE、ELSEIF,那么编辑器现在将高亮显示该代码块中的所有关键字。
  • +
  • 跳转关键字 EXIT 和 LOOP 现在也作为其所属重复程序块的一部分突出显示。
  • +
  • 在编辑器中选择 RETURN 关键字后,与之匹配的 “实体” 关键字(如 FUNCTION、METHOD)也会高亮显示。
  • +
  • 在切换目标框架时,为 Application project options 页面添加了警告。
  • +
    + Bug 修复 + +
  • 当使用光标键在编辑器中移动到不同行时,修正了之前被破坏的自动同步大小写问题 (#722)
  • +
  • 修正了使用 Control+Space 完成代码时的一些问题 (#1044, #1140)
  • +
  • 修正了在某些情况下输入“:” 时的 intellisense 问题 (#1061)
  • +
  • 修复了多行表达式(方法/函数调用)中的参数工具提示 (#1135)
  • +
  • 修正了格式文档和 PUBLIC 修饰符的问题 (#1137)
  • +
  • 修正了在同一文件中定义多个分部类时转到定义无法正常工作的问题 (#1141)
  • +
  • 修正了自动缩进的一些问题 (#1142, #1143)
  • +
  • 修正了调试时在新行开头不显示标识符值的问题 (#1157)
  • +
  • 修正了某些情况下 LOGIC 的 intellisense 问题 (#1185)
  • +
  • 修正了一个问题,即完成列表可能包含从显示完成列表的位置不可见的方法 (#1188)
  • +
  • 修正了编辑器中嵌套类型的显示问题 (#1198)
  • +
  • 清理了多个 X# 项目模板,修复了调试/输出文件夹位置不正确的问题 (#1201)
  • +
  • 在 VS 编辑器中撤销大小写同步不起作用,因为编辑器会立即再次同步大小写 (#1205)
  • +
  • 重建 intellisense 数据库不再重启 Visual Studio (#1206)
  • +
  • 现在,“VO 菜单编辑器” 使用与原始 VO 应用程序中相同的菜单项 “定义值”(需要重新导入应用程序才能生效) (#1207)
  • +
  • 对我们的项目系统和语言服务的更改可能会导致 Visual Studio 某些版本中的 “在文件中查找 ”功能被破坏。 这一问题已得到修复。
  • +
  • 修正了转到定义对 protected 或 private 成员不起作用的问题
  • +
  • 修正了一个问题,即对于某些文件,编辑器顶部的下拉组合框无法正确同步。
  • +
    + 文档 + 更改 + +
  • 类型化 SDK 中的一些方法被记录为 Function。现在它们被正确地记录为 Method
  • +
  • 类的 “属性列表” 和 “方法列表” 现在包括对继承自父类的方法的引用。不包括从 .Net 类继承的方法,如从 System.Object 继承的 ToString()。
  • +
    + Changes in 2.14.0.2, 3 & 4 + Visual Studio 集成 + Bug 修复 + +
  • 修复了在 VS 2017 中打开 PRG 文件时 X# 编辑器出现的异常
  • +
  • 在有 XML 注释的条目后一行用回车键从完成列表中选择成员时,可能会在编辑器中插入额外的三斜线 (///) 字符。
  • +
  • 插入 XML 注释的三斜线命令无法正常工作。现已修复。
  • +
  • 修正了带前导 XML 注释的实体的实体分隔符未显示在正确行上的问题
  • +
  • 修正了源代码中没有构造函数的类型的速览定义问题
  • +
  • 修正了当关键字大小写不是大写时,执行接口操作的一个问题
  • +
  • 修正了在当前行中过早同步关键字大小写的问题。
  • +
  • 修正了 IF、DO WHILE 等关键字后的缩进问题
  • +
  • 修正了调试时选择行尾字词的问题
  • +
  • 修复了格式化文档可能锁定 VS 的问题
  • +
  • 修正了 GET 和 SET 等访问器未在属性块内缩进的问题
  • +
  • 修复了 “格式化文档” 在某些文档中不起作用的问题
  • +
  • 更改了 VS 内部负责关键词着色和衍生任务的后台扫描的优先级。
  • +
    + Changes in 2.14.0.1 + 编译器 + Bug 修复 + +
  • 修正了一个日期字面量问题,该问题会导致一条关于未知别名 “gloal ”的信息 (#1178)
  • +
  • 修正了 AssemblyFileVersion 和 AssemblyInformationalVersion 中前导 0 字符丢失的问题。如果属性中没有通配符 “*”,则会保留这些前导零 (#1179)
  • +
    + 运行时 + Bug 修复 + +
  • 2.14.0.0 的运行时 DLL 标记了 TargetFramework 属性。这造成了一些问题。运行时动态链接库不再设置该属性 (#1177)
  • +
    + Changes in 2.14.0.0 + 编译器 + Bug 修复 + +
  • 修正了当类型和局部变量具有相同名称时解析方法的问题 (#922)
  • +
  • 改进了编译器隐式生成的方法(INIT、隐式构造函数)的 XML 文档消息 (#1128)
  • +
  • 修正了带有默认参数值的 DELEGATE 的内部编译器错误 (#1129)
  • +
  • 修正了获取结构元素指针时内存地址偏移计算不正确的问题 (#1132)
  • +
  • 修正了 #pragma 警告指令无意中启用/禁用其他警告的问题行为 (#1133)
  • +
  • 修正了调试时标记当前执行的完整代码行的问题 (#1136)
  • +
  • 当声明全局内存变量时,修正了与 VO 值初始化不兼容的行为 (#1144)
  • +
  • 修正了 DO 的编译器规则无法识别“&”操作符的问题 (#1147)
  • +
  • 修正了与收缩转换警告有关的 ^ 操作符的不一致行为 (#1160)
  • +
  • 修复了 CLOSE 和 INDEX UDC 命令的若干问题 (#1162、#1163)
  • +
  • 修正了错误 XS0161 报告的错误行:并非所有代码路径都返回值 (#1164)
  • +
  • 修复了缺少 Start() 函数时错误信息中报告的错误文件名 (#1167)
  • +
  • UDC 中定义的命令的 PDB 信息现在会突出显示整行,而不仅仅是第一个关键字
  • +
  • 修复了 CLOSE ALL 和 CLOSE DATABASE UDC 中的一个问题。
  • +
    + 运行时 + 新特性 + +
  • 为 DbNotificationType 枚举添加了两个新值: BeforeRecordDeleted 和 BeforeRecordRecalled。还添加了 AfterRecordDeleted 和 AfterRecordRecalled,它们是已存在的 RecordDeleted 和 RecordRecalled 的别名 (#1174)
  • +
    + Bug 修复 + +
  • 已添加/更新 Win32API SDK 库中的若干定义 (#696)
  • +
  • 修正了 “SkipUnique” 无法正常工作的问题 (#1117)
  • +
  • 修正了当底部范围大于最高可用键值时的 RDD 范围问题 (#1121)
  • +
  • 修正了 Win32API SDK 库中 LookupAccountSid() 函数的签名 (#1125)
  • +
  • 改进了在索引表达式中尝试使用 Trim() 等函数(可改变键字符串长度)时的异常错误信息 (#1148)
  • +
  • 修正了当 IIF 语句中存在赋值时出现的宏编译器运行时异常 (#1149)
  • +
  • 修正了在后期绑定调用中解析正确重载方法的问题 (#1158)
  • +
  • 修正了 FoxPro 方言中参数化 SQLExec() 语句的一个问题
  • +
  • 修正了 Days() 函数中的一个问题,即使用了不正确的每日的秒数。
  • +
  • 修正了 Advantage RDD 中的一个问题,即 FieldGet 返回的字段尾部有 0 字符。现在这些字符会被空格取代。
  • +
  • 修正了 ADS RDD 中 DBI_LUPDATE 的一个问题
  • +
  • 修复了调试器显示 USUAL 类型的问题。
  • +
    + Visual Studio 集成 + 新特性 + +
  • 现在使用 “引用管理器 ”而不是 “添加引用对话框 “ 来添加引用 (#21,#1005)
  • +
  • 在 “解决方案资源管理器” 上下文菜单中添加了一个选项,用于在 form.prg 和 form.designer.prg 中拆分 Windows 表单 (#33)
  • +
  • 我们在工具/选项 TextEditor/X# 设置中添加了一个选项页,允许您启用/禁用 X# 源代码编辑器中的某些功能,如 “高亮显示单词”、“括号匹配 ”等。备份 Windows 窗体编辑器源代码的选项已从文本编辑器选项页移至自定义编辑器选项页。在 “工具/选项 ”对话框中搜索 “备份” 即可找到该设置。
  • +
  • 所有源代码项目的工具提示现在都包含位置(文件名和行/列)
  • +
  • 我们已在所有选项页面上添加了 “搜索关键字”。
  • +
    + Bug 修复 + +
  • 修正了当解决方案处于团队基础服务器 SCC 下时重命名文件的问题 (#49)
  • +
  • WinForms 设计器现在可忽略 form.prg 和 designer.prg 文件中指定的名称空间的差异(使用 form.prg 中的名称空间) (#464)
  • +
  • 修正了某些情况下类的鼠标下工具提示不正确的问题 (#871)
  • +
  • 修正了带有扩展方法的枚举类型的代码完成问题 (#1027)
  • +
  • 修正了枚举的一些 intellisense 问题 (#1064)
  • +
  • 修正了 VS 2022 中 Nuget 软件包导致首次尝试生成项目失败的问题 (#1114)
  • +
  • 修正了 XML 文档工具提示中的格式问题 (#1127)
  • +
  • 修正了在编辑器的代码完成列表中包含虚假的额外静态成员的问题 (#1130)
  • +
  • 修正了转到定义、速览定义、QuickInfo 提示和参数提示中未包含扩展方法的问题 (#1131)
  • +
  • 当在参数列表内使用 IIF() 等编译器伪函数时,修正了为参数提示确定正确参数编号的问题 (#1134)
  • +
  • 修正了调试时在带下划线的编辑器中用鼠标双击选择单词的问题 (#1138)
  • +
  • 修正了在调试时计算名称中含有下划线的标识符值的问题 (#1139)
  • +
  • 修正了标识符高亮导致 VS 编辑器在某些情况下挂起的问题 (#1145)
  • +
  • 修正了 WinForms 设计器中生成的事件处理程序方法的缩进 (#1152)
  • +
  • 修正了 WinForms 设计器在添加新控件时重复字段的问题 (#1154)
  • +
  • 修复了 WinForms 设计器移除 #region 指令的问题 (#1155)
  • +
  • 修正了 WinForms 设计器删除 PROPERTY 声明的问题 (#1156)
  • +
  • 修正了在某些情况下本地类型查找失败的问题 (#1168)
  • +
  • 修正了代码中扩展方法的存在导致成员列表无法填充的问题 (#1170)
  • +
  • 修正了在未选择项目的情况下完成成员完成列表时出现的问题 (#1171)
  • +
  • 修正了在类的静态成员类型上显示成员完成度的问题 (#1172)
  • +
  • 修正了单行实体(如 GLOBAL、DEFINE、EXPORT 等)后的缩进问题 (#1173)
  • +
  • 修正了扩展方法的参数提示问题 (#1175)
  • +
  • 修正了命名空间和嵌套类的工具提示问题 (#1176)
  • +
  • UDC 中的可选标记在源代码编辑器中未着色为关键字
  • +
  • 修正了 CodeDom 提供程序中的一个问题,即在为 WPF 项目生成代码时,由于依赖 Microsoft.VisualStudio.Shell.Design 15.0 版本,因此无法在生成服务器上加载。
  • +
    + Changes in 2.13.2.2 + 编译器 + Bug 修复 + +
  • 仅使用 INSTANCE 修饰符声明的类成员被生成为 public。现在已改为 protected,就像在 Visual Objects 中一样 (#1115)
  • +
    + 运行时 + Bug 修复 + +
  • IVarGetInfo() 返回的 PROTECTED 和 INSTANCE 成员值不正确。此问题已得到修复。(#1116)
  • +
  • Default() 函数将以 NULL_OBJECT 初始化的 usual 变量更改为新值。这与 Visual Objects 不兼容 (#1119)
  • +
    + Visual Studio 集成 + 新特性 + +
  • Rebuild Intellisense Database 菜单选项现在会在重启 Visual Studio 之前要求确认 (#1120)
  • +
  • 现在可以隐藏解决方案资源管理器中的 “Include Files” 节点(工具/选项 X# Custom Editors/Other Editors)
  • +
    + Bug 修复 + +
  • CATCH 子句中声明的变量的类型信息不可用。该问题已得到修复 (#1118)
  • +
  • 修复了参数提示的几个问题 (#1098、#1065)
  • +
  • 修复了当光标位于 “global” 实体(如非常大的大型项目中的函数或过程)中的未声明标识符上时的性能问题
  • +
  • 当 #include 语句的源代码包含相对路径时,“Include Files” 节点可能包含重复引用,例如
    #include "..\GlobalDefines.vh"
  • +
    + +
  • 在打开解决方案时,禁止在解决方案资源管理器中展开 “Include Files” 节点。
  • +
  • 单字词(如 i、j、k)没有通过 “高亮显示单词 ”功能高亮显示
  • +
  • 在 quickinfo 工具提示中,“ptr ”类型没有用关键字颜色标出
  • +
  • 在关键字大小写上,nameof、typeof 和 sizeof 关键字不同步
  • +
    + Changes in 2.13.2.1 + 编译器 + 新特性 + +
  • 现在,解析器可以识别 PUBLIC 和 PRIVATE 内存变量声明中的 AS <type> 子句,但会忽略这些子句并发出警告
  • +
  • 我们为使用 LPARAMETERS 声明的局部变量添加了 AS <type> 支持。函数/过程仍采用 clipper 调用约定,但局部变量采用声明的类型。
  • +
    + Bug 修复 + +
  • 在未选择 /memvar 编译器选项的情况下,PUBLIC 和 PRIVATE 关键字有时会被误解为内存变量声明。我们添加了解析器规则以防止这种情况发生:当未选择 /memvar 时,PUBLIC 和 PRIVATE 仅用作可见性修饰符
  • +
  • 修复选择函数和方法重载时出现的问题 (#1096、#1101)
  • +
  • 2.13.2.0 版引入了一个问题,可能会导致超大源文件出现严重的性能问题。2.13.2.1 版已修复了这一问题。
  • +
    + + 运行时 + Bug 修复 + +
  • 当运行时无法解决对重载方法的后期绑定调用时,它会产生一条包含所有相关重载方法列表的错误信息 (#875#1096)
  • +
  • 为 FoxPro 方言添加的 .NULL. 相关行为破坏了涉及 usuals 的现有代码。在 FoxPro 方言中,DBNull.Value 现在被视为 .NULL.,但在其他方言中则被视为 NULL_OBJECT / NIL。
  • +
  • VFP 库中 PropertyContainer 类的几个内部成员现在是 Public 成员
  • +
    + Visual Studio 集成 + Bug 修复 + +
  • 速览定义、转到定义等的查找代码过滤掉了实例方法,只返回静态方法。这一问题已得到修复 (#1111#1100)
  • +
  • 为修复键入时的缩进问题而做的几处修改 (#1094)
  • +
  • 修正了参数提示的几个问题 (#1098#1066#1110)
  • +
  • 最近为支持将 packages.config 转换为软件包引用的向导所做的更改对在 Visual Studio 内生成过程中还原 nuget 的操作产生了负面影响。这一问题已得到修复。(#1113#1114)
  • +
  • 修复了 CATCH、ELSEIF、FOR、FOREACH 等行中变量的识别问题 (#1118)
  • +
  • 修复了默认命名空间中类型的识别问题 (#1122)
  • +
    + Changes in 2.13.1 + 编译器 + 新特性 + +
  • FoxPro 方言中的 PUBLIC 和 PRIVATE 语句现在支持内联赋值,例如
    PUBLIC MyVar := 42
    除了名称为 “FOXPRO” 和 “FOX” 的变量外,没有初始化的 PUBLIC 值将是 FALSE。在 FoxPro 方言中,这些变量的初始化值为 TRUE
  • +
    + Bug 修复 + +
  • 修正了在 foxpro 方言中初始化 File Wide 公共文件的问题
  • +
  • 对于复杂表达式,错误信息的列号不一定正确。这一问题已得到修复 (#1088)
  • +
  • 修正了词法器中的一个问题,即当源代码包含跨多行的语句时(通过使用分号作为续行符),行号不正确 (#1105)
  • +
  • 修正了当一个或多个重载有一个 Nullable 参数时重载解析的问题(#1106),例如
      class Dummy    
         method Test (param as usual) as int
         .
         method Test(param as Int? as int
         .
      end class
  • +
  • 修正了在使用 /fox2 编译器编译选项(“兼容数组处理”)的 FoxPro 方言中,针对未知类型变量的后期绑定方法调用和/或数组访问的代码生成问题 (#1108)。
    这样的表达式  

      undefinedVariable.MemberName(1)

    被解释为数组访问,但也可能是方法调用。
    现在,编译器生成的代码会调用运行时函数,在运行时检查 “MemberName” 是否是方法或属性。
    如果它是一个属性,运行时将假定它是一个数组,并访问第一个元素。
    包含 2 个以上参数或非数字参数的代码,如

      undefinedVariable.DoSomething("somestring")

    不受影响,因为 “somestring” 不能是数组索引。
    提示:不过,我们建议始终声明变量并指定其类型。这有助于在编译时发现问题,并能更快地生成代码。
  • +
    + + 运行时 + 新特性 + +
  • 添加了在运行时解决方法调用或数组访问的功能 (#1108)
  • +
  • 为 XSharp.RT.Debugger 库中的工作区窗口(WorkareasWindow)添加了转到记录编号功能
  • +
    + Visual Studio 集成 + 新特性 + +
  • 现在,VS 项目树(在一个特殊节点中)显示项目使用的包含文件 (#906 )
    这包括项目本身的包含文件,也包括 XSharp 文件夹或 Vulcan 文件夹中的包含文件(如适用)。
  • +
  • 我们尽可能在项目树和其他几个位置使用 Visual Studio 的内置镜像。
  • +
  • 现在,我们在 VS 中的后台分析程序会在生成过程中暂停,以减少对生成的干扰。
  • +
  • 我们在缩进选项中添加了一个设置,这样您就可以控制类字段和属性的缩进,并将其与方法分开。
    因此,您可以选择缩进字段和属性,而不缩进方法。这一点也已添加到 .editorconfig 文件中
  • +
    + Bug 修复 + +
  • 修正了 “速览定义” 和 “转到定义” 的问题
  • +
  • 在查找函数时,我们有时会(意外地)将其他类中的静态方法也包括在内。
  • +
  • 在解析 QuickInfo 和速览定义的标记时,如果方法名称之后和开放括号之前有空格,则无法找到方法名称。
  • +
  • 修正了一个问题,即在保存时,项目范围内的资源和设置(从项目属性页面添加)无法获得文件后面的代码
  • +
  • 调用构造函数的行上的 “快速信息 ”和 “转到 ”定义现在将显示/转到该类型的第一个构造函数,而不再显示/转到类型声明
  • +
  • 当项目的生成过程因缺少资源或其他资源相关问题而失败时,错误列表不会正确更新。这一问题已得到修复 (#1102)
  • +
  • XSharpDebugger.DLL 未正确安装到 VS2017 和 VS2019 中。
  • +
    + Changes in 2.13 + 编译器 + 新特性 + +
  • 我们新增了一个编译器选项 /allowoldstyleassignments,允许在赋值时使用 “=” 运算符而不是 “:=”。
    该选项在 VFP 方言中默认为启用,而在所有其他方言中默认为禁用。
  • +
    + +
  • 我们修改了与数字转换有关的 /vo4 和 /vo11 命令行选项的行为。
    /vo4 之前,它只与整数之间的转换有关。现在,它已扩展到小数(如 float、real8、十进制和货币)和整数之间的转换。
    在原始语言(VO,FoxPro)中,您可以将带有整数值的分数赋给变量而不会出现问题。
    在.NET中,你不能这样做,但你必须在赋值时添加一个强制转换:
  • +
    + LOCAL integerValue as INT
    LOCAL floatValue := 1.5 as FLOAT
    integerValue := floatValue          // 无转换:如果不进行转换,将无法在 .Net 中编译
    integerValue := (INT) floatValue    // 显式转换:可在 .Net 中编译
    ? integerValue

    如果启用了编译器选项 /vo4,那么不带强制转换的赋值也能正常工作。
    编译器选项 /vo4 增加了一个隐式转换
    在这两种情况下,编译器都会发出警告:
    warning XS9020: 将 “float ”缩小转换为 “int ”可能导致数据丢失或溢出错误
    上述整数 integerValue 的值由 /vo11 编译器选项控制:
    默认情况下,.Net 将小数值转换为整数值时,会四舍五入为零,因此值为 1。
    如果启用编译器选项 /vo11,小数将四舍五入为最接近的偶数整数值,因此示例中 integerValue 的值将是 2。
    这并不是什么新鲜事。
    我们在 2.13 版中进行了修改,以确保 X# 数字类型的这种差异不再在运行时确定,而是在编译时确定。
    在早期版本中,这个问题是由运行时中 FLOAT 和 CURRENCY 类型的转换运算符处理的。
    这些类根据主程序中的  /vo11 设置选择四舍五入方法,该设置存储在 RuntimeState 对象中。
    但是,当程序集使用  /vo11 编译,而主程序不使用 /vo11 编译时,可能会产生不必要的副作用。
    例如,ReportPro 或 bBrowser 就可能出现这种情况。
    如果这样一个程序库的作者现在选择使用  /vo11 进行编译,那么他可以肯定,他代码中的所有这些转换都将根据他的选择四舍五入为零或四舍五入为最接近的偶数整数。
    + +
  • 编译时代码块的 DebuggerDisplay 属性已更改。现在你可以在调试器中看到编译时代码锁定的源代码。
  • +
    + Bug 修复 + +
  • 修正了 ASYNC/AWAIT 的代码生成问题 (#1049)
  • +
  • 修正了 VFP 方言中 CODEBLOCK 的 Evaluate() 的内部编译器错误 (#1043)
  • +
  • 修正了一个内部编译器错误,即在 END FUNCTION 语句后错误插入 UDC
  • +
  • 修正了预处理器中嵌套包含文件中 #region 和 #endregion 的问题 (#1046)
  • +
  • 修正了根据 DEFINE 出现的顺序计算 DEFINE 的一些问题 (#866,#1057)
  • +
  • 修正了嵌套 BEGIN SEQUENCE ... END SEQUENCE 语句的编译器错误 (#1055)
  • +
  • 修正了包含复杂表达式的代码块的一些问题 (#1056)
  • +
  • 当启用 /undeclared+ 时,修正了将函数分配给委托的问题 (#1051)
  • +
  • 修正了在 Fox 方言中定义 LOCAL FUNCTION 时的错误警告 (#1017)
  • +
  • 修正了 FLOAT 值上的 Linq 操作 Sum 的一个问题 (#965)
  • +
  • 修正了在匿名方法/lamda 表达式中使用 SELF 的问题 (#1058)
  • +
  • 修正了将一个 Usual 转换为定义为 DWord 的 Enum 时的 InvalidCastException (#1069)
  • +
  • 修正了在调用带有参数 nStart 的 AScan() 和类似函数时发出的错误代码 (#1062, #1063)
  • +
  • 修正了解决跨不同程序集的同一函数的正确表单重载的问题 (#1079)
  • +
  • 修正了针对特定 XBase++ 代码的 #translate 预处理器的意外行为 (#1073)
  • +
  • 修正了 “ARRAY OF ”意外行为的问题 (#885)
  • +
  • 修正了调用接受 ARRAY 作为第一个参数的函数的特定重载时出现的一些问题 (#1074)
  • +
  • 当在方法上使用 PUBLIC 关键字时,修正了一个假的 XS0460 错误 (#1072)
  • +
  • 修正了启用 “命名参数” 选项时的不正确行为 (#1071)
  • +
  • 修正了调用带有默认值 DECIMAL 参数的函数/方法时的 Access 违规行为 (#1075)
  • +
  • 修正了预处理器中 #xtranslate 无法识别正则匹配标记的一些问题。还修正了在预处理器中识别表达式标记内的双冒号(::)的问题。(#1077)
  • +
  • 修复了在 VFP 方言中声明数组的一些问题 (#848)
  • +
    + + 运行时 + Bug 修复 + +
  • 修正了 Mod() 函数中与 VO 的一些不兼容问题
  • +
  • 修正了当维度不匹配时,在 VFP 方言中复制到数组时出现的异常 (#993)
  • +
  • 修正了 SetDeleted(TRUE) 和 DESCEND 排序的寻道问题 (#986)
  • +
  • 修正了 DataListView 在使用 SetDeleted(TRUE) 时错误显示(空)已删除记录的问题 (#1009)
  • +
  • 修正了使用 SYMBOL 参数时 SetOrder() 失败的问题 (#1070)
  • +
  • 还原了 SDK 中 DBServer:FieldGetFormatted() 先前的一处错误更改 (#1076)
  • +
  • 修正了 StrEvaluate() 的若干问题,包括无法识别名称中含有下划线的 MEMVAR (#1078)
  • +
  • 修复有关 InList() 和字符串值的问题 (#1095)
  • +
  • 为了与 FoxPro 兼容,Empty() 函数现在对 .NULL. 值和 DBNull.Value 的值返回 false。
  • +
  • 修正了 GetDefault()/ SetDefault() 的一个问题,使其与 Visual Objects 兼容 (#1099)
  • +
    + + 新特性 + +
  • 增强 Unicode AnyCpu SQL 类 (#1006)
  • +
  • 已添加以只读模式打开 Sqlselect 的属性。这将防止 Append()、Delete() 和 FieldPut() 等操作。
  • +
  • 延迟创建 InsertCmd、DeleteCmd、UpdateCmd,直到真正需要时为止
  • +
  • 添加了回调机制,客户可以覆盖这些命令的命令文本(例如,将它们路由到过程)。
  • +
  • 当由于方法重载而无法解决后期绑定的方法调用时,现在会生成更好的错误信息,其中还包括找到的方法的原型 (#1096)
  • +
    + + + FoxPro 方言 + +
  • 添加了 ADatabases() 函数
  • +
    + Visual Studio 集成 + 新特性 + +
  • 现在,您可以通过 工具/选项文本编辑器/X# 选项 页面控制缩排方式。我们添加了多个选项来控制源代码的缩进。如果你想在公司内部执行缩进规则,也可以通过 .editorconfig 文件设置这些选项。
  • +
  • 我们现已在源代码编辑器中添加了大量代码格式化选项。有关可用选项,请参见 工具/选项/文本编辑器/X#/缩进 (#430)
  • +
  • 我们实施了 “标识符大小写同步” 选项。其工作原理如下: 编辑器会拾取源文件中首次出现的标识符(类名、变量名等),并确保同一源文件中所有其他出现的标识符都使用相同的大小写。这不会在源文件中强制使用大小写(那样会太慢)
  • +
  • 我们在 VS 颜色对话框中为匹配大括号、匹配关键字和匹配标识符添加了颜色设置。打开 “工具/选项 ”对话框,选择 “环境/字体和颜色”,然后在列表框中查找以 “X#”开头的颜色。您可以根据自己的喜好自定义这些颜色。
  • +
  • 使用 Vulcan 运行时的 X# 项目现在有了一个上下文菜单项,可以将其转换为 X# 运行时。标准 Vulcan 程序集将被替换为等效的 X# 运行时程序集。如果使用第三方组件,如 bBrowser 或 ReportPro,则需要自行替换这些组件的引用(#32)。
  • +
  • 我们在项目属性的语言页面中添加了一个选项,用于为编译器设置新的 /allowoldstyleassignments 命令行选项
  • +
    + + Bug 修复 + +
  • 修正了 TFS 下解决方案的 “获取最新版本” 问题 (#1045)
  • +
  • 修正了 WinForm 设计器更改 main-prg 文件格式的问题 (#806)
  • +
  • 修正了 WinForms 设计器中代码生成的一些问题 (#1042, #1052)
  • +
  • 修正了 DO WHILE 的格式问题 (#923)
  • +
  • 修正了灯泡 “生成默认构造函数” 功能的问题 (#1034)
  • +
  • 修复了调试器中工具提示的问题。现在我们解析从第一个标记到光标位置的完整表达式。(#1015)
  • +
  • 修正了使用 VAR 定义的 .Net 数组局部的一些剩余的 intellisense 问题 (#569)
  • +
  • 修正了缩进在某些情况下无法正常工作的问题 (#421)
  • +
  • 修正了自动排版的一个问题 (#919)
  • +
  • 关键字配对匹配的若干改进 (#904)
  • +
  • 修正了在 “ClassName{}”中输入圆点后,代码完成也会显示静态成员的问题 (#1081)
  • +
  • 修正了键入 .and. 时的性能问题。(#1080)
  • +
  • 修复了类型化新类/方法时导航栏的问题 (#1041)
  • +
  • 修正了关键字上不正确的信息工具提示 (#979)
  • +
  • 修正了使用 “清理解决方案” 时可能出现的 VS 冻结问题 (#1053)
  • +
  • 修正了表单设计器中事件处理程序中的圆点位置不正确的问题 (#1092)
  • +
  • 修复了表单设计器在创建新表单后无法打开表单的问题 (#1093)
  • +
  • 右键单击 packages.config 文件并选择 “迁移到 packagereferences ”选项不起作用,因为 Visual Studio 内部有一个硬编码的支持项目类型列表。我们现在要 “伪造” 项目类型,让 VS 满意并启用向导。
  • +
    + 生成系统 + +
  • 在 VS 中编译 X# 项目时,负责创建命令行的 XSharp.Build.Dll 无法正确地将 /noconfig 和 /shared 编译器选项传递给编译器。因此,即使启用了使用共享编译器的项目属性,也无法使用共享编译器。此外,编译器还会自动包含对 xsc.rsp 文件中列出的所有程序集的引用,该文件位于 XSharp\bin 文件夹中。
    您现在可能会遇到程序集因缺少类型而无法编译的情况。如果您使用的类型位于 xsc.rsp 中列出的程序集内,就会出现这种情况。您现在应该在 X# 项目中添加对这些程序集的明确引用。
  • +
    + Changes in 2.12.2.0 + 编译器 + Bug 修复 + +
  • 修正了代码生成中的一个错误,以处理带括号索引的 FoxPro 数组访问 (#988, #991)
  • +
  • 编译器会对使用 IS 声明的 locals 生成错误的警告。现已修复。
  • +
  • 编译器未就 ACCESS/ASSIGN 上 OVERRIDE 修饰符的无效使用报告错误,现已修复 (#981)
  • +
  • 修正了从各种数字数据类型转换为另一种数据类型时,在报告警告和错误的几种情况下的不一致行为 (#951、#987)
  • +
  • 修正了 iif() 语句在某些情况下出现的 “failed to emit module ”问题 (#989)
  • +
  • 修正了编译 X# 代码脚本时出现的问题 (#1002)
  • +
  • 修正了在宏编译器中为某些特定程序集使用类的问题 (#1003)
  • +
  • 修复在 AnyCPU 模式下向指针添加 INT 时的错误信息 (#1007)
  • +
  • 修正了将 STRING 转换为 PTR 语法的问题 (#1013)
  • +
  • 修正了向 CLIPPER 函数/方法传递单个 NULL 参数时 PCount() 的一个问题 (#1016)
  • +
    + 新特性 + +
  • 我们已在所有方言中添加了对 TEXT ... ENDTEXT 命令的支持。请注意,该命令有多种变体。其中一种变体适用于所有方言(TEXT TO varName)。其他变体取决于所选择的方言。我们已将对 TEXT ... ENDTEXT 的支持从编译器转移到预处理器。这意味着还有 2 个新的预处理器指令: #text 和 #endtext (#977, #1029)
  • +
  • 启用了新的编译器选项 /vo17,为 BEGIN SEQUENCE...RECOVER 命令实现了与 VO 更为兼容的行为 (#111、#881、#916):
  • + +
  • 对于包含 RECOVER USING 的代码,将检查是否存在封装异常。如果异常不是封装异常,运行时将调用一个函数(FUNCTION _SequenceError(e AS Exception) AS USUAL)来处理该错误。例如,它可以调用错误处理程序,或抛出错误
  • +
  • 如果没有 RECOVER USING 子句,编译器就会生成一个子句,并在生成的子句中检测 RECOVER 是在包裹异常还是正常异常的情况下完成的。对于包裹异常,编译器会获取值并在运行时调用一个特殊函数(FUNCTION _SequenceRecover(uBreakValue AS USUAL) AS VOID)。如果在调用生成的恢复时出现了 “正常 ”异常,则会调用上一小节中的 _SequenceError 函数。
  • +
    +
    + +
  • 我们新增了对 CCALL() 和 CCALLNATIVE() 的支持
  • +
  • #pragma 指令现在由预处理器处理。因此,您可以在代码的任何地方添加 #pragma 行:实体之间、实体内部等。
  • +
    + 运行时 + Bug 修复 + +
  • 更改了 AdsGetFTSIndexInfo 的原型 (#966)
  • +
  • 修复了 TransForm 和十进制类型的一个问题 (#1001)
  • +
  • 在 VFP 程序集中添加了几种缺失的返回类型
  • +
  • 修正了在 FoxPro 方言中浏览 DBFVFP 表的问题
  • +
  • 修正了处理 BREAK 命令在 BEGIN...RECOVER 周围语句中提供的值时的不一致性,这取决于使用的是早期还是晚期绑定调用 (#883)
  • +
  • 修正了将 System.Decimal 值赋值给 USUAL 变量时浮点格式的问题 (#1001)
  • +
  • 在 FoxPro 方言中,当复制到列数多于表列数的数组时,修正了 DbCopyToArray() 的运行时错误 (#993)
  • +
  • 修正了宏编译器中带有 +/- 符号的类型转换表达式和数字字面的问题 (#1025)
  • +
  • 修正了后期绑定代码中的问题,即字符串有时会被传入,但不会正确转换为符号
  • +
  • IVarPut()/IVarGet() 现在会在尝试使用不可访问(由于限制可见性修饰符)的属性 getter/setter(ACCESS/ASSIGN)时抛出适当的异常 (#1023)
  • +
  • 修正了使用 NEW 修饰符在子类中重新定义属性时,IVarGet() 和 IVarPut() 的一个问题 (#1030)
  • +
  • 删除或调用记录时,DbDataSource 现在会尝试锁定记录
  • +
  • Foreach 无法在包含从 IVarGet() 等后期绑定属性访问返回的集合的属性上正确工作(#1033)
  • +
    + 新特性 + +
  • 现在,您可以在运行时状态中注册一个委托,从而控制宏编译器如何缓存已加载程序集的类型 (#998)。
    该委托必须具备以下格式:

    DELEGATE MacroCompilerIncludeAssemblyInCache(ass as Assembly) AS LOGIC

    例如:

    XSharp.RuntimeState.MacroCompilerIncludeAssemblyInCache := { a  =>  DoNotCacheDevExpress(a)}
    FUNCTION DoNotCacheDevExpress(ass as Assembly) AS LOGIC)
      // 不缓存 DevExpress 程序集
      RETURN ass:Location:IndexOf("devexpress", StringComparison.OrdinalIgnoreCase) == -1
  • +
    + 兼容 VO SDK + +
  • 修正了 SetAnsi(FALSE) 导致带图片的单行编辑控件在输入缩略语时显示随机字符的问题 (#1038)
  • +
    + Typed VO SDK + SQLSelect 类有两个新属性。 + +
  • ReadOnly - 使 SQLSelect 变成只读
  • +
  • BatchUpdates - 控制如何处理更新
  • +
    + 只读 CURSOR 和延迟创建 command 对象 + 以前,SQLSelect 类会创建 DbCommand 对象,以便在打开结果集时立即更新、插入和删除对游标所做的更改。 + 当使用复杂查询选择数据时,这可能会导致问题,因为 DbCommandBuilder 对象无法确定如何创建这些语句。 + 现在,我们将这些命令的创建时间推迟到第一次需要时。 + 同时,我们还添加了一个只读属性,默认值为 FALSE。 + 如果将 ReadOnly 设置为 true,那么 + +
  • 调用 FieldPut()、Delete() 和 Append() 将产生 Gencode EG_READONLY 错误。
  • +
  • 不会为 SQLSelect 创建 Command 对象,因为游标无法更新。
  • +
    + 如果只读保持 FALSE,那么更新、插入和删除的命令对象将在第一次需要时创建。 + 这些命令是在 __CreateDataAdapter() 方法中创建的。 + 您可以重写该方法,并在需要时在自己的子类中创建命令。 + 命令创建和更新的工作原理如下: + +
  • 首先,使用 SQLFactory 类中的 CreateDataAdapter 方法创建数据适配器(DbDataAdapter 类型)
  • +
  • 然后,通过 SQLFactory 类的 CreateCommandBuilder 方法创建一个 CommandBuilder 对象( DbCommandBuilder 类型)
  • +
  • 然后通过 DbCommandBuilder 对象的 GetInsertCommand() 等方法创建插入、删除和更新命令对象(均为 DbCommand 类型)。DBCommandBuilder 对象接收 Select 语句,并根据 SQLSelect 命令创建带参数的命令
  • +
  • 这些命令对象被分配给 DataAdapter,然后以 SQLSelect 后面的 DataTable 作为参数调用 DataAdapter:Update() 方法。
  • +
    + 批量更新 + 通常,SQLSelect 中的更新会在将记录指针移动到新行或调用 Update() 时发送到服务器。 + 如果将 BatchUpdates 属性设置为 “true”,那么 SQLSelect 将延迟向服务器发送更新,并且不会在每次移动记录时发送更新,而是等到调用 Update() 方法时才发送更新,参数为 “true”。这将把所有缓冲的更改写入服务器。这也会触发 DBCommand 对象的创建(见前文)。 + 如果您的表有自动递增字段,那么您可能需要在之后调用 Requery() 来查看新分配的键值。 + Visual Studio 集成 + Bug 修复 + +
  • 修复了针对带有不同风味的项目的项目属性页面处理 (#992)
  • +
  • 尝试使用不存在的工作目录或程序文件名启动调试器时,现在会显示适当的错误 (#996)
  • +
  • 修正了表单设计器有时使用 #区域生成无效代码的问题 (#1020、#935)
  • +
  • WinForms 设计器现在默认在生成的 Dispose() 方法中添加 OVERRIDE 关键字修改器(已在模板中添加) (#1004)
  • +
  • 由于最新发布的 VS2022 中的线程模型发生了变化,错误信息有时不会显示在输出窗口和错误列表中。这一问题已得到修复
  • +
  • 修正了窗口窗体设计器代码生成中主窗体类内嵌套类的问题 (#1031)
  • +
  • 修正了 windows 表单编辑器无法打开带有基于 UDC 的命令的表单的问题 (#1037)
  • +
    + 源代码编辑器 + +
  • 全名的类型查找有时会失败,因为全名被定义为区分大小写(#978)
  • +
  • 嵌套类型查找有时会失败。现已修复。
  • +
  • 缩进选项现在也可以在 .editorconfig 文件中重写(#999)
  • +
  • 当编辑器加载源文件时,直到光标在缓冲区中移动之前,类型和成员的组合框才会被激活。(#995)
  • +
  • 编辑器中的成员组合框容易与包含本地函数或本地过程的代码混淆。
  • +
  • 修正了转换或带关键字的转换(如 DWORD( SomeExpression))中表达式的查找问题。转换括号内的表达式没有快速信息提示(#997)
  • +
  • 修正了 DATATYPE(<expression>) 转换表达式的 intellisense 问题 (#997)
  • +
  • 修正了在属性实现中使用 => 符号声明属性时导致导航栏内容不完整的问题 (#1008)
  • +
  • 修复了代码折叠和格式化中的几个问题 (#975)
  • +
  • 修正了在参数列表内键入逗号不会调用参数工具提示的问题(#1019)
  • +
  • 修正了检测 VAR 关键字的变量类型时出现的一些问题 (#903)
  • +
  • 修正了在字符串字面内部输入“: ”或“. ”时的 intellisense 问题 (#1021)
  • +
  • 修正了未知标识符有时会导致显示假成员完成列表的问题 (#1022)
  • +
  • 在编辑器中按 CTRL+SPACE 现在总是调用代码完成列表 (#957)
  • +
    + 新特性 + +
  • 在 VOWED 中添加了在选项卡控件中插入页面和重新排序页面的选项 (#1024)
  • +
  • 我们更新了 WPF 应用程序模板。主窗口现在称为 “MainWindow”。
  • +
  • 在 .editorconfig 文件中添加了以下新设置,以设置缩进选项 (#999)。
  • +
    + +
  • indent_entity_content (true or false)
  • +
  • indent_block_content (true or false)
  • +
  • indent_case_content (true or false)
  • +
  • indent_case_label (true or false)
  • +
  • indent_continued_lines (true or false)
  • +
    + + VOXporter + +
  • 如果在 VO 应用程序中启用了允许 MEMVAR/Undeclared vars 编译器选项,VOXporter 现在可以正确启用或禁用这些选项 (#1000)
  • +
    + Changes in 2.11.0.1 + 编译器 + Bug 修复 + +
  • 修正了 CLIPPER 调用约定委托时的内部编译器错误 (#932)
  • +
  • 修正了在运行时使用 usual 属性上的 null 运运算符 ?. 时出现的 AccessViolationException 异常 (#770)
  • +
  • [XBase++ 方言] 修正了带括号方法声明的解析问题 (#927)
  • +
  • [XBase++ 方言] 修复了解析 ANNOUNCE 和 REQUEST 语句(在 X# 中已过时)时出现的问题 (#929)
  • +
  • [XBase++ 方言] 修正了 INLINE ACCESS 和 ACCESS ASSIGN 语句的解析问题 (#926)
  • +
  • [VFP 方言] 修正了一个问题,即在解析包含 “M. ”变量用法的 FOR EACH 语句时,变量未在 FOR EACH 行中类型化 (#911) 。
  • +
  • 修正了当一个 UDC 产生多个声明时,PPO 文件包含两次某些输出的问题 (#933)
  • +
  • 修正了几个 UDC 中 “FIELDS ”子句的一些问题 (#931,#795)
  • +
  • 修正了预处理器中 #xtranslate 指令中括号的问题 (#963)
  • +
  • 修复了 #command 和 #translate 指令的多个问题 (#915)
  • +
  • 在某些情况下,编译器在从一种类型 casting/converting 为不兼容类型时,会产生不会抛出运行时异常的代码。该问题已得到修复(#961、#984)
  • +
  • 编译器在某些情况下未报告收缩转换警告,现已修复(#951)
  • +
  • 编译器未报告有符号/无符号转换警告。该问题已得到修复(#971)
  • +
  • 修正了一个可能导致 “Could not emit module” 错误信息的问题,该问题由 IIF() 表达式中的 NULL 值引起(#989)
  • +
    + 新特性 + +
  • 添加了编译器选项 /noinit ,以便不为没有 INIT 过程的库生成 $Init 调用,从而推迟加载 (#854)
  • +
  • 已添加 #stdout 和 #if 的预处理器支持 (#912)
  • +
  • 现在 #include 文件的全部内容都会写入 ppo 文件 (#920)
  • +
  • 如果因标识符被同名定义替换而导致解析器出错,编译器现在会生成第二个警告。
  • +
  • 如果头文件包含实际代码,并且在调试过程中调用了这些代码,那么调试器在调试这些代码时就会进入头文件。
    以前,所有语句都从包含头文件的地方链接到 #include 行。(#967)
  • +
  • 使用 /vo11 (兼容数字转换)编译器选项抑制编译器错误时,现在会看到一个 XS9020 “收缩”警告,表明可能会发生运行时错误或丢失数据。
  • +
  • 当使用 /vo4 抑制有符号整数和无符号整数之间的转换错误时,现在会出现 XS9021 警告,表示可能会丢失数据或发生溢出错误。
  • +
    + Visual Studio 集成 + 新特性 + +
  • 源代码编辑器现在还支持新的 #if 和 #stdout 预处理器命令 (#912)
  • +
  • 有了新的 “灯泡 ”选项,可以为类生成构造函数。
  • +
    + Bug 修复 + +
  • 修正了在项目属性中指定自定义预处理器定义的问题(#909)
  • +
  • 在生成代码时,VO 风格编辑器现在保留了方法/构造函数的现有 “CLIPPER ”子句 (#913)
  • +
  • 修正了类之间相互嵌套的错误解析 (#939)
  • +
  • 修正了在项目设置中使用 $(SomeName) 形式的嵌入式变量的问题 (#928)
  • +
  • 修正了从项目中删除项目项会失败的问题。
  • +
  • 修正了一个问题,即如何解析由其他开发语言的项目文件生成的 DLL,尤其是 SDK 风格的 C# 项目 (#950)
  • +
  • 修正了在出现无法识别的标识符后快速信息工具提示的问题 (#894)
  • +
  • 修正了编辑器在自动键入属性后错误添加括号的问题(#974)
  • +
  • 修正了在 #endif 指令后创建新行时编辑器反应极慢的问题 (#970)
  • +
  • 修复了 .Net 数组类型的一些 intellisense 问题 (#569)
  • +
  • 修复了设计时 DevExpress DocumentManager 控件的一个问题 (#976)
  • +
  • 当 “显示来自......的输出 ”设置为 “扩展 ”时,修正了输出窗口中的参数为空异常 (#940)
  • +
    + 运行时 + 新特性 + +
  • 为 array 类添加了 IEnumerable 构造函数 (#943)
  • +
  • 实现了缺失的函数 AdsSetTableTransactionFree() 和 AdsGetFTSIndexInfo() (#966)
  • +
  • 将函数 GetRValue()、GetGValue() 和 GetBValue() 从 Win32API 库移至 XSharp.RT,以便 AnyCPU 代码可以使用它们 (#972)
  • +
  • [VFP 方言] 实现了函数 APrinters() (#952)
  • +
  • [VFP 方言] 实现函数 GetColor() (#973)
  • +
  • [VFP 方言] 实现函数 Payment()、FV() 和 PV() (#964)
  • +
  • [VFP 方言] 实现了 MKDIR、RMDIR 和 CHDIR 命令 (#614)
  • +
    + Bug 修复 + +
  • 修复了 SDK 中 ListView TextColor 和 TextBackgroundColor ACCESSes 的一个问题 (#896)
  • +
  • 修复了软查找在发现 strict  键时不尊重顺序范围的问题 (#905)
  • +
  • 修正了 DBUseArea() 对不同文件夹中文件的搜索逻辑。此外,SetDefault() 不再使用当前目录初始化(为了兼容 VO)(#908)
  • +
  • 修正了创建长度大于 255 的字符字段的 dbfs 问题 (#917)
  • +
  • 修正了在某些情况下缓冲读取系统在读取、关闭、覆盖然后重新打开 dbf 时出现的问题 (#968)
  • +
  • 修正了一个 VO 兼容性问题,即当打开索引文件时,DBSetIndex() 如何更改活动顺序 (#958)
  • +
  • 修正了当源文件和目标文件结构相同并包含备注文件时,数据库追加、复制等操作的一个问题(#945)
  • +
  • 修正了在索引文件不存在或未打开的情况下 DBOrderInfo(DBOI_ORDERCOUNT) 的错误结果 (#954)
  • +
  • [VFP 方言] 为 Program( [,lShowSignature default=.f.] ) 添加了可选参数 (#712)
  • +
  • [VFP 方言] 修复了 Type() 函数的几个问题(#747、#942)
  • +
  • [VFP 方言] 修正了 ExecScriptFast() 的一个问题 (#823)
  • +
  • [VFP 方言] 修正了 SQLExec() 不能将记录指针放在第一条记录上的问题 (#864)
  • +
  • [VFP 方言] 修正了 SQLExec() 在使用 null 值时的一个问题 (#941)
  • +
  • [VFP 方言] 修正了从 SqlExec() 返回的缓冲区中的写入错误 (#948)
  • +
  • [VFP 方言] 修复了 DBFVFP RDD 和 null 列的一个问题 (#953)
  • +
  • [VFP 方言] 修正了 SCATTER TO 和 APPEND FROM ARRAY 的一个问题 (#821)
  • +
    + Typed SDK + +
  • 修正了标准打开对话框中文件名属性的一个问题
  • +
  • 修正了菜单构造函数中的 FOREACH 会导致处理异常的问题
  • +
    + RDD + Bug 修复 + +
  • 修正了 DBFVFP RDD 中计算 nullable 键的键值大小的问题 (#985)
  • +
    + VOXporter + Bug 修复 + +
  • 修正了错误检测字面字符串和注释中函数指针的问题 (#932)
  • +
    + + Changes in 2.10.0.3 + 编译器 + Bug 修复 + +
  • 修正了 FoxPro 方言中 COPY TO ARRAY 命令的一些问题 (#673)
  • +
  • 修正了在 SWITCH 语句中使用 System.Decimal 类型的问题 (#725)
  • +
  • 修正了 FoxPro 方言中 Type() 的内部编译器错误 (#840)
  • +
  • 修正了生成 XML 文档的问题(#783、#855)
  • +
  • 启用 /vo3(所有成员均为虚拟)时,防止 SEALED 类成员出现警告 (#785)
  • +
  • 修正了将 “ARRAY OF <type>”变量赋值和比较 NULL_ARRAY 的问题 (#833)
  • +
  • 修正了使用 @ 操作符通过引用传递参数和/或将其用作 AddressOf 操作符时的一些问题(#810、#899、#902)
  • +
  • 修正了当函数/方法的参数为指针类型时,使用 @ 运算符解析通过引用传递的参数的问题(#899,#902)
  • +
    + 新特性 + +
  • 添加了编译器选项(-enforceoverride) 以便在覆盖父成员时强制修改 OVERRIDE(#786#846)
  • +
  • 在非本地上下文中使用 String2Psz() 和 Cast2Psz() 时,编译器会报错(因为这些 PSZ 会在退出当前实体时被释放) (#775)
  • +
  • 函数过程现在支持 ASYNC 修饰符 (#853)
  • +
  • 现在,您可以通过编译器命令行参数 -noinit 来抑制 $Init1() 和 $Exit() 函数的自动生成 (#854)  
    VS "属性" 对话框尚未支持该选项
  • +
  • 为 USUAL 变量也添加了对 ASTYPE 运算符的支持 (#857)
  • +
  • 允许在 PUBLIC var 声明中指定 AS <type> 子句(编译器忽略,但编辑器将来会用于 intellisense)(#853)
  • +
  • AS <datatype> OF <classlib> 子句现在也支持其他几个 FoxPro 兼容命令,如 PARAMETERS 和 PUBLIC。
    由于这些变量在运行时是无类型的,因此编译器会忽略该子句并发出警告。
  • +
    + 生成系统 + Bug 修复 + +
  • 在 X# WPF 项目上运行 MsBuild 可能会失败 (#879)
  • +
    + Visual Studio 集成 + 新特性 + +
  • 我们为 VS 2022 添加了 Visual Studio 集成
  • +
  • 我们新增了对软件包引用的支持
  • +
  • 现在,当用户键入“///”时,编辑器会自动插入 XML 注释。(#867, #887)  条件:
  • + +
  • 光标必须位于实体开始前的一行上
  • +
  • 光标不得位于注释行之前
  • +
    +
    + +
  • 现在,类的工具提示还包括有关父类和已实现接口(如果有)的信息 (#860)
  • +
  • 我们为编译器内置的伪函数(如 PCount() 和 String2Psz())添加了工具提示、参数补全等功能。
  • +
  • 我们添加了第一个版本的灯泡提示。现在,我们只需实现缺失的接口成员,并将字段转换为属性。更多实现和配置选项将陆续推出
  • +
  • 我们添加了一个新对话框来配置源代码格式,并提供了选项效果的可视化示例。
  • +
  • 我们增加了将 X# VS 集成的操作记录到 Windows 调试窗口和/或日志文件的功能。
    如果您遇到无法解释的问题,我们会与您联系,告诉您如何启用这些选项,这样您就可以向我们发送日志文件,显示在 Visual Studio 内部出现问题之前发生了什么。我们为此使用了 Serilog。
  • +
  • 高亮显示单词功能现在不区分大小写,不再高亮显示注释、字符串或非活动编辑器区域中的单词。
  • +
  • 我们在编辑器中加入了 "括号补全"
  • +
    + Bug 修复 + +
  • 修复了格式化文档命令的一些问题(#552)
  • +
  • 修复了参数工具提示的几个问题(#728、#843)
  • +
  • 修正了代码完成列表显示未定义的变量/标识符的问题 (#793)
  • +
  • 修正了链式表达式的成员补全和参数工具提示 (#838)
  • +
  • 修正了某些情况下对 VAR 本地变量类型的识别 (#844)
  • +
  • 修正了 VOSTRUCT 变量的成员完成和工具提示信息问题 (#851)
  • +
  • 修正了忽略 XML 注释中换行符的问题 (#858)
  • +
  • 修正了一些有关 CHAR 属性的 WinForms 设计器问题 (#859)
  • +
  • 修正了调用 SUPER() 构造函数时转到定义无法正常工作的问题 (#862)
  • +
  • 当解决方案路径中包含空格时,修复了重建 intellisense 数据库命令的错误 (#865)
  • +
  • 当同时运行多个 VS 版本时,外部程序集类型的转到定义失败。
  • +
  • 修正了 VOSTRUCT 有时会混淆解析器的问题 (#868)
  • +
  • 修正了更多有关 quickinfo 和成员完成的问题 (#870)
  • +
  • 修正了 Windows 窗体设计器中的一个问题 (#873)
  • +
  • 修正了不使用 MEMBER 关键字的 ENUM 的智能感应问题 (#877)
  • +
  • 修正了继承 exception 类型的成员完成问题 (#884)
  • +
  • 如果 XML 主题有 <see> 或其他类型的子元素,则编辑器中不会显示这些子元素。这一问题已得到解决 (#900)
  • +
  • 在编辑器中,不平衡的大括号有时会与关键字匹配。这一问题已得到修复 (#892)
  • +
  • 分隔线有时会闪烁。这一问题已得到修复(#792)
  • +
  • 在解析局部变量时,我们没有处理包含文件。这可能导致在条件块 (#ifdef SOMEVAR) 中声明的局部变量找不到。这一问题已得到修复。现在,即使在解析源文件的一部分时,编辑器解析器也会包含头文件以及代码中的 #defines 和 #undefines (#893)
  • +
  • #include 行现在包含在编辑器的字段/成员组合框中(当字段显示时)。它们也会保存到 intellisense 数据库中。
  • +
  • 当光标停留在非活动预处理器区域 (#ifdef) 上时,编辑器会尝试显示 QuickInfo 工具提示。现在这种情况不再发生。
  • +
    + 运行时 + Bug 修复 + +
  • 修复了同时更新时可能出现的 DBFCDX 损坏问题 (#585)
  • +
  • 修正了打开带有允许 NULL 字段索引的 FoxPro 表的问题 (#631)
  • +
  • BlobGet() 函数返回的是逻辑值而不是实际字段值 (#681)
  • +
  • 在索引表达式中有大量字段的情况下,创建索引的速度大大提高 (#711)
  • +
  • 修正了 FieldPutBytes() 和 FieldGetBytes() 的一些问题 (#797)
  • +
  • 在某些情况下,带有第三个参数 (lLast) TRUE 的 DBSeek() 行为不正确 (#807)
  • +
  • 修复了创建索引时可能发生的 NullreferenceException 异常 (#849)
  • +
  • 改进了 Error.WrapRawException() 方法生成的文本的缩进(#856)
  • +
  • 修正了.Net Array <-> USUAL 转换时的运行时问题(#876)
  • +
  • 即使不支持信息枚举,DbInfo() 也会返回 TRUE (#886)。
  • +
  • 还修正了 DBFNTX 可能损坏的问题 (#889)
  • +
  • 在 FoxPro 中,当代码块返回 NIL 或 VOID 时,DbEval() 可能会失败 (#890)
  • +
  • 修复了 Softseek 和降序索引的一个问题。
  • +
  • 修正了范围表达式不正确可能导致意外结果的问题。现在,服务会在范围不正确的情况下进入(并停留在)EOF。
  • +
  • 修正了在宏表达式中使用括号运算符访问 FoxPro 数组的问题(#805)。
    请注意,要使主程序正常运行,必须在编译主程序时使用 /fox2
  • +
    + + Changes in 2.9.1.1 (Cahors) + 编译器 + Bug 修复 + +
  • 修正了 2.9.0.2 中引入的一个问题,即定义符号在与 /vo8 编译器选项结合使用时不遵守 /cs 编译器选项 (#816)
  • +
  • 当启用 /fox2 编译器选项时,修正了对象初始化器内部赋值表达式的内部编译器错误 (#817)
  • +
  • 修正了 VOSTRUCTs 中日期的一些问题 (#773)
  • +
  • 修正了预处理器中的一个问题,即在 UDC 中间使用 FIELDS <f1> [,<fn> ] 这样的列表规则时会出现这个问题。
  • +
  • 修正了 SET CENTURY &cOn 等 UDC 的编译问题,因为 cOn 不是作为标识符而是作为关键字进行解析的。
  • +
    + 新特性 + +
  • 预处理器中有一个新的结果标记(NotEmpty 结果标记),它的作用与常规结果标记相同,但在输入中找不到匹配标记(可选)时,会向输出写入一个 NIL 值。
    由于 IIF 表达式内部的部分可能不是空的,因此当您想将结果作为 IIF() 表达式的一部分输出时,可以使用此方法。
    结果标记如下 <!marker!>
  • +
  • 以前不允许在 UDC 中使用受限匹配标记作为第一个标记。这一问题已得到解决。现在可以编写这样的规则,它将输出关键字(SCATTER、GATHER 或 COPY),然后是经过字符串化的选项列表。
  • +
    + #command <cmd:SCATTER,GATHER,COPY> <*clauses*> => ?  <"cmd">, <"clauses">
    FUNCTION Start AS VOID
       SCATTER TO TEST   // 被预处理为 ? "SCATTER" , "TO TEST"
       RETURN
    + Visual Studio 集成 + Bug 修复 + +
  • 修正了 2.9.0.2 中引入的 WPF 项目代码生成问题 (#820)
  • +
  • 修正了生成后 VS 冻结的问题 (#819)
  • +
  • 修正了包含 SELF 属性的源文件的代码折叠和导航栏的一些问题 (#825)
  • +
  • 修复了表单设计器在表单 prg 包含嵌套类时发出无效代码的问题 (#828)
  • +
  • 修正了一个问题,即代码自动完成功能在打开左侧结尾括号时显示错误的成员 (#826)
  • +
  • 修复了点击泛型类时 VS 崩溃的问题 (#827)
  • +
  • 修正了 SET CENTURY &cOn 等表达式的关键字着色问题,在这些表达式中,&cOn 用关键字颜色着色。
  • +
  • 嵌套函数调用的参数提示需要在嵌套函数名称前多留一个空格 (#728)
  • +
  • 修复了表单设计器删除 form.prg 中委托和其他嵌套类型的问题 (#828)
  • +
  • 在 ClassView / ObjectView 窗口中加载类型的后台程序降低了 VS 的性能。目前已将其禁用。
  • +
  • 修复了泛型的类型查找。
  • +
  • 将鼠标悬停在构造函数关键字上显示的是类的工具提示,而不是构造函数的工具提示。这一问题已得到修复。
  • +
  • 修正了 Windows 窗体代码生成器中的一个问题,即带有特殊值的字面字符(如“\0”) (#859)
  • +
  • 修正了在后台初始化项目系统时(例如没有打开 X# 项目时)项目系统出现的异常 (#852)
  • +
  • 修复了 LONGINT 和 SHORTINT 关键字的代码自动补全缺失 (#850)
  • +
  • 上下文菜单选项 “在反汇编器中查看 ”现在只针对 X# 项目显示
  • +
  • 修正了 ARRAY OF <type> 的代码生成器问题 (#842)
  • +
  • 修复了在编辑器中点击代码时的性能问题 (#829)
  • +
  • 修正了在查找嵌套类型失败时加载 Windows 窗体的问题。
  • +
    + + 新特性 + +
  • 我们在解决方案资源管理器的项目上下文菜单中添加了一个上下文项,用于编辑项目文件。这将在需要时卸载项目,然后打开文件进行编辑。
  • +
  • 现在,“工具/XSharp ”菜单中的 “重建 intellisense 数据库” 菜单选项会卸载当前解决方案,删除 intellisense 数据库,然后重新打开解决方案,以确保数据库正确重建。
  • +
  • 我们对在后台解析解决方案源代码的过程进行了一些更改。
  • +
  • 泛型名现在以 Name`n 格式存储在 intellisense 数据库中,例如 IList`1 表示 IList<T>
  • +
    + 运行时 + 新特性 + +
  • 添加了丢失的 ErrorExec() 函数(#830)
  • +
  • 已添加对 BlobDirectExport、BlobDirectImport、BlobDirectPut 和 BlobDirectGet 的支持 (#832)
  • +
  • 修正了创建带有自定义文件扩展名的 DBF 文件时出现的问题。还增加了对 _SET_MEMOEXT 的支持 (#834)
  • +
  • 当您对两个不同类型的 USUAL 进行数字运算时,我们将确保不再丢失小数值(#808)。例如,LONG + DECIMAL 的结果将是 DECIMAL。 有关使用混合类型时可能的返回值,请参见本帮助文件中 USUAL 类型页面的表格
  • +
    + + + Bug 修复 + +
  • 修正了 _PrivateCount() 引发 InvalidateOperationException 的问题 (#801)
  • +
  • 修正了编辑器中成员补全有时会显示错误类型方法的问题 (#740)
  • +
  • 修正了 ACopy() 函数的一些问题 (#815)
  • +
  • 修复了 VOSTRUCTs 中与日期有关的几个遗留问题 (#773)
  • +
    + 宏编译器 + 新特性 + +
  • 添加了对 & 运算符的支持 (#835)
  • +
  • 为后期绑定的方法调用添加了对引用参数的支持(同时支持 @ 和 REF) (#818)
  • +
    + VOXporter + Bug 修复 + +
  • 修正了在 PUBLIC 声明前添加“@@”不正确的问题
  • +
    + + Changes in 2.9.0.2 (Cahors) + 编译器 + 新特性 + +
  • 解析器现在支持多类型的类变量声明和全局声明(#709)
  • +
    + EXPORT var1 AS STRING, var2, var3 as LONG + GLOBAL globalvar1 AS STRING, globalvar2, globalvar3 as LONG + +
  • 如果您正在使用我们的分析程序,您应该注意 ClassVarList 规则已经消失,ClassVars、VoGlobal 和 ClassVar 规则已经更改。
  • +
    + +
  • 我们添加了一条命令,用于在 foxpro 数组中填充单个值
  • +
    + STORE <value> TO ARRAY <arrayName> + + +
  • 创建包含 DATE 字段的 VOSTRUCT 或 UNION 时,编译器现在将使用新的 __WinDate 结构,该结构与 Visual Objects 中 VOSTRUCT 或 UNION 中的 DATE 值存储方式二进制兼容 (#773)
  • +
  • 现在可以在 FoxPro 方言中使用括号(而不是方括号)访问 ARRAY 元素。必须启用编译器选项 /fox2 才能起作用 (#746)
  • +
  • 我们增加了对在调用函数/方法代码中访问 WITH 块表达式的支持(仅适用于 FoxPro 方言)。因此,您可以在调用代码中键入 .SomeProperty 并访问属于 WITH BLOCK 表达式的属性。要使用此功能,必须启用 “后期绑定”,因为编译器不知道调用代码中表达式的类型(#811)。
  • +
    + + Bug 修复 + +
  • 当您对父类中不存在(虚)方法的方法使用 NEW 或 OVERRIDE 修饰符时,现在会产生一个错误(#586,#777)
  • +
  • 修正了数组中 USUAL 变量的逻辑 AND 和 OR 问题 (#597)
  • +
  • 某些编译器生成的代码(如后期绑定代码)的错误信息和警告并不总是指向正确的行号,而是指向方法或函数正文的第一行。这一问题已得到修复。(#603)
  • +
  • 修正了 IIF 表达式返回值不正确的问题 (#606)
  • +
  • 修正了编译器在 DECLARE METHOD 行中解析多个方法名时出现的问题 (#708)
  • +
  • 修正了 FoxPro 方言中的一个问题,即向数组赋值以填充数组 (#720)
  • +
  • 修复了当结构包含 DATE 类型成员时计算 VOSTRUCT 大小的问题 (#734)
  • +
  • 之前的问题会导致运行时错误 (#735)
  • +
  • 修正了代码中的一个问题 (#736)
    var aLen := ALen(Aarray)
  • +
  • 针对带有类型返回值的方法,修复了用 STRICT 覆盖 CLIPPER 方法时编译器崩溃的问题 (#761)
  • +
  • 当接口实现的大小写与定义的大小写不同时,会显示错误信息 (#765)
  • +
  • 修复了代码块内函数参数不正确时编译器崩溃的问题 (#759)
  • +
  • DEFINE 的递归定义可能导致编译器内部出现无限循环,从而引发 StackOverflowException(#755)
  • +
  • 修正后期绑定调用和 OUT 参数的问题 (#771)
  • +
  • 如果使用 4 级或更低的警告级别进行编译,则不会显示某些将值类型与空值进行比较的警告。现在我们已将默认警告级别改为 5。(#772)
  • +
  • 修正了同一实体中多个 PRIVATE &cVarName 语句导致编译器崩溃的问题 (#780)
  • +
  • 修正了通过引用传递 USUAL 参数时可能损坏 USUAL NIL 值的问题 (#784)
  • +
  • 修正了在 FoxPro 方言中将已声明的 PUBLIC 变量创建为 PRIVATE 的问题 (#753)
  • +
  • 修复了使用类型定义作为默认参数时出现的问题 (#718)
  • +
  • 修正了类型化 DEFINE 可能产生错误类型常量的问题 (#705)
  • +
  • 修正了从 #warning 和 #error 指令文本中移除空白的问题 (#798)
  • +
    + 运行时 + 新特性 + +
  • 我们为 Empty() 函数添加了几个强类型重载,这些重载应该会提高性能 (#669)
  • +
  • 我们在 RuntimeState 类中添加了一个事件处理程序。该事件处理程序名为 “StateChanged”(状态改变),预计将使用一个签名如下的方法:
    Method MyStateChangedEventHandler(e AS StateChangedEventArgs) AS VOID
    StateChangeEventArgs 类型具有设置枚举、OldValue 和 NewValue 的属性。
    如果您需要在 X# 运行时和外部应用程序(如 Vulcan 应用程序、VO 应用程序或外部数据库服务器,如 Advantage)之间同步状态,则可以使用此功能。
  • +
  • 我们添加了一个新的(内部)类型 __WinDate,用于在 VoStruct 或 Union 中存储日期值。该字段与 VO 存储在结构体和联合体内的 Julian 日期二进制兼容。
  • +
  • 我们在 RuntimeState 中添加了一个条目,编译器会在其中存储主程序当前的 /fox2 编译器设置。
  • +
  • 已添加运行时支持,支持通过分配单个值来填充 FoxPro 数组。
  • +
    + + Bug 修复 + +
  • 修正了 Descend() 函数中的一个问题(与 VO 不兼容)(#779) - 重要提示:如果在 dbf 索引表达式中使用 Descend(),则需要重键这些索引!
  • +
  • 返回 PSZ 值的后期绑定代码没有正确地将该值存储在 USUAL 内(#603)
  • +
  • 修正了缓存 IO 中可能导致低级文件 IO 问题的一个问题 (#724)
  • +
  • 在未打开表的区域调用 VODbAlias() 函数时,现在会返回 String.Empty,而不是 NULL。(#733)
  • +
  • 修正了 MExec() 函数的兼容性问题 (#737)
  • +
  • 在代码块中无法正确识别 M-> 前缀 (#738)
  • +
  • 显式 DATE -> DWORD 转换会返回不正确的 NULL_DATE 值。
  • +
  • 修正了后期绑定调用和 OUT 参数的问题 (#771)
  • +
  • 添加了一个新的 __WinDate 类型,用于在 VOSTRUCT 或 UNION 中存储 DATE 值。(#773)
  • +
  • 修正了 FoxPro 数组的几个问题
  • +
  • 为操作 __ArrayBase<T> 的函数删除了 T 上的 TypeConstraints
  • +
  • 修正了 Directory() 包含按短名匹配而不按长名匹配的文件的问题 (#800)
  • +
    + RDDs + +
  • 使用 DBFCDX 驱动程序创建新 DBF 时,不会再自动删除现有 CDX 文件 (#603)
  • +
  • 修复了在 DBFCDX 中更新备注内容的问题 (#782)
  • +
  • 修复了创建 DBFCDX 索引文件时出现的运行时异常,文件名较长 (#774)
  • +
  • 修正了 DBSeek() 在使用 OrderDescend() 时甚至无法找到已删除记录的问题。
  • +
  • 修复了 OrderCreate()  中 ADS RDD 中缺少调用 AdsClearCallbackFunction() 的问题 (#794)
  • +
  • 修正了 VODBOrdCreate 函数在 cOrder 参数包含空字符串时失效的问题 (#809)
  • +
    + 宏编译器 + +
  • 修正了预处理器中的一个问题
  • +
  • 添加了对使用 @ 操作符通过引用传递参数的支持
  • +
  • 在宏编译器中添加了对 M->、_MEMVAR-> 和 MEMVAR-> 前缀的支持
  • +
  • 当宏编译器发现 2 个或更多同名函数时,它现在会使用与编译器相同的优先级规则:
  • + +
  • 首先使用用户代码中的函数
  • +
  • "特定" 运行时(XSharp.VO、XSharp.XPP、XSharp.VFP、XSharp.Data)中的函数优先于 XSharp.RT 和 XSharp.Core 中的函数。
  • +
  • XSharp.RT 中的函数优先于 XSharp.Core 中的函数
  • +
    +
    + Visual Studio 集成 + 在本次生成中,我们开始使用 GitHub 上的 “Community toolkit for Visual Studio extensions”。该工具包包含针对 VS 扩展编写者代码的 “最佳实践”,就像我们一样。因此,现在有更多代码以异步方式运行,这将带来更好的性能。 + 我们还开始删除 32 位特定代码,这些代码在迁移到 VS 2022(Visual Studio 的 64 位版本,预计将于 2021 年 11 月发布)时会成为问题。 + 新特性 + +
  • 为编辑器添加了多项新功能
  • + +
  • 编辑器现在可以显示实体之间的分隔线。您可以在选项对话框中启用/禁用该功能(#280)
  • +
  • QuickInfo 工具提示中的关键词现在已着色 (#748)
  • +
  • 转到定义 “现在也适用于 ”外部 "类型。编辑器会生成一个临时文件,其中包含外部类型的类型信息。在选项对话框中,您还可以控制生成的代码是否包含注释(从外部 DLL 附带的 XML 文件中读取)。(#763)
  • +
  • 您可以通过 “工具/选项 ”菜单项(PUBLIC、EXPORT 或 NONE)控制 PUBLIC 可见性所使用的关键字。
  • +
  • 您可以通过 “工具/选项 ”菜单项(PRIVATE 或 HIDDEN)控制用于 PRIVATE 可见性的关键字。
  • +
    +
    + +
  • 现在,VS 内的各种代码生成器都遵循源代码编辑器的大写规则。
  • +
  • 现在, intellisense 数据库的视图可返回源代码和外部程序集中的唯一命名空间
  • +
  • 工具菜单中的 X# 特定菜单项已移至单独的子菜单中。
  • +
  • 为 WinForms 设计器添加了选项,以便在保存时生成 form.prg 和 form.designer.prg 文件的备份(.bak)文件 (#799)
  • +
    + Bug 修复 + +
  • 修复了编辑器中的几个问题:
  • + +
  • 我们对编辑器进行了多项改进以提高速度(#689、#701)
  • +
  • 修正了 FOREACH 循环中变量类型查找的一个问题 (#697)
  • +
  • 未显示从完成列表中选择的方法的参数提示(#706)
  • +
  • 当关键字后面没有空格时,关键字大小写同步不起作用 (#722)
  • +
  • 转到定义总是转到定义函数的文件的第 1 行/第 1 列 (#726)
  • +
  • 类中常量成员的代码自动完成 (#727)
  • +
  • 用于 DEFINES 的 QuickInfo(#730、#739)
  • +
  • 使用操作符“. ”完成 VOSTRUCT 成员 (#731)
  • +
  • 在这些情况下,ENUM 和 FUNC 关键字现在被识别为标识符,而不是大小写同步(#732)。
  • +
  • 修复了打开文件时的一个问题 (#742)
  • +
  • 修复了默认值 NULL、NULL_DATE 和 NULL_OBJECT 的参数提示显示 (#743)
  • +
  • 修复构造函数的参数提示错误 (#744)
  • +
  • 嵌套类并非总能被 intellisense 正确处理(#745)
  • +
  • 修正了使用 ARRAY OF <something> 声明的变量的类型查找问题 (#749)
  • +
  • 当缓冲区包含无效代码时,编辑器有时会 “冻结”(#751)
  • +
  • 不存在的命名空间会产生错误的完成列表(#760)
  • +
  • 修正了在某些情况下输入无效代码时出现的编辑器异常 (#791)
  • +
    +
    + +
  • Windows 窗体的代码生成器将制表符替换为空格。这一问题已得到修复。(#438)
  • +
  • 修复了表单设计器损坏包含 EXPORT ARRAY OF <type> 的代码的问题
  • +
  • 修复了表单设计器中的一个问题,即在编辑器中删除事件处理程序时,某些代码会被删除 (#812)
  • +
  • 修正了表单设计器将 EXPORT、INSTANCE 和 HIDDEN 关键字转换为 PUBLIC 和 PRIVATE 的问题 (#802)
  • +
    + VO-兼容编辑器 + +
  • 现在,所有兼容 VO 的编辑器都支持完整的撤消/重做功能。还为菜单编辑器添加了剪切/复制/粘贴功能
  • +
  • 修复了设计和测试模式下 VOWED 控件的若干视觉问题 (#741)
  • +
  • 修复了在 “属性 ”窗口有焦点时,Alt-Tab 键跳出编辑器时 VS 崩溃的问题 (#764)
  • +
  • 调整了 ComboBoxEx 控件,使其具有与 VO 中相同的固定高度。还允许以前的行为,即当用户手动将高度增加 50 像素以上时,将使用此高度(#750)
  • +
  • 为 “属性 ”窗口中菜单编辑器的 “Button Bmp” 属性添加位图缩略图
  • +
  • 已添加对在菜单编辑器中指定色带的支持。要使用的色带(位图)需要在菜单主项的属性中指定为文件名 (#714)
  • +
  • 修正了窗口编辑器中事件代码生成的一些问题(#441、#46)
  • +
    + + Changes in 2.8.3.15 (Cahors) + 编译器 + 新特性 + +
  • 现在,您可以在变量名或数字之间使用 .AND. 逻辑运算符和 .OR. 逻辑运算符,而无需前导或尾部空白 (a.AND.b)
  • +
  • FoxPro 方言中的 PRIVATE 声明不再允许初始化器。
  • +
  • 在 FoxPro 方言中添加了对 FoxPro NULL 日期({ / / }、{ - - } 和 { .. }))的支持
  • +
    + Bug 修复 + +
  • 修正了在 DIM 数组中使用 DEFINE 作为维数的问题 (#638)
  • +
  • 修正了 FoxPro PUBLIC ARRAY 命令的一个问题(ARRAY 关键字不再是强制性的)(#662)。
  • +
  • 修正了以 DEFAULT(Usual) 表达式作为函数/方法调用参数的问题 (#664)
  • +
  • 修正了用 LOCAL 声明声明变量并用 DIMENSION 命令标注尺寸的问题 (#683)
  • +
  • 修正了不同 X# 运行时程序集中同名重载的问题,该问题会导致 FRead() 出现问题(#686)
  • +
  • 修正了通过引用传递 PRIVATE 和 PUBLIC 内存变量的问题 (#691)
  • +
  • 修正了 PARAMETERS 语句的一个问题 (#691)
  • +
  • 修正了因 .AND. 和 .OR. 处理方式的更改而导致的实数问题 (#704)。
  • +
  • 修复了类声明中 DECLARE METHOD / ACCESS / ASSIGN 行的解析问题。
  • +
  • 修正了混合整数类型(如 int 和 word)的二进制运算符(+、-、*、/)的截断结果问题
  • +
    + 运行时 + Bug 修复 + +
  • 运行时状态中的 _shutdown 标志现在会在系统关闭时设置。
  • +
  • 修正了 FoxPro ALen() 函数的一个问题 (#650)
  • +
  • 在多个位置添加了默认值(#678)
  • +
  • 修正了由 RDD 打开的文件上的 FRead() 会进入无尽循环的问题 (#688)
  • +
  • 修正了文件处于 EOF 状态时 FieldGet() 的一个问题 (#698)
  • +
  • 修正了当范围为空且另一工作区或另一工作站添加了与范围匹配的记录时的范围问题 (#699)
  • +
  • 修正了 Skip(0) 之后的 BOF 设置问题 (#700)
  • +
    + 宏编译器 + 新特性 + +
  • 现在,您可以在变量名或数字之间使用 .AND. 运算符,而无需前导或尾部空白
  • +
  • 在 FoxPro 方言中添加了对 FoxPro NULL 日期({ / / }、{ - - } 和 { . . })的支持
  • +
  • 宏编译器不再重新格式化包含 .AND. 和 .OR. 的字符串 (#694)
  • +
  • 我们新增了一个试验性的更快脚本编译器。该脚本编译器只允许编译语句,而不允许编译函数、类等。
    这种新的脚本编译器比现有的脚本编译器快得多,使用的内存也少得多。
    要调用此脚本编译器,请使用新函数 ExecScriptFast(),其参数与 ExecScript() 相同。
    您可以编译多行脚本。编译器应能识别所有接收参数的语句,包括 PARAMETERS 和 LPARAMETERS。
    如果您在代码中使用脚本,我们很乐意听取您的反馈意见。
    示例代码应能正常工作:
  • +
    +
    FUNCTION Start() AS VOID
    LOCAL ctest AS STRING
    TRY
       cTest := "? 'Hello world'"
       ExecScriptFast(cTest)
       cTest :=String.Join(e"\n",<STRING>{;
           "PARAMETERS a,b,c",;
           "RETURN CallMe(a,b,c)"})
       ? ExecScriptFast(cTest,1,2,3)
       cTest :=String.Join(e"\n",<STRING>{;
           "LPARAMETERS a,b,c",;
           "RETURN CallMe(a,b,c)"})
       ? ExecScriptFast(cTest,1,2,3)

    CATCH e AS Exception
       ? e:ToString()
       END TRY

    wait
    RETURN


    FUNCTION CallMe(a,b,c) AS USUAL
       ? "在函数内部,接收参数",a,b,c
       RETURN a+b+c
    +
    请测试这一新功能,并告诉我们您的想法。
    + Visual Studio 集成 + 新特性 + +
  • 当光标位于实体之外时(例如文件开头的 USING 语句),“高亮显示单词 ”现在可以高亮显示整个文件中的单词。
  • +
    + Bug 修复 + +
  • 修正了在兼容 VO 的 Windows 编辑器工具箱中显示自定义控件名称的问题
  • +
  • 修正了从与 VO 兼容的 Windows 编辑器的 cavowed.inf 中加载设置时出现额外空格的问题
  • +
  • 修正了赋值语句后的完成列表不正确的问题 (#658)
  • +
  • 修正了编辑器中删除代码后出现的异常 (#674)
  • +
  • 修正了将文件附加到外壳窗口时 VS IDE 中的 “冻结 ”问题 (#676)
  • +
  • 修正了在使用 AllowDot 的 VO Dialect 中用圆点代替冒号时出现的问题 (#679)
  • +
  • 修正了在类内显示完成列表的问题 (#685)
  • +
  • 修复了编辑器中的一个性能问题 (#689)
  • +
  • 修正了在编辑器中显示函数重载的问题 (#692)
  • +
  • 修正了 intellisense  在 !、.NOT.或其他运算符之后出现的问题 (#693)
  • +
  • 修正了完成列表中显示不正确方法的问题 (#695)
  • +
    + 工具 + +
  • 修正了 VOXPorter 中有关资源和复制到资源子文件夹的问题
  • +
    + + Changes in 2.8.2.13 (Cahors) + 编译器 + +
  • 修正了扩展方法未标记为 STATIC 的问题 (#660)
  • +
  • 修正了 IIF() 表达式在返回 OBJECT 时被赋值为十进制的问题。
  • +
  • pragma 命令没有检查当前方言
  • +
  • 修正了预处理器中的一个异常
  • +
  • FoxPro LOCAL ARRAY 生成的不是 LOCAL 变量,而是 PRIVATE 变量。
  • +
  • XSharp.RT 中的函数如果在 XSharp.VO、XSharp.VFP 或 XSharp.RT 中被覆盖,将不再产生警告。不在 XSharp.RT 中的版本将优先使用
  • +
  • 在 FOREACH 循环中枚举 USUAL 变量时,现在会调用一个运行时函数,该函数会返回 USUAL 中的 ARRAY,否则会出错。
  • +
  • 启用 /vo7 时,现在支持从 OBJECT -> NUMERIC 的隐式转换。
  • +
    + 运行时 + +
  • 现在,在 FOREACH 循环中枚举 USUAL 变量将调用一个运行时函数,该函数将返回 USUAL 中的 ARRAY,否则将抛出错误 (#246)
  • +
  • 修正了一个问题,即创建索引时有一个 “val ”块和 0 条记录 (#619)
  • +
  • 与 FoxPro 相比,修正了与 ALen() 函数和数组处理不兼容的问题 (#642)
  • +
  • 我们更正了 FoxPro AIns() 函数中的一些问题 (#650)
  • +
  • 我们添加了 ShowFoxArray() 函数,当您在 FoxPro 数组上调用 ShowArray() 时,将自动调用该函数(#650)。
  • +
  • 已添加对 OClone() 的支持
  • +
  • _Quit() 函数现在会关闭所有数据库,然后杀死当前正在运行的进程 (#665)
  • +
  • 修正了 DbOrderInfo 的一个问题 (#666)
  • +
  • 修正了货币值的一元减运算符问题 (#670)
  • +
  • 修正了整数函数在接收到货币值时出现的问题(#671)
  • +
  • 我们新增了 MemCheckPtr() 的实现 (#677)
  • +
    + 宏编译器 + +
  • 修正了在使用 Assembly.Load() 加载新程序集后调用函数的问题
  • +
  • 已添加对通过引用传递变量的支持(尚未支持使用 Clipper 调用约定的函数)(#653)
  • +
    + VO SDK + +
  • 修正了 GUI 类中 GetObjectByHandle() 的一个问题(#677)
  • +
    + Visual Studio 集成 + +
  • 修复了 VS 内部 “生成” 页面上的一个异常 (#654)
  • +
  • 项目系统没有为 XML 文档生成写回正确的属性 (#654)
  • +
  • 头文件中的 intellisense 可能会崩溃(#657)
  • +
  • 我们在编辑器的成员组合框中添加了 #defines 和用户定义的命令(#command、#translate),作为全局类型的成员。现在,您还可以对使用 #define 定义的值执行转到定义。
  • +
  • 我们更正了枚举的成员完成问题 (#656)
  • +
  • 我们修复了 Windows 窗体编辑器中的一个问题,如果另一个 VS 扩展加载了旧版本的 Mono.Cecil (#661)
  • +
  • 启用项目选项 “允许点 ”时,代码自动完成不会显示实例成员(#679)
  • +
  • "header" 新项目模板的扩展名是 .VH。现已改为 .XH
  • +
  • 修复因 CAVOWED.INF 不正确而导致 VO 兼容窗口编辑器崩溃的问题
  • +
  • 方法或函数调用括号内的代码自动完成功能无法正常工作
  • +
  • 当没有更改文件时,提高了 Visual Studio 中的生成速度(#675)
  • +
    + 工具 + +
  • VO Xporter 在输出文件夹的 .xsproj 文件中生成了 2 行 (#672)
  • +
    + + + Changes in 2.8.1.12 (Cahors) + 编译器 + +
  • 修正了插值字符串的问题(#598、#622):
  • + +
  • 脚本编译器现在能正确设置运行时中当前活动方言的 AllowDot 编译器选项(Core 和 FoxPro:AllowDot = true)
  • +
  • 当使用 DOT(.) 作为实例方法分隔符进行编译时,插值字符串内部会使用“: ”字符作为格式字符串的前缀。
  • +
  • 使用 COLON (:) 作为实例方法分隔符进行编译时,冒号不能用于分隔表达式和插值字符串内的格式字符串。在这种情况下,我们现在支持在表达式和格式字符串之间使用双冒号(::)。例如
  • +
    +
    + LOCAL num as LONG
    num := 42
    ? i"num = {num::F2}" // 该数字为两位小数
    WAIT
    + +
  • 现在可以在 VOSTRUCT 和 UNION 中使用 DATE 字段 (#595)
  • +
  • 修正了 “UnconvertedConditionalOperator ” assertion 错误 (#616)
  • +
  • 当使用命名空间 “xsharp ”时,修正了编译器中的 assertion 错误 (#618)
  • +
  • 修正了 COM 程序集中定义的方法的 “failed to emit” 问题,这些方法带有默认参数和通过引用传递的参数 (#626)
  • +
  • 修正了一个处理默认参数和方法调用的问题 (#629)
  • +
  • 修正了 _SizeOf() 运算符无法计算 VOSTRUCT 正确大小的问题(#635)。
    请注意,_SizeOf() 只能在应用程序编译为 x86 或 x64 模式时在编译时计算。为 AnyCpu 编译时,我们将在运行时计算 _SizeOf()。
  • +
  • 修正了一个问题,即对于 USUAL 类型的变量,“IS Pattern” 并非总能正常工作 (#636)
  • +
    + 运行时 + +
  • 实现了 FoxPro Evl() 函数(#389)
  • +
  • 即使没有打开区域,DbCloseArea() 也会返回 TRUE。这与 VO 不兼容。现在我们将返回 FALSE。(#611)
  • +
  • 宏编译器无法在动态加载的程序集中找到函数 (#607)
  • +
  • 当 DBF 文件以 “只读 ”方式打开并创建索引时,由于 RDD 试图在 DBF 标头中设置 “production index ”标志,因此在关闭文件时会出现运行时错误。对于以 “只读 ”方式打开的文件,不再设置该标记 (#610)
  • +
  • 修正了 DbOrderInfo(DBOI_KEYCOUND) 中的一个异常(已捕获) (#613)
  • +
  • 修正了工作区调试窗口的一个问题 (#625)
  • +
  • 当索引不可用时,DbOrderInfo() 返回不正确的值 (#627)
  • +
  • 修正了 TransForm() 和符号参数的一个问题 (#628)
  • +
  • 修正了 StrZero 函数的一个问题 (#637)
  • +
  • 修复了 AELement() 函数的一个问题 (#639)
  • +
    + RDD 系统 + +
  • 当索引表达式包含 “nullable ”字段时,修正了使用 SqlExec() 函数创建的工作区/游标上的索引问题 (#630)
  • +
    + 宏编译器 + +
  • 宏编译器在查找稍后加载的程序集内的函数时遇到问题(#607)
  • +
    + Visual Studio 集成 + +
  • 修复从常规页面保存方言的问题
  • +
  • 快速信息和转到定义对同一类内的成员不起作用,如果这些成员的前缀不是 SELF:
  • +
  • 修复使用“? ”语法的允许 null 值的类型的代码完成问题 (#567)
  • +
  • 方法组合框未正确同步(#602)
  • +
  • Todo 注释并不总是能被正确解析,当它们是另一个词的一部分或不是该行的第一个词时,它们也会被包含在内。这一问题已得到解决。(#617)
  • +
  • 修复 “警告作为错误 ”无法从 “生成” 页面保存的问题 (#621)
  • +
  • 修复编辑器窗口分割后开始出现的问题(#641)
  • +
  • 从完成列表中选择 “分配 ”类型的成员后,编辑器错误地插入了一个“(”字符(#643)
  • +
  • 在实体(函数、方法)的声明行键入“(”会触发参数补全。这一问题已得到修复。(#643)
  • +
  • 构造函数调用时未显示参数提示(#645)
  • +
  • 完成列表错误地包括静态成员 (#646)
  • +
  • 外部类型的 QuickInfo 不包括参数的 “AS Type”(#647)
  • +
  • 修正了为尚未完全加载的项目解析器选项时出现的问题(#649)
  • +
  • 在编辑器中,局部变量并非总能以正确的类型被识别(#651)
  • +
    + 安装 + +
  • 安装程序将错误版本的 XSharp.CodeAnalysis.dll 添加到了全局程序集缓存中。这一问题已得到修复。
  • +
    + + Changes in 2.8.0.0 (Cahors) + 编译器 + 常规 + +
  • 我们已迁移到最新版本的 Roslyn 源代码。
  • +
  • 通过引用将类型化变量传递给具有 clipper 调用约定(未类型化参数)的函数/方法时,无法更新局部变量。这一问题已得到修复。
  • +
  • /vo7 编译器选项未启用时,在 VO 方言的程序中使用 @ 操作符可能会生成产生 “无法装箱 ”错误的代码。(#551)
  • +
  • 已优化 NULL_PSZ 和 NULL_SYMBOL 的生成代码 (#398)
  • +
  • 当使用 PSZ 类型的元素时,结构和 UNIONS 上生成的 VoStructAttribute 大小错误。这一问题已得到修复。
  • +
  • 修正了将 NULL 转换为 LOGIC 时的内部编译器错误
  • +
  • _SIZEOF() 操作符现在将为 VOSTRUCTS 和 UNIONS 生成一个常量。(#545)
  • +
  • 使用关键字作为字段名可能会导致问题。例如,FIELD->NEXT 就处理不当。现在编译器允许这样做了。当然,您也可以使用 @@ 前缀来告诉编译器,在特定情况下,您指的不是关键字,而是一个标识符。
  • +
    + +
  • 包含表达式列表的括号表达式无法正确编译。这一问题已得到修复。
    如果您想在一个 IIF() 表达式中包含多个表达式,就会出现这种情况。
     
      LOCAL l AS LOGIC
      LOCAL v AS STRING
      l := TRUE                
      v := "abcd"
      ? iif (l, (v := Upper(v), Left(v,3)), (v := Lower(v), Left(v,4)))              
    由于 Roslyn(C# 编译器)不允许在条件表达式中使用表达式列表,因此我们现在将括号表达式转换为对局部函数的函数调用。括号表达式中的表达式将成为新局部函数的主体,编译器将调用生成的局部函数。
  • +
  • 现在,如果在有同名成员的类中调用 Function,编译器会发出警告。例如
  • +
    + + CLASS Test
    METHOD Left(sValue as STRING, nLen as DWORD) AS STRING
      RETURN "Test"
    METHOD ToString() AS STRING
      RETURN Left("abc",2)   // 这会产生警告,说明调用的是函数 Left() 而不是方法 Left()。
                             // 如果要调用该方法,则必须在调用前加上 SELF:
    END CLASS
    + 新的语言特性 + +
  • 我们增加了对 LOCAL FUNCTIONLOCAL PROCEDURE 语句的支持。
    这些函数和过程会成为另一个函数、过程、方法等的语句列表的一部分。它们有以下限制:
  • + +
  • LOCAL FUNCTION 必须以 END FUNCTION 结束,LOCAL PROCEDURE 必须以  END PROCEDURE 结束。
  • +
  • 支持普通函数的全部 “签名”,包括参数、返回类型、类型参数和类型参数约束。
  • +
  • 它们不能有属性(它们不是编译到方法中,而是编译到一种特殊的 Lambda 表达式中)
  • +
  • local function 的唯一有效修饰符是 UNSAFE 和 ASYNC
  • +
  • 由于它们不能具有属性,我们也不支持无类型参数,因此所有参数都必须是类型参数
  • +
  • 如果需要一个参数数量可变的 local function,可以定义默认参数值或使用 PARAMS 数组
  • +
  • Local functions 可以访问周围代码中的局部变量。Roslyn 创建了一个特殊结构,用于存储 Local functions 与其周围代码共享的变量
  • +
    +
    + + +
  • 已添加对表达式体成员的支持。通过表达式体定义,您可以以非常简洁、易读的形式提供成员的实现。只要任何受支持成员(如方法或属性)的逻辑由单个表达式组成,您就可以使用表达式体定义。表达式体定义的一般语法如下:
    MEMBER => expression
    一个表达式体方法由一个单一表达式组成,该表达式返回一个值,其类型与方法的返回类型匹配,或者对于返回 void 的方法,执行某些操作。例如,重写 ToString 方法的类型通常包括一个单一表达式,该表达式返回当前对象的字符串表示形式。
    例如
  • +
    + CLASS MyClass
    METHOD ToString() AS STRING => "My Class"
    END CLASS

    这段代码的结果与以下代码完全相同

    CLASS MyClass
    METHOD ToString() AS STRING
      RETURN "My Class"
    END CLASS
    + 因此,可以说 => 操作符取代了 RETURN 关键字。 + + +
  • 我们添加了对 C# 的 NULL 合并操作符 (??) 以及 NULL 合并赋值操作符 (??=) 的支持。
    该操作符对 != null 进行检查。该运算符只适用于引用类型,不适用于 USUAL、DATE 等值类型和 INT 等内置类型。
  • +
    + FUNCTION Start() AS VOID
    LOCAL s := NULL AS STRING
    s := s ?? "abc"            // ?? 是 NULL 合并操作符
    s ??= "abc"               // 这与之前的结果相同,但更紧凑
    ? s
    RETURN
    // 因此,这将无法编译
    LOCAL i := 0 AS LONG
    i := i ?? 42      // 操作符“?? ”不能应用于 “int ”和 “int ”类型的操作数
    // 但这可以编译
    LOCAL i := NULL AS LONG?   // Nullable LONG
    i := i ?? 42      
    + +
  • 我们为带有 INIT 访问器的属性添加了支持。通过这些访问器,您可以为属性赋值,但只能在构造函数中进行。该属性只能在类/结构的构造函数之外读取。
  • +
  • 我们添加了一个新的编译器选项 /enforceself。使用该选项后,类内对实例方法的所有调用都必须以 SELF(或 SUPER)作为前缀。在 FoxPro 方言中,也支持此选项。请注意,某些生成的代码(如 Windows 窗体编辑器中的代码)并不使用 SELF:,应用此编译器选项可能会迫使您更改生成的代码,或者可能会迫使您在代码中添加 #pragma options(“enforceself”, disable) 以禁用该文件的选项。
  • +
  • 我们添加了一个新的编译器选项 /allowdot 。通过该选项,您可以控制是否允许使用 DOT(“.”)运算符访问实例成员。Core 和 FoxPro 方言的默认值是 /allowdot+。其他方言的默认值为 /allowdot-。也可以通过 #pragma 来使用: #pragma options(“allowdot”, enable)
  • +
  • 源代码中的 XML 注释不再需要完全限定的 cref 名称(#467)
  • +
    + 预处理器 + +
  • 预处理器现在会自动声明一个名称为 <udc> 的匹配标记。该匹配标记将包含预处理器与 UDC 匹配的所有标记。例如,它可以用来将原始源代码作为字符串添加到结果中:
    #command INSERT INTO <*dbfAndFields*> FROM MEMVAR => __FoxSqlInsertMemVar(<"udc">)
  • +
  • 通配符标记(如上一条中的 dbfAndFields 标记)现在也可以出现在 UDC 中间。它们将继续匹配,直到找到通配符标记(上例中为 FROM 关键字)后的第一个标记。
  • +
  • 标准头文件(来自 XSharp\Include 文件夹)现在也作为资源包含在编译器中。当文件丢失时,这些文件将从资源中加载。
  • +
  • 预处理器没有为 __FOX2__ 生成宏。这一问题已得到解决(但现已过时,请参见 FoxPro 方言)
  • +
  • 当通配符标记与 stringify 结果标记一起包含时,这些标记之间的空白会正确地包含在 UDC 的输出中。
  • +
    + FoxPro 方言 + +
  • 上一个版本中添加的允许将括号作为 FoxPro 方言数组分隔符的功能有太多副作用。我们暂时删除了这一功能。您必须再次使用带方括号的数组参数。
  • +
    + +
  • 不再需要 /fox2 编译器选项(编译器会忽略该选项)。
    编译器现在会检查运行时函数是否被标记为 NeedsAccessToLocalsAttribute,(XSharp.Internal 名称空间中定义的 NeedsAccessToLocalsAttribute)。
    如果编译器发现一个函数标有此属性,如 Type() 函数或 SQLExec() 函数,那么它将在函数调用前后添加一些代码,以允许这些函数访问堆栈上的局部(变量)。只有启用了 /memvar 编译器选项,并且仅在 FoxPro 方言中才会发生这种情况。
    NeedsAccessToLocalsAttribute 有一个强制参数,用于指示函数是要写入局部(变量)还是只读取局部(变量)。
    当函数需要写入局部(变量)时,编译器会在调用后生成额外的代码,以确保在需要时更新局部(变量)。
  • +
    + +
  • 我们为 FoxPro 嵌入式 SQL 语句添加了一个标准头文件。该头文件应能解析嵌入式 SQL,但会输出尚未支持嵌入式 SQL 的警告。
  • +
  • 我们添加了对 FoxPro 数组的支持,在运行时为数组类型添加了一个特殊的子类型,并支持 DIMENSION 和 (Re)DIMENSION 以及通过分配单个值来填充数组。(#523)
  • +
    + 运行时 + 常规 + +
  • 修正了 FSeek() 和 FSeek3() 返回值的一个问题
  • +
  • AsHexString() 和 AsString() 对 PTR 值的显示结果与 Visual Objects 不一致。
  • +
  • 修复了 DBFCDX RDD 的 SetScope() 在前一个作用域为空时的问题 (#578)
  • +
  • 调整了 Secs() 函数,使其更兼容 Visual Objects。
  • +
  • Array 和 Array Of 的枚举器现在会返回内部数据克隆的枚举器,以防止在代码中修改数组时出现运行时错误。
  • +
  • 现在,各种 Xbase 类型(DATE、FLOAT、CURRENCY、BINARY、ARRAY、USUAL 等)都标有 [Serializable] 属性并实现了 ISerializable。它们都能与 BinaryFormatter() 类正常工作,因为该类不仅能存储值,还能存储 stream 中的值。大多数类型还能与 JsonSerializer 一起使用,但并非所有值都能通过 Json 序列化器正确反序列化。(#529)
  • +
  • Date 类型上的 CompareTo() 操作符不能正确排序数值,因为它对结构中元素的内存布局做出了错误的假设。这一问题已得到修复。
  • +
  • 我们对 DbUseArea() 和 DbSkip() 等函数的错误处理进行了一些更改。在发生错误(例如文件无法打开)时,这些函数的处理方式并不总是与 Visual Objects 相同。现在,我们还添加了一个与 Visual Objects 中默认错误处理程序类似的错误处理程序,该处理程序的对话框包含 “放弃”、“重试 ”和 “忽略 ”按钮。只有当错误对象的属性 “CanRetry ”设置为 “TRUE ”时,重试按钮才会启用(#587, #594)
  • +
  • 修正了 Val() 与小数位数超过一位的字符串不兼容的问题 (#572)
  • +
  • 修正了 “反向” 比较日期的问题 (#543)
  • +
  • 我们添加了几个函数,它们可以弹出对话框,显示当前打开的工作区、设置、全局变量以及私有和公共内存变量。请参见 DbgShowGlobals(),  DbgShowWorkareas(), DbgShowMemvars() 和 DbgShowSettings()
  • +
    + RDD 系统 + +
  • 当工作区只读打开时,DbCommit 和 DbCommitAll 会失败。该问题已得到修复。(#554)
  • +
  • 当 FoxPro CDX 文件有多个标志,而其中一个标志的索引表达式无效时(例如,Visual Objects 接受缺失的结尾括号),RDD 系统根本无法打开 CDX。现在我们打开 CDX,但索引表达式已损坏的标记除外。(#542)
  • +
  • 已添加对 Advantage GUID 和 Int64 列的支持。GUID 以字符串形式返回,INT64 以 INT64 形式返回。我们还添加了 ACE 头文件中一些缺失的 DEFINE 值。
  • +
  • 修复了 DBFNTX 驱动程序中负锁定偏移不正确的问题。
  • +
  • 我们修复了几个与索引 “信息”(KeyCount、KeyNo)等有关的 “奇特 ”问题,这些问题涉及带作用域、降序索引等的索引(#423、#578、#579、#580、#582、#583、#593、#599)。
  • +
  • 修正了从不同线程和不同工作站打开 MEMO 文件(Fpt 和 DBT)时出现的问题 (#577)
  • +
  • 我们更正了一个锁定和损坏问题,当两个站频繁写入同一个 CDX 文件时,可能会出现该问题。(#575, #592)
  • +
  • 提高锁定失败时的锁定速度。(#576)
  • +
  • SetOrder(0) 对 ADS 表不起作用 (#570)
  • +
  • 更改了几个 ADS 方法原型,使其具有正确的 IN / OUT 修饰符 (#568)
  • +
    + 宏编译器 + +
  • 修正了 FoxPro 方言中以 VariableName.PropertyName 形式为表达式赋值的问题
  • +
  • X# 宏编译器允许在宏中引用 GLOBAL 和 DEFINE 值。这使得编译器与 VO 不兼容,当索引与 GLOBAL 或 DEFINE 同名的字段时会出现问题。宏编译器已不再支持引用 GLOBAL 或 DEFINE。(#554)
  • +
  • 宏编译器在变量名被括号包围时遇到了问题。编译器将其视为类型转换。现已修复。(#584)
  • +
    + Visual Objects SDK + +
  • 为 Win32APILibrary 程序集添加了一些缺失的定义,如 DUPLICATE_SAME_ACCESS。
  • +
  • DbServer:Filter 有时会返回 NIL 而不是空字符串 (#558)
  • +
    + + VO 方言 + +
  • 我们新增了对 SysObject 的支持 (#596)
  • +
    + Xbase++ 方言 + +
  • 修正了 2.7 中引入的 XPP Collation 表问题
  • +
    + FoxPro 方言 + +
  • /fox2 编译器选项添加了 NeedsAccessToLocalsAttribute 属性
  • +
  • 调整了向 Type() 和 SqlExec() 等函数公开 LOCAL 变量值的代码。
  • +
  • 有几个函数已经标记了新属性,这样它们就能 “看到” 局部变量。
  • +
  • 添加了带单个参数的 TransForm() 重载。
  • +
  • 修正了 SQLExec() 函数和包含“:”(冒号)字符的 sql 语句的一个问题。
  • +
  • 我们添加了 Bit..() 函数(感谢 Antonio)
  • +
  • 我们添加了 CapsLock()、NumLock() 和 InsMde(感谢 Karl-Heinz)。
  • +
  • 我们改进了 FoxPro 数组代码 (#523)
  • +
    + + 运行时脚本 + 此版本通过 ExecScript() 函数引入了运行时脚本功能。此时,如果使用运行时脚本,则必须包含完整宏编译器(XSharp.MacroCompiler.Full.dll)及其支持动态链接库(XSharp.Scripting.dll , XSharp.CodeAnalysis.dll ), + 我们正在开发一个轻量级的运行时脚本版本,它将包含在下一个版本中。 + 更多信息参见 运行时脚本 + Visual Studio 集成 + 此版本中的 Visual Studio 集成不再支持 Visual Studio 2015。仅支持 Visual Studio 2017 和 2019。 + 常规 + +
  • 在子文件夹中生成的新代码模板的命名空间名称以 “global:: ”开头。这一问题已得到修复。
  • +
  • 已添加对 LOCAL FUNCTION 和 LOCAL PROCEDURE 的支持。
  • +
  • 从文件夹中的类模板添加项目时,命名空间前缀为 “global::”。这一问题已得到修复。
  • +
  • 当磁盘上的 intellisense 数据库文件损坏时,就会发生错误。现在该文件已被删除,所有代码信息都已重新收集。
  • +
  • 工具/选项 “对话框中的 ”编辑器 “选项现在标记为 ”X#“,而不再是 ”XSharp"。
  • +
  • 我们在 “工具/选项 ”下添加了一个窗口,您可以在这里为我们的 VO 兼容编辑器设置几个值,如 grid 大小、粘贴偏移等。请在工具选项对话框中查找 X#。
  • +
  • 我们在编辑器的格式选项中添加了两个新选项:“修剪尾部空白 ”和 “插入最后换行符”。
  • +
  • 加载 MsTest 项目并不总是有效。打开项目时将调整 MsTest 项目的项目文件。(#563)
  • +
  • 我们新增了对 t4 模板(扩展名为 .tt 的文本文件,其中包含用于生成代码的脚本)的支持
  • +
  • 添加现有 .resx 文件不会使其成为父 form.prg 的子节点 (#197)
  • +
  • 项目属性对话框已完全重新设计。
  • +
    + + 源代码编辑器 + +
  • 较长的 “QuickInfo ”工具提示现在会多行显示,以便于阅读。
  • +
  • 重构了 “类型查找 ”代码,以提高源代码编辑器的运行速度
  • +
  • 对于使用 VAR 关键字声明的变量,如果存在嵌套的大括号和/或小括号,源代码编辑器中的成员补全并不总是有效。(#541, #560)
  • +
  • 修正了项目引用的成员完成问题 (#540)
  • +
  • 修正了在取消注释行块时出现的异常,如果行块中有一行是空行。
  • +
  • 我们增加了对 .editorconfig 文件的支持。请参阅文档文件中有关 .editorconfig files 的章节。
  • +
  • 折叠最后一个实体 om 后编辑器无法正常工作(#564)
  • +
  • 修正了续行注释后语法高亮显示的问题(#556)
  • +
  • 为委托添加了参数补全(#581)
  • +
  • 修正了 QuickInfo 工具提示中某些西里尔字符的问题(#504)
  • +
    + + 代码生成器 + +
  • 字符字面现在总是以 “c ”为前缀,值 > 127 则以十六进制符号书写,以确保它们在所有代码页中都能正常工作。
  • +
    + Windows 窗体设计器 + +
  • 我们修复了 DevExpress 控件的几个问题。
  • +
  • 修正了与 X# 关键字同名的控件的问题 (#566)
  • +
  • 修正了具有 DWORD 类型属性的控件的一个问题 (#588)
  • +
  • 修正了字符字面代码生成中的一个问题 (#550)
  • +
  • .designer.prg 不再需要有 “INHERIT FROM ”子句。(#533)
  • +
    + 对象浏览器 + +
  • 当您首先执行搜索时,转到定义不起作用 (#565)
  • +
    + VO 兼容窗体设计器 + +
  • 在 WED 中添加了支持,可正确直观地显示未定义预期控件类继承的自定义控件
  • +
  • 修正了 cavowed.inf 中无法识别非数据感知自定义控件的问题
  • +
  • 已添加对克隆 Windows 的支持(#508)
  • +
  • 修正了复选框的显示问题 (#573)
  • +
  • 修正了代码生成中的一个问题 (#553)
  • +
  • 在 “工具/选项 ”中有一个菜单选项,可设置多项设置(#279,#440)
  • +
    + 调试器 + +
  • 调试器现在完全支持 64 位调试
  • +
  • 已添加对 CURRENCY 和 BINARY 新类型名称的支持
  • +
    + 模板 + +
  • 我们对多个 VS 项目模板和项目模板进行了调整 (#589)
  • +
  • 我们新增了 X# t4 模板(.tt 文件)
  • +
    + + Changes in 2.7.0.0 (Cahors) + 编译器 + 常规 + +
  • 修正了 Nullable 类型的一个问题,这些类型在赋值时缺少显式转换
  • +
    + +
  • 修正了在类层次结构中调用父类构造器时跳过父类层次而调用祖类构造器的问题。
  • +
    + +
  • /usenativeversion 命令行选项未检查 +/- 开关。现已修复。
  • +
  • 修正了在文件名中包含嵌入式 DOT 的源文件(my.file.prg)中 PCall() 和 PCallNative() 的一个问题
  • +
  • 我们在 XSharp\Include 文件中添加了一个新的头文件,它可以帮助添加自定义用户定义命令或定义,你可以将其包含在每个项目中。我们的 XSharpDefs.xh 将自动包含该文件(CustomDefs.xh)。
    该文件的默认内容只是一些注释。
    安装程序不会覆盖该文件夹中的文件,卸载产品时也不会删除该文件。
    您可以选择在项目文件下的包含文件夹中自定义该文件。不过,您也可以将同名文件添加到项目文件夹或项目/解决方案的通用包含文件夹中。最后一个位置可以让您将头文件与其他源代码一起置于源代码控制之下。
  • +
    + FoxPro 方言 + +
  • 编译器现在允许在 LOCAL、PRIVATE 和 PUBLIC 声明中使用 M Dot (M.) 前缀。(LOCAL m.Name)
  • +
  • 在 Foxpro 对话框中,编译器现在也接受小括号作为数组分隔符 (aMyArray(1,2))
  • +
  • 编译器现在允许(或忽略)PRIVATE、PUBLIC、PARAMETERS 和 LPARAMETERS 声明中的 AS Type OF Classlib 子句。
  • +
    + +
  • 支持 TRY CATCH 的 CATCH 子句中的 TO 关键字
  • +
  • 已添加对 ASSERT 命令和 SET ASSERT 的支持
  • +
    + +
  • 已添加对 SET CONSOLE 和 SET ALTERNATE 的支持
  • +
  • 使用单个等号运算符对宏进行赋值时不起作用(&myVar = 42)。这一问题已得到修复。
  • +
  • 已添加对零长度二进制字面量 (0h) 的支持
  • +
    + 生成系统 + +
  • 添加了一个项目属性,用于控制本地资源编译器是否抑制 RC4005 错误(重复定义)。
  • +
    + 运行时 + 常规 + +
  • IsMethod() 现在对重载方法返回 TRUE。
  • +
  • AbsFloat() “丢失” 了小数位数的设置。现已修复。
  • +
  • Binary:ToString() 在二进制值小于 15 时使用了个位数。现已修复。
  • +
  • 添加了隐式运算符,可将常量赋值给二进制。
  • +
  • 添加了将包含整数的 USUAL 值隐式转换为 Intptr 的功能。
  • +
  • 一些低级函数现在会在操作失败时设置操作系统错误编号 FERROR_EOF,就像在 VO 中一样。
  • +
  • 后期绑定代码中的异常并不总是显示错误发生的正确位置。这一问题已得到修复。
  • +
  • 我们增加了对 DataSessions 的支持。运行时中打开的工作区/cursor列表现在称为 “DataSession”(旧名称 “工作区 ”仍然可用)。
    您可以拥有多个 datasessions。您还可以使用 RuntimeState 类上的一个新方法 SetDataSession 来切换 RuntimeState 中的 “活动” datasessions。
    FoxPro 数据库在自己的 datasession 中打开。
    通过添加观察表达式,可以在调试器中检查打开的 DataSessions: XSharp.RDD.DataSession.Sessions
    每个 DataSession 都与一个线程相关联。当线程停止或中止时,DataSession 将被关闭,同时也会关闭其所有表。
    程序关闭时,所有 DataSessions 都会关闭,包括它们的表。这是通过 AppDomain:ProcessExit 事件处理程序完成的。
  • +
  • 在独占模式下打开文件的低级文件 IO 函数(包括 RDD 系统)现在使用 “缓冲 IO”。这将提高性能。
  • +
  • 删除了 Stream 和 MemoryStream 相互转换的函数(未文档化)。取而代之的是上一条中的缓冲区 I/O。
  • +
  • 我们为 FoxPro CursorProperties、DatabaseProperties 和 SQLProperties 添加了 System.Enum 类型。
  • +
  • 我们添加了一个 DatabasePropertyCollection 类型。该类型用于向字段添加 “附加 ”属性,如 FoxPro 表的 DBF 字段。.
  • +
    + 终端 API + +
  • 我们新增了对备用文件的支持。SET ALTERNATE TO SomeFile.txt。还可设置 ALTERNATE ONSET ALTERNATE OFF
  • +
  • ? 命令 现在尊重 Set Console 和 Set Alternate 的会话。
  • +
  • 我们新增了对 SET COLOR 命令的支持。只使用设置中的第一个颜色,闪烁属性将被忽略并解释为 “高亮”。例如 SET COLOR TO w+/b
  • +
  • 我们增加了一个 CLEAR SCREEN 命令
  • +
    + FoxPro 方言 + +
  • 添加了 Assert 对话框
  • +
  • 已添加对 DBC 文件的支持。这包括 SET DATABASE to 命令、DbGetProp() 以及读取作为数据库一部分的文件的属性,而无需首先显式打开数据库。目前,DbSetProp() 还不能执行任何操作。此外,DbAlias() 等类似函数也已实现。
  • +
  • 运行时现在可以使用 DataSession 对象。DBC 文件和每个线程中的文件一样,都在各自的 DataSession 中打开。每个 DataSession 都有一个已打开表的列表,以及别名和游标/工作区编号的唯一列表。
  • +
  • 现在,SqlExec() 返回的游标中的 “自增”(AutoIncrement)列的编号方法是从 -1 开始,每增加一行就减去 1。
  • +
    + +
  • FoxPro 方言所需的若干设置已添加到 Set Enum.
  • +
    + 宏编译器 + +
  • 到目前为止,宏编译器生成的运行时代码块都是接收对象数组并返回对象返回值。运行时中有一个类对此进行了封装,并负责参数的 usual->object 转换以及返回值的 object->usual 转换。当宏返回 NIL 值时就会出现问题,因为该值会被转换为 NULL_OBJECT。
    之所以使用 OBJECT API,是因为宏编译器需要在 Core 方言(RDD 系统)中使用,而该方言不支持 USUAL 类型。
    现在,我们在 XSharp.RT 程序集中添加了一个新的 IMacroCompilerUsual 接口,允许将字符串编译成支持 USUAL 参数和 USUAL 返回值的代码块。宏编译器现在同时支持该接口和 “旧 ”接口。因此,在编译宏时,您可能会看到(非常小的)性能改进。
  • +
  • 不支持在宏内调用 Altd() 和 _GetInst()。现已修复。
  • +
  • 当您在自己的代码中重载内置函数时,宏编译器会报错。现在,我们已在运行时中实施了默认的 MacroCompilerResolveAmbiguousMatch 委托,该委托会优先使用您代码中定义的函数,而不是我们代码中的函数。
  • +
  • 在选择方法或函数的两个重载时,宏编译器现在会选择带 USUAL 参数的方法,而不是不带 USUAL 参数的方法。
  • +
  • 修正了调用带有引用参数或 out 参数的函数/方法时出现的问题
  • +
  • 在宏编译器中添加了对 CURRENCY 和 BINARY 类型的支持。
  • +
    + RDD 系统 + +
  • 独占 DBF 访问现在以 “缓冲” 模式运行,速度应该会快很多
  • +
  • 在内部,RDD 现在与 Stream 对象一起工作,这样速度会更快一些。
  • +
  • 修正了更新索引中存在大量重复键值的键时出现的问题。
  • +
  • 删除了几个代码页中重复的 Foxpro “mahcine” collations,因为它们都是一样的。
  • +
  • 对于字段名大于 10 个字符的 VFP 兼容 DBF 文件,现在可以使用短字段名(10 个字符)或全字段名来检索值。
  • +
  • DBFVFP 驱动程序现在使用运行时内置的 DBC 支持来读取 DBF 文件的 “扩展” 属性。这些属性包括更长的字段名和标题等。当 DBFVFP 表被用作 DbDataSource 或 DbDataTable 的数据源,并且该数据源被分配给 Grid 时,Grid 中的列标题应显示来自 DBC 的标题。
  • +
  • 现在,与 VO 和 Vulcan 一样,带有空代码页字节的 DBF 文件将以 DOS - US 格式打开。
  • +
  • 当 DBFCDX/DBFVFP 区域是 SetRelation 中的子区域,而之前的父区域值导致结果集为 “空 ”时,GoTop()、GoBottom() 和其他操作会失败。
  • +
  • 我们在 RDD 程序集中添加了 ADS 管理 API 的结构和功能。
  • +
    + Visual Studio 集成 + +
  • 在 VS IDE 中创建新的 VO 兼容 UI 表单时,现在可以克隆现有表单。
  • +
  • 修正了 VO 兼容表单编辑器中自定义控件的一些问题。
  • +
  • 修正了 Windows 窗体编辑器中 DevExpress 控件代码分析和代码生成的几个问题
  • +
  • 带有 “flavored” 项目(如 MsTest 项目)的解决方案并非总能正确打开。可能会出现异常。
  • +
  • 我们在 workarea 类中添加了一个(internal)属性 FieldValues(),可以在调试器中查看当前记录的字段名及其值。要在调试器中查看当前工作区,必须添加观察表达式: XSharp.RuntimeState.DataSession.CurrentWorkarea
  • +
  • 已添加项目属性,用于设置新标志以抑制资源编译器出现 RC4005(重复定义)错误。
  • +
    + + Changes in 2.6.1.0 (Cahors) + 这是一个错误修复版本,修复了 2.6.0.0 中发现的一些问题 + 编译器 + +
  • 修正了通过引用将类型化变量传递给后期绑定代码和未类型化构造函数的问题
  • +
  • 修正了代码中包含逻辑的定义被转换为字节时的内部编译器错误
      BYTE(_CAST, LOGICDEFINE).
    当然,这种代码在任何时候都应该避免,但遗憾的是,即使是 VO SDK 也充斥着这样的代码。
    例如,上例应写成 IIF(LOGICDEFINE,1,0)。编译器会发现该定义是常量,并用 1 或 0 替换该代码。
  • +
  • 编译器无法将 $.50 识别为有效的货币字面量(因为缺少 0)。现在可以接受了。
  • +
    + 运行时 + +
  • 更新了运行时中处理后期绑定调用的代码,以改进对引用参数的处理
  • +
  • 修复了访问 OleAutoObject 类中 fInit、dwFuncs 和 dwVars 等属性时,后期绑定代码中的一个问题
  • +
  • 为 “Usual” 类型添加了操作符 TRUE 和操作符 FALSE
  • +
  • 使用 NULL_STRING 调用 Val() 可能会导致异常。该问题已得到修复。
  • +
  • DbDataTable() 和 DbDataSource() 返回的字符串属性现在可使用字符串类的 TrimEnd() 方法进行修剪。
  • +
  • 添加了 DbTableSave() 函数,用于将 DbDataTable 中的更改保存到当前工作区。
  • +
    + Visual Studio 集成 + +
  • 打开和升级 Scc 下的项目文件有时会导致问题。现已修复
  • +
  • 修正了 2.6.0.0 中引入的导致任务列表不再更新的问题。
  • +
  • 打开引用磁盘上不存在的 X# 项目的解决方案可能会导致异常。该问题已得到修复。
  • +
  • 打开不属于解决方案的 X# 项目文件也可能导致异常。这一问题已得到解决。我们假定该项目是解决方案文件的一部分,该文件与项目位于同一文件夹中,且名称相同(但扩展名不同)。
  • +
  • 项目系统不再为更新的项目制作备份文件。我们假定使用者都在自行备份或使用某种 SCC 系统。
  • +
  • 修正了导致 VS 任务列表无法用于 X# 项目的回归问题。
  • +
    + + Changes in 2.6.0.0 (Cahors) + 请注意,此版本中有一些破坏性更改。 + 因此,运行时组件的 Assembly 版本号已更改,您需要重新编译所有代码,并需要第三方组件的新版本! + 编译器 + +
  • 编译器忽略了 (USUAL) 大小写。现已修复。
  • +
  • 当编译器检测到 TRY ...ENDTRY(不含 CATCH 和 FINALLY)时,它会自动添加一个 CATCH 类,以静默方式捕获所有异常。以前就有这种情况,但现在出现这种情况时,我们会生成警告 XS9101 。
  • +
  • 在调用后期绑定的方法时,通过带 @ 符号的引用传递参数无法正常工作。这一问题已得到修复。
  • +
  • 编译器选项 vo15 和编译器选项 vo16 现在也可以用 #pragma 进行设置了。
  • +
  • 启用 /vo16(自动生成 Clipper 调用约定构造函数)后,编译器也会向标有 [COMImport] 属性的类添加构造函数。这一问题已得到修复。
  • +
  • 货币字面量 ($12.34) 未编译为货币类型,而是存储为 System.Double。这一问题已得到解决。
  • +
  • 修正了在版本号指定为 [assembly: AssemblyVersion (“1.0.*”)] 或 [assembly: AssemblyVersion (“1.0.0.*”)] 时自动生成版本号的问题。
    如果使用 /deterministic 编译器选项进行编译,则会出现错误信息 XS8357 。
  • +
  • 修正了向带有参数数组的构造函数传递单个 USUAL 参数时出现的问题。
  • +
  • 修正了在类树中调用重载方法时出现的一个问题,在类树的某一层中,参数为一种类型,而在另一层中,方法名称相同,但参数为另一种类型,并且存在从一种类型到另一种类型的隐式类型转换(如 Date 和 Datetime 之间,或 String 和 Symbol 之间)。现在,编译器首先会查看是否存在类型完全相同的重载,如果没有,则会查找参数可以通过隐式转换传递的重载。
  • +
  • 现在可以使用 __CastClass()伪函数将一个常量装箱一个对象,或将一个常量从一个对象中拆箱。
    __CastClass(USUAL,<objectValue>) 拆箱对象内部的 USUAL
    __CastClass(OBJECT, <usualValue>) 将装箱 usual 到一个对象
  • +
  • <usualValue> IS SomeType VAR <newVariableOfTypeSomeType> 子句在将 Usual 装箱为 Object 并将其分配给新变量之前,而不是从 usual 中提取对象。这个问题已经修复。
  • +
  • 当赋值操作符为单个等号字符时,后期绑定赋值(如 obj.&prop = “Jack”)会失败。这一问题已得到修复。
  • +
  • 当 SomeArea 未打开时,SomeArea->(SomeExpression()) 等别名表达式会在错误的源代码行上返回错误。该问题已得到修复。
  • +
  • 我们添加了对二进制类型和二进制字面量的支持。请参阅文档中有关 binaries 和 binary 字面量 的主题。
  • +
  • 像下面的表达式
    LOCAL dwDim := 512 IS DWORD
    被解析为
    LOCAL dwDim := (512 IS DWORD) AS USUAL
    因此,dwDim 包含一个具有逻辑值的 USUAL。
    该问题已得到修复,现在这段代码会出现 DWORD 变量不能用 IS 关键字声明的错误。
    GLOBAL 变量和 Class 变量也会出现这种情况。
  • +
  • 我们添加了一个 MatchLike 预处理器标记,以匹配包含通配符的表达式,例如 UDC 中的表达式
    SAVE ALL LIKE a*,*name TO SomeFileName.
    用于 MatchLike 的标记是 <%name%>
  • +
  • 在 TRY ... CATCH 语句中添加了对模式匹配(WHEN 子句)的支持,例如下面的示例。WHEN 关键字是位置性的,因此也可用作变量名,如示例中的变量名。
  • +
    + FUNCTION Test AS VOID
      local when := 42 as long
      TRY
         THROW Exception{"FooBar"}
      CATCH e as Exception WHEN e:Message == "Foo"
         ? "Foo", when, e:Message
      CATCH e as Exception WHEN e:Message == "Bar"
         ? "Bar", when, e:Message
      CATCH WHEN when == 42
         ? "No Foo and No Bar", when
         
      END TRY                
      RETURN
    + +
  • 已添加对 SWITCH 语句的模式匹配和筛选器的支持。我们既支持 “标识符 AS 类型 ”子句,也支持 “WHEN 表达式 ”过滤子句,如下例所示
  • +
    +   VAR foo := 42
      VAR iValues := <LONG>{1,2,3,4,5}
      FOREACH VAR i IN iValues
         SWITCH i
         CASE 1                        // 这种模式现在被称为 "恒定模式"
            ? "One"
         CASE 2 WHEN foo == 42         // 恒定模式过滤器
            ? "Two and Foo == 42"
         CASE 2
            ? "Two"
         CASE 3
            ? "Three"
         CASE 4
            ? "Four"
         OTHERWISE
            ? "Other", i
         END SWITCH
    +   VAR oValues := <OBJECT>{1,2.1,"abc", "def", TRUE, FALSE, 1.1m}
      FOREACH VAR o in oValues
         SWITCH o
         CASE i AS LONG         // 模式匹配
            ? "Long", i
         CASE r8 AS REAL8   // 模式匹配
            ? "Real8", r8
         CASE s AS STRING  WHEN s == "abc" // 带有过滤器的模式匹配
            ? "String abc", s
         CASE s AS STRING     // 模式匹配
            ? "String other", s
         CASE l AS LOGIC   WHEN l == TRUE   // 带有过滤器的模式匹配
            ? "Logic", l
         OTHERWISE
            ? o:GetType():FullName, o
         END SWITCH
      NEXT
    + +
  • 请注意,这些模式和过滤器的性能与普通的 IF 语句或 DO CASE 语句无异。
    所不同的是,编译器会检查 CASE 表达式是否重复,这样就不容易出错。
  • +
  • 我们增加了对 IN 参数修饰符的支持。它声明了一个 REF READONLY 参数。在向方法或函数传递大型结构时,可以考虑使用该参数。编译器不会传递整个结构,而只会传递结构的地址,即 4 字节或 8 字节,具体取决于运行的是 32 位还是 64 位。
    我们计划在 X# 运行时将其用于接受 USUAL 参数的函数,这将为您带来微小的性能优势(在 32 位模式下,Usual 变量为 16 字节,在 64 位模式下运行时为 20 字节)。
  • +
    + 运行时 + +
  • 延迟绑定代码中的错误信息并不总是显示导致异常的错误。我们现在检索 “最内部 ”异常,因此信息会显示抛出的第一个异常。
  • +
  • 我们添加了 Set.Safety 和 Set.Compatible 的运行时状态设置,以及 SetCompatible 和 SetSafety 函数。
  • +
    + +
  • 用于为各种 Db..()函数保存和恢复工作区的 UDC 不正确,导致在函数调用后选择了错误的区域。这一问题已得到修复。
  • +
    + +
  • 添加了 VFP MkDir() 函数。
  • +
  • 修正了当一个类型的子类只实现了 Getter 或 Setter 而父类同时实现了两者时,在后期绑定的 IVarGet() / IVarPut() 中出现的问题。
  • +
    + +
  • 我们添加了 IDynamicProperties 接口,并在 XPP DataObject、VFP Empty 和 VO OleAutoObject 类中添加了该接口的实现。该接口用于优化对这些类中属性的后期绑定访问。
  • +
  • OleAutoObject.NoMethod 中的异常没有 “原样 ”转发,而是作为参数异常转发。
  • +
    + +
  • 为了与 FoxPro 兼容,Select() 函数现在在 FoxPro 方言中的行为有所不同(当传递的别名不存在时不会出现异常)
  • +
  • 当从一个异常创建一个 Error 对象时,最内层的异常将被用于获取错误信息。
  • +
  • Default() 函数的大小写已更改。
  • +
  • 我们新增了 XSharp.__Binary 类型。更多信息,请参见上面的编译器主题。
  • +
  • 我们在 dbcmd.xh 中添加了 CLOSE ALL UDC,作为 CLOSE DATABASES 的同义词。
  • +
    + RDD 系统 + +
  • 当字段名大于 10 个字符时,修正了 ADSADT 驱动程序的 Advantage RDD 中的一个问题。
  • +
  • 在 Advantage RDD 中,作为关系中子表的表的 EOF、BOF 和 FOUND 标志设置不当。这一问题已得到修复。
  • +
  • 在 FoxPro 方言中,“自动排序” 行为发生了变化。在该方言中,不再选择第一个索引中的第一个顺序。索引文件已打开,但文件保持自然顺序,打开文件时光标定位在记录编号 1 上。
  • +
  • 导出 CSV 和 SDF 时,空日期会出现异常。现已修复。
  • +
  • 当打开一个 CDX 时,如果其中一个顺序表达式无法编译(因为缺少一个函数),那么以前会忽略整个 CDX。而现在,其他标签会被成功打开。RuntimeState.LastRddError 属性将包含一个 Exception 对象,其中包含打开失败的标记的错误信息。
  • +
  • 在 DBFVFP 驱动程序中,“I ”类型字段的索引键计算不正确。现已修复。
  • +
  • 修正了 OrdDescend() 函数的一个问题
  • +
    + Visual Studio 集成 + +
  • 修正了参数列表中默认表达式的 VS 解析器问题
  • +
  • 外部方法/函数的参数并不总是显示正确的 “As”/“Is ”修饰符
  • +
  • 现在,QuickInfo 工具提示上的位置显示在工具提示内的独立一行上。
  • +
  • 修正了一个问题,即 XML 文件中第一个成员的 XML 工具提示或参数提示未显示。
  • +
  • 我们对项目文件格式进行了更改(见下文注释)。使用此 X# 版本打开时,所有项目文件都将更新。
  • +
  • 提高了在 Visual Studio 内关闭解决方案的速度。
  • +
  • 项目系统将不再尝试更新 SDK 样式的项目文件。
  • +
  • 在查找 Foo.SomeMethod() 等方法时,代码模型有时会返回 Bar.SomeMethod() 方法。
    这导致在 Windows 窗体编辑器中打开窗体时出现问题。这一问题已得到修复。
  • +
    + VO 兼容的编辑器 + +
  • 现在,从 VO 兼容编辑器生成的代码保留了类的 INTERNAL 或其他修饰符以及 IMPLEMENTS 子句。
  • +
  • 我们更正了按钮控件中 “LoadResString ”标题的显示方式
  • +
    + Foxpro 命令 + +
  • 我们增加了对几个新的 Foxpro 兼容命令的支持:
  • +
  • CLOSE ALL
  • +
  • SCATTER
  • +
  • GATHER
  • +
  • COPY TO ARRAY
  • +
  • APPEND FROM ARRAY
  • +
  • COPY TO  SDF|CSV|DELIMITED|FOXPLUS|FOX2X
  • +
  • APPEND FROM SDF|CSV|DELIMITED|FOXPLUS|FOX2X
  • +
  • 所有变体都支持 fields list、FIELDS LIKE 或 FIELDS EXCEPT 子句,相关命令还支持 MEMO 和 BLANK 子句.
  • +
    + +
  • 并不支持 COPY TO 和 APPEND FROM 的所有变化,例如复制到 excel 和 sylk。
  • +
  • COPY TO 命令中的 Database 和 name 子句以及 CodePage 子句暂时被忽略
  • +
    + 生成系统 + +
  • 我们已准备好 X# 生成系统,以便与 .Net 5 和 .Net Core 使用的 SDK 类型项目配合使用。请参阅下面的主题,了解这对项目文件意味着什么。
  • +
  • 请注意,由于在 Visual Studio 之外运行的自动生成也需要生成系统,因此生成系统的源代码已移至 GitHub 上的编译器资源库。
  • +
    + 项目文件的更改 + +
  • 现在,我们不再将 MSBuild 支持分别部署到每个 VS 版本内的文件夹中,而是将其一次性部署到 XSharp 安装文件夹内的文件夹中。
    安装程序会设置一个指向该文件夹的环境变量XSharpMsBuildDir。因此,当使用该版本的 X# 打开时,所有项目文件都将得到更新。
  • +
    + +
  • 我们所做的更改是将宏“$(MSBuildExtensionsPath)\XSharp ”替换为“$(XSharpMsBuildDir)”,后者是一个环境变量,指向机器上 X# MsBuild 支持文件的位置。如果在生成服务器上运行 X#,则可以在需要时在生成脚本中设置该环境变量。
  • +
  • 安装程序会自动添加该环境变量,并将其指向 <XSharpDir>\MsBuild 文件夹。
  • +
    + + Changes in 2.5.2.0 (Cahors) + 编译器 + +
  • 如果定义中的表达式包含值大于 127 的 _Chr()函数,则会生成警告,提示开发机器和最终用户机器之间可能存在代码页差异。
  • +
  • 修复了一个问题,其中一个宏定义被定义为 PTR(_CAST,0),并且这个宏定义也被用作函数/方法的默认值。
  • +
    + 运行时 + +
  • 在 NULL_OBJECT 上调用 IsAccess、IsAssign 和类似方法会导致异常。这一问题已得到修复。
  • +
  • EmptyUsual 现在也适用于 OBJECT 类型
  • +
  • 当浮点数除法返回无限值时,不会产生除以零的异常。这一问题已得到修复。
  • +
  • 当在后期绑定调用中跳过一个参数,且该参数有一个默认值时,我们将使用默认值,而不是 NIL
  • +
  • StrTran() 第 5 个参数(uCount)的默认值 “仅” 替换 65000 次。现在,默认值将负责替换所有出现的次数。
  • +
  • 传递给 NoIVarGet() 和 NoVarPut() 的变量名现在转换为大写字母。
  • +
    + RDD 系统 + +
  • 修正了当作用域降序 Cdx 位于 Eof() 时向前跳转的问题
  • +
    + VOSDK + +
  • 有几个 DbServer 方法在选择正确的工作区之前调用一个方法来写入更改。这是一个源于 VO 的老漏洞,现已得到修复。
  • +
    + Visual Studio 集成 + +
  • 在 VS 2019 中查找 XML 文档有时不起作用。这一问题已得到修复。
  • +
  • 现在,ClassView 和 Objectview 可以 “在一定程度上 ”工作。这一点需要改进。
  • +
  • 改进了所谓 “主要互操作程序集 ”的加载
  • +
  • 修复了编辑器窗口中 “类型 ”和 “成员 ”下拉栏中的一个问题
  • +
  • 改进了在 VO 兼容窗口编辑器中应用复制/粘贴时控件重命名的功能。
  • +
  • 打开 VO 窗口编辑器时,VO 窗口编辑器的 X# 工具栏现在会自动显示
  • +
  • VO 窗口编辑器(以及其他 VO 编辑器)的属性窗口和工具箱的位置和大小现在可以在 Visual Studio 会话之间保存。
  • +
    + 生成系统 + +
  • 生成的 XML 文件是在项目文件夹中而不是在中间文件夹中生成的。这一问题已得到修复。
  • +
    + 文档 + +
  • 大多数主题的 [Source] 链接丢失。现已修复。
  • +
  • 更正了一些文档
  • +
    + + Changes in 2.5.1.0 (Cahors) + 编译器 + +
  • 此版本中的编译器没有变化(仍称为 2.5.0.0)
  • +
    + 运行时 + +
  • (VO 兼容性)修正了数组的 VO 兼容性问题。现在,使用 2 维索引访问单维数组将返回 NIL,且不会产生异常。这是一个愚蠢但兼容的问题。
  • +
  • (VO 兼容性)用符号比较一个带数值的常量不再产生异常。数值现在被转换为符号,并使用该符号进行比较。
  • +
  • (XPP 兼容)不允许使用索引操作符(u[1])访问包含 LONG 的 USUAL 变量。这将返回 TRUE 或 FALSE,是检查位是否被设置的一种简单方法。
  • +
  • "DB" 和 ”CR" 的字面现在存储在资源中,可根据其他语言进行更改。
  • +
  • 为支持延迟绑定添加了一些优化代码
  • +
    + Visual Studio 集成 + +
  • 如果外部程序集包含两种类型,而这两种类型的名称只是大小写不同,则读取外部程序集的类型信息将失败。
  • +
  • 实体解析器无法识别前缀为可见性修饰符(PROTECTED SET)的 GET 和 SET 访问器
  • +
  • 实体解析器无法识别不以 MEMBER 关键字开头的 ENUM 成员
  • +
  • 已添加对 Visual Studio 任务窗口的支持。包含 TODO 或 HACK(可在工具/选项窗口中配置)字样的源代码注释现在会添加到任务列表中。这些任务会保存在 intellisense 数据库中,因此在打开解决方案后,所有任务都会立即显示,而无需(重新)扫描源文件。
  • +
  • 修正了 WIndows 窗体编辑器的类型和成员查找中的一个问题
  • +
  • 修正了 VS 调试器中的一个问题,即在数组和集合的索引操作符中减去 1。这显然是不正确的。
  • +
    + 生成系统 + +
  • 生成的 XML 文件的文件名来自项目文件名而非输出程序集名。这一问题已得到修复。
  • +
    + + + Changes in 2.5.0.0 (Cahors) + 编译器 + +
  • 如果 #pragma 行后面跟着不正确的语法,就会 “吃掉 ”不正确的语法,导致整个方法被排除在编译之外。这一问题已得到修复。
  • +
  • 带有 VOID 返回类型的方法/函数中的多行编译时代码块未被正确编译。这一问题已得到修复。
  • +
  • 编译器现在允许在代码块中为参数指定类型。由于代码块定义需要类型为 USUAL 的参数,这将被编译器转换。参数仍将是类型为 USUAL,但在代码块内部将分配适当类型的本地变量。因此,现在可以编译这段代码。
  • +
    +   { | s as string, i as int| s:SubString(i,1) } + +
  • 代码填充缺失参数时,在传递参数给 COM 调用(Peter Monadjemi 的 Word 示例)时出现问题。
  • +
  • 修正了向接受对象的函数传递 IntPtr、VOSTRUCT 地址的类型指针的问题。
  • +
  • 我们添加了向 PSZ 添加一个整数值的代码,这样就产生了一个新的 PSZ,它从原始 PSZ 中的一个相对位置开始。不会分配新的缓冲区。
  • +
  • 我们更正了复杂集合初始化程序的一个问题。
  • +
  • 以 DEFINE 作为参数的 Chr() 和 _Chr()(如 _Chr(ASC_TAB))未被编译器正确解析。
  • +
  • 编译器没有正确解析 PUBLIC MyVar[123] 的语法。现已修复。
  • +
  • 一些特殊字符(如Micro Character, U+00B5)不被编译器识别为有效的标识符。现在,我们采用了与 C# 相同的标识符规则。
  • +
  • 在 OBJECT 类型的值中传递指针或 PSZ 时,现在是通过 “装箱” 变量来处理的。因此,NULL_PTR 不再作为 NULL_OBJECT 传递,而是作为包含 IntPtr.Zero 值的对象传递。
  • +
  • 编译器现在允许将 IntPtr.Zero 存储到一个常量变量中
  • +
  • 现在,编译器允许通过编写双引号在字符串中嵌入引号。这样就可以了:
  • +
    + ? "Some String that has an embedded "" character" + +
  • 当您声明一个与函数同名的 MEMVAR 时,编译器将不再有任何问题来解析函数调用。请注意,您必须声明 memvar 才能使该解析生效。
    例如:
  • +
    +
    FUNCTION Start() AS VOID
    MEMVAR Test
    Test := 123      // 赋值给内存变量
    Test(Test)      // 用 “Test ”的值调用 “Test ”函数
    RETURN
    FUNCTION Test(a)
    ? a
    RETURN a
    + + + 公共运行时 + +
  • Workareas 类不再使用包含 4096 个元素的数组,而是使用字典来保存打开的 RDD。这减少了运行时状态所使用的内存。
  • +
  • 修复了 WrapperRDD 类中的一个问题
  • +
  • OrdSetFocus() 现在以 STRING 返回上一个活动标记
  • +
  • 修正了 FRead() 中的一个问题,它没有按规定忽略 SetAnsi() 设置
  • +
  • 为 PSZ + LONG 和 PSZ + DWORD 的 PSZ 类型添加了操作符。
  • +
  • Usual 类现在实现了 IDisposable() 接口。当它包含一个实现 IDisposable 的对象时,它将调用该对象的 Dispose 方法。
  • +
  • 我们添加了具有一个和两个数字索引的数组索引属性,使访问数组元素的代码更快一些
  • +
  • 代码 SELECT 10 无法正常工作。现已修复。感谢卡尔-海因茨。
  • +
  • 即使尝试将 order 设置为不存在的索引,VoDbOrdSetFocus() 的返回值仍为 TRUE。该问题已得到修复。
  • +
  • 我们修正了 Set(_SET_CENTURY) 在传递的参数是 “ON ”或 “OFF ”格式的字符串时出现的问题
  • +
  • 即使无法选择所选 order,VODbOrdSetFocus() 仍然返回 TRUE。
  • +
  • ArrayCreate<T> 未填充数组。该问题已得到修复。
  • +
  • 现在,CToD() 函数将忽略尾部空格或前导空格。
  • +
  • 使用 2 个参数调用 VoDbSeek() 现在不会将 lLast 设置为 FALSE,而是设置为当前范围的最后值。
  • +
  • 在之前的版本中,错误堆栈跟踪的格式发生了变化(名称全部大写,与 VO 中的一样)。现在您可以选择启用或禁用。我们添加了一个函数 SetErrorStackVOFormat(),它接收并返回一个逻辑值。对于 VO 和 Vulcan 方言,错误堆栈的默认格式是 VO 格式,而对于其他方言,默认格式是正常的 .Net 格式。
  • +
  • 我们已经实现了 StrEvaluate() 函数。
  • +
  • 我们实现了 PtrLen() 和 PtrLenWrite() 函数。这些函数仅适用于以 x86 模式运行的 Windows 操作系统。
    对于其他操作系统或运行于 64 位的应用程序,这些函数返回与 MemLen() 相同的值。
  • +
  • 当 2 个浮点数相除,因除数为零而产生 NaN(非数值)值时,现在会产生一个 DivideByZero 异常。
  • +
  • 当除数为零时,2 个常用数相除的结果是一个 NaN(非数字)值,此时将产生一个 DivideByZero 异常。
  • +
  • 请注意,对 2 个 REAL8(System.Double)值进行除法运算仍然会出现 NaN,因为我们没有 “介入 ”除法运算。
  • +
  • 现在,当在 Windows 上运行时,OS() 函数会返回更合适的版本描述。它从注册表中读取版本名称,并在版本中包含 x86 和 x64 标志。
  • +
    + RDD 系统 + +
  • 在共享模式下写入记录时,DBF RDD Now 会强制刷新磁盘。
  • +
  • 修复了 DBFCDX rdd 中一个可能损坏索引的问题。
  • +
  • 我们在 DBFCDX RDD 中内置了一个验证例程,用于验证当前标志的完整性。要调用该例程,请使用 DBOI_VALIDATE 常量调用 DbOrderInfo。
    这样就可以验证:
  • + +
  • 如果所有记录在索引中都恰好包含一次
  • +
  • 如果索引中每条记录的值都是正确的
  • +
  • 如果页面中索引键的 order 正确
  • +
  • 如果索引中的索引页列表是正确的
  • +
    +
    + 如果发现问题,该调用将返回 FALSE,并写入一个文件,文件名为 <BagName>_<TagName>.ERR,其中包含所发现错误的描述。 + +
  • Workarea 类(XSharp.Core 内)和其他 RDD 类中的大部分导出变量已更改为 PROTECTED。
    我们还为需要从 RDD 外部访问的变量添加了一些属性
  • +
  • 修正了从范围 CDX 索引中的 BOF 位置反复跳回时出现的问题。
  • +
  • DBFCDX 的 Zap() 操作没有清除一个内部缓存。这一问题已得到修复。
  • +
  • DBFCDX 驱动程序现在可以在 CDX 文件中的最后一个标记被删除后关闭并删除该文件。
  • +
    + 宏编译器 + +
  • 宏编译器无法将 0000.00.00 识别为空日期。现已修复。
  • +
  • 现在,宏编译器也能像普通编译器一样在标识符中使用异国字符。我们添加了与 C# 编译器相同的标识符名称规则。
  • +
    + + XBase++ 函数 + +
  • 修正了 XPP 函数 SetCollationTable() 中的一个问题
  • +
  • DbCargo() 现在还可以将工作区 cargo 值设置为 NULL 或 NIL
  • +
  • 我们添加了几个函数,如 PosUpper()、PosLower()、PosIns() 和 PosDel()。
  • +
    + + VFP 函数 + +
  • 为 FoxPro 添加了 AllTrim()、RTrim()、LTrim() 和 Trim() 变体(感谢 Antonio)
  • +
  • 已添加 StrToFile() 和 FileToStr() (感谢 Antonio 和 Karl Heinz)
  • +
    + + VOSDK + +
  • 我们在 CSession 和 CSocket 类上创建了一个 Destroy() 方法,这样就可以 “清理 ”对象(在 VO 中可以调用 Axit(),但现在已经不允许了)。这些类的反构造函数也将调用 Destroy()。
  • +
  • 修正了 TreeView:GetItemAttributes 中的一个问题。现在也可以使用 hItem 调用该属性(这在 TreeViewSelectionEvent:NewTreeViewItem 中发生)。
  • +
  • OpenDialog 类现在可以调整大小。
  • +
  • 修正了 FormattedString:MatchesTemplChar() 中的一个问题,该问题会导致带有图片的编辑控件出现问题
  • +
  • 调用 DataWindow:__DoValidate() 后期绑定不起作用,因为有两个重载。这一问题已得到修复。请注意,在 VO SDK 中,DataWindow:__DoValidate() 希望使用 Control 类型的参数,但在 DataBrowser 代码中,调用时使用的是 DataColumn 类型的参数。VO 没有抱怨,但在 .Net 中却行不通!
  • +
  • 修正了 Internet 类中 GetMailTimeStamp() 的一个问题。
  • +
  • 我们包含了 Consoleclasses、SystemClasses 和 RDD 类的 “类型化 ”版本。这些类大多是强类型的,可以在 AnyCPU 模式下运行。
    SQL 类和 GUI 类将随后推出。
  • +
    + Visual Studio 集成 + 代码模式 + +
  • 我们完全重写了后台解析器和代码模型,它用于解析 VS 编辑器中的 “实体”,并用于生成 VS 解决方案中类型、方法、函数等的内存模型。该解析器现在使用与编译器相同的词法,但实体是用手写解析器收集的(因为编辑器缓冲区中的代码可能包含不完整的代码,我们无法可靠地使用普通解析器)。
  • +
  • 我们现在使用 SQLite 数据库在会话之间持久保存代码模型。这减少了 X# 项目系统所需的内存。我们不再将整个代码模型保存在内存中。
  • +
  • 这也意味着,当您重新打开现有解决方案时,我们只需解析自上次处理以来已更改的文件。这将加快大型 VS 解决方案的加载速度。
  • +
  • 现在,我们还使用 Mono.Cecil 库,而不是 System.Reflection 命名空间中的类,从外部代码(程序集引用和非 X# 项目的项目引用)中读取类型信息。这样做速度更快,占用内存更少,最重要的是,当程序集发生变化时,我们可以轻松卸载和重新加载程序集。
  • +
  • 综上所述,打开 VS 解决方案的速度应该会更快,“锁定 ”VS 的情况也会减少(希望完全不会)。此外,代码自动补全和其他 intellisense 功能也会得到改进。
  • +
    + + 源代码编辑器 + +
  • 修正了当光标位于第一个实体之前的一行代码中时,编辑器上方下拉组合框的一个问题。
  • +
  • 修正了一个问题,即在类声明之后,编辑器中的函数没有可折叠区域
  • +
  • 现在,编辑器内的代码自动补全功能不仅能获取类型本身的扩展方法,还能获取由这些类型实现的接口的扩展方法。
  • +
  • 编辑器代码现在可以正确识别使用 VAR 关键字声明的变量(如果这些变量后面有构造函数调用)。
  • +
  • 如果在源代码中为解决方案中的实体添加了 XML 注释,Visual Studio 中的工具提示和参数补全就会显示这些注释。
  • +
  • 修正了 “重新格式化 ”代码中的几个问题
  • +
    + Windows 窗体编辑器 + +
  • Windows 窗体使用的类内对字段的某些内联赋值可能导致窗体编辑器无法使用窗体。这一问题已得到修复。
  • +
  • Windows 窗体编辑器有时会删除实体之间的空行。这一问题已得到修复。
  • +
  • Windows 窗体编辑器解析的代码中的用户自定义命令在窗体更改和保存时无法识别并消失。这一问题已得到修复。
  • +
  • 修正了使用项目资源文件中存储的资源(在源代码中以 “global:: ”为前缀)设置图像和类似属性的问题
  • +
    + VOXporter + +
  • 我们添加了将 AEF 中的 VO 表格导出为 XML 格式的支持
  • +
  • 我们添加了将 AEF 中的 VO 菜单导出为 XML 格式的支持
  • +
    + + Changes in 2.4.1.0 (Bandol GA 2.4a) + 编译器 + +
  • Core 方言现在不再支持括号字符串,以避免在 GET 和 SET 关键字之间包含属性的单行外部特性(attributes)声明出现问题
  • +
  • 在 EXTERN 修饰符之后,PROPERTY 关键字不能被正确识别。
  • +
  • 修正了包含 2 个数字常量的 IIF 表达式的 XS9021 警告
  • +
  • 在 FoxPro 方言中,现在总是允许对某些类型(即使未启用 /lb 编译器选项)进行后期绑定调用,例如 USUAL 和 Empty 类。 这些类型在运行时都标有 AllowLateBound 属性。
    它们会生成新的编译器警告 (XS9098).
  • +
  • 我们添加了一个新的编译器选项 -fox2 。该选项可使宏编译器看到局部变量,在使用内嵌参数的 SQL 语句时也应使用该选项。该编译器选项必须与 -memvar 和 FoxPro 方言结合使用。
  • +
    + 运行时 + +
  • 修正了在使用 DbServer:AppendDelimited() 和 DbServer:CopyDelimited() 时 DELIM Rdd 中出现的问题。
  • +
  • 修正了 DbSetOrder() 在未找到 order 时仍返回 TRUE 的问题。
  • +
  • 修正了 File() 函数在使用通配符时返回 FALSE 的问题
  • +
  • SqlExec() 现在可为具有单独 Date 类型的 SQL providers 返回 Date 类型的列
  • +
  • 使用 SqlExec() 创建的工作区/游标现在可以根据从后台读取的设置正确设置 NULL 标志、二进制标志等。
  • +
  • 修正并添加了 VFP 函数(Gomonth、Quarter、ChrTran、各种变化中的 At、各种变化中的 RAt、DMY、MDY)的实现。感谢卡尔-海因茨。
  • +
  • 参数化 SQL 函数的第一项工作。尚未完成。
  • +
  • 运行时中的某些类型现在标有特殊的 “AllowLateBound ”属性。即使未启用 /lb 编译器选项,FoxPro 方言也将接受这些类型作为后期编译的候选类型。
  • +
  • 我们为宏编译器添加了通过名称访问局部变量的支持。这已内置于 VarGet() 和 VarPut() 函数以及 MemVarGet() 和 MemVarPut() 函数中。与同名的 private 变量或 public 变量相比,局部变量具有优先权。为此,您必须启用 -fox2 编译器选项。
  • +
  • ValType() 现在对 currency 值返回 “Y”,对日期时间值返回 "T"
  • +
  • 在垃圾回收器线程中访问运行时状态时,不会创建该状态的副本。
  • +
  • 现在,当执行无效 SQL 语句时,SQLExecute() 返回-1。
  • +
  • 已添加 VarType() 函数
  • +
  • 当方法返回 NULL_STRING 且返回类型为 STRING 时,IVarGet() 和 Send() 现在会返回空字符串
  • +
    + RDD + +
  • 获取范围索引的 OrdKeyNo 会将索引位置重置为索引顶部。这会影响浏览器中作用域索引的滚动条
  • +
    + VOSDK + +
  • 控制台类程序集现已标记为 AnyCpu。
  • +
  • 修正了上一个版本中引入的一个问题,即从 Shell32.DLL 导入的某些函数(如拖放支持)的调用约定。
  • +
  • 修复了在远程桌面上运行时,PrintingDevice 构造函数中读取打印机的问题
  • +
  • 我们使用 <var> IS <Type> 结构对 IsInstanceOf 的几次调用进行了修改
  • +
  • 修正了多个 IsInstanceOf() 调用中的拼写错误
  • +
  • 改进 DataBrowser 类的 “column scatter” 代码
  • +
    + Visual Studio 集成 + +
  • 如果您从 XSharp 编辑器选项中的 “提交完成列表 ”控件中删除了所有字符,那么重启 VS 后,所有默认字符都会出现。现在我们会记住你已经清除了列表,并且不会再重新填充列表。
  • +
  • 修正了一个问题,该问题导致编辑器无法重新扫描当前缓冲区中已更改的实体
  • +
  • 为新的 -fox2 编译器选项添加了项目属性
  • +
  • VO MDI 模板现在已启用拖放功能
  • +
  • 修复了调试器中某些运行时类型(如 DATE)的一个问题,该问题可能会在 VS 2019 调试时导致异常。
  • +
  • 修复了编辑器代码中负责显示可折叠区域以及用类型名称和成员名称更新组合框的部分的问题。
  • +
  • 修复了 VO 兼容表单编辑器中选项卡页面的代码生成问题
  • +
    + + Changes in 2.4.0.0 (Bandol GA 2.4) + 编译器 + +
  • 修正了某些整数运算仍会返回错误变量类型的问题
  • +
  • 无符号整数类型(BYTE、WORD、DWORD、UINT64)的一元减运算符返回的类型与原始类型相同,因此不会返回负值。这种情况已得到改变。现在,该运算符的返回值是下一个较大的有符号整数类型。
  • +
  • 在插值字符串中使用编译器宏(如 __VERSION__ )会导致编译器出现内部错误。这一问题已得到修复。
  • +
  • vo11 编译器选项现在只适用于整数和非整数类型之间的操作。由于混合整数类型的 VO 行为令人困惑,而且无法模拟,因此删除。
  • +
  • 现在还能识别 RETURN 和 GET 关键字后的括号字符串。
  • +
    + 运行时 + +
  • 修正了从日期减去 dword 时出现的问题(与编译器中的有符号/无符号问题有关)
  • +
  • LUpdate() 现在会在工作区没有打开表时返回 NULL_DATE。
  • +
  • 已添加缺失的 ErrorStack() 函数(感谢 Leonid)
  • +
  • 为 Error 类添加了 Stack 属性
  • +
  • 添加了 Visual FoxPro 的 SQL..() 函数。请注意,目前还不支持在 SQL 语句中嵌入参数的 SQLExec() 和 SQLPrepare()。这需要对编译器进行修改,计划在下一个版本中进行。
  • +
  • 已添加 DbDataTable() 函数,该函数可返回一个(分离的)数据表,其中包含当前工作区的数据
  • +
  • 已添加 DbDataSource() 函数,该函数可返回附加到当前工作区的绑定列表。绑定列表中属性的更新将直接写入所附工作区。
  • +
  • 已添加 2 个类 DbDataTable 和 DbDataSource,它们由同名函数返回。
  • +
  • 修正了带数值的 USUALs 格式不正确的问题
  • +
  • 我们已将 FoxPro.h 中的定义添加到 VFP 程序集中
  • +
  • 我们添加了 VFP MessageBox 功能,包括超时后自动关闭的消息框。
  • +
  • 修正了 AsHexString() 以显示存储在 USUALs 中的大 DWORD 值
  • +
  • 修正了 FLOAT->STRING 转换时与 VO 的若干不兼容问题
  • +
    + RDD 系统 + +
  • 修复了在 DBFCDX 表中向后跳过作用域的问题
  • +
  • 修复了使用 DBFCDX 和 DBFNTX 驱动程序创建唯一索引的问题
  • +
  • 现在始终支持向 DBF 列写入 NULL 值。如果列是 DBFVFP 表中的可为 NULL 值的列,则会设置 null 标志。对于其他 RDD,NULL 值将被写为空值。
  • +
  • 修正了对所有基于 DBF 的 RDD 进行 Append 操作时的性能问题
  • +
  • 修复了 DBFCDX 驱动程序的一个问题,该问题可能会在索引页面几乎满载全部为空的键值对时发生
  • +
  • 修正了 WrapperRDD:Open() 中的一个问题
  • +
  • 添加了 SDF RDD
  • +
  • 添加了一个特殊的 DbfVFPSQL RDD,VFP 支持中的 SQL..() 函数使用该 RDD 来存储 SQL 查询的结果。可以使用 DbFieldInfo() 和 DBS_COLUMINFO 定义从 Sql Resultset 中检索描述原始列的列信息。该调用的返回值是一个 XSharp.RDD.DbColumnInfo 类型的对象。
  • +
  • 已添加 DELIM RDD 和 2 个子类(CSV 和 TSV)。这些 RDD 均返回分隔值。DELIM RDD 的默认格式是使用逗号作为分隔符。CSV 使用分号,TSV 使用 Tab 来分隔字段。此外,CSV 和 TSV 还会写入包含字段名称的标题行。
    "普通" 分隔操作仍使用 DELIM。如果要使用 CSV 或 TSV RDD,则需要设置全局设置:
  • +
    + RddSetDefault("DBFNTX")
    DbUseArea(TRUE,"DBFNTX", "c:\Test\TEST.DBF")
    DbCopyDelim("C:\test\test.txt")             // 这使用了 DELIM RDD

    RuntimeState.DelimRDD := "CSV"              // 告诉运行时使用 CSV RDD 进行分隔写入
    DbCopyDelim("C:\test\test.csv")             // 这将使用 CSV RDD

    RuntimeState.DelimRDD := "TSV"              // 告诉运行时使用 TSV RDD 进行分隔写入
    DbCopyDelim("C:\test\test.tsv")             // 使用 TSV RDD
    DbZap()

    RuntimeState.DelimRDD := "CSV"              // 告诉运行时使用 CSV RDD 进行分隔读取
    DbAppDelim("C:\test\test.csv")              // 这将使用 CSV RDD
    + VO SDK + +
  • PrintingDevice:Init() 不再尝试从 win.ini 中读取默认打印机,而是从注册表中读取默认打印机。
  • +
  • 更新了代码仍在访问 win.ini(使用 GetProfile..() 函数)的其他几个位置。
  • +
  • GUI 类延迟加载对普通对话框 DLL 和 winspool.drv 的多次调用。现在情况有所改变,因为在 .Net 中不再需要这些调用。
  • +
  • 清理了 GUI 类中的所有 PSZ(_CAST 操作。
  • +
    + Visual Studio 集成 + +
  • OUT 变量的参数提示显示为 REF
  • +
  • 未找到带有 REF 或 OUT 参数的成员的 XML 说明
  • +
  • 修复了 VS 编辑器中的一个异常
  • +
    + VOXporter + +
  • 此版本无任何更改
  • +
    + + Changes in 2.3.2 (Bandol GA 2.3b) + 编译器 + +
  • 已添加对括号字符串的支持([包含引号的字符串:''和' ] )
  • +
  • 已添加对使用 &Id 和 &Id.Suffix 符号的 PRIVATE/PUBLIC 语法的支持
  • +
  • 以前创建 EXE 文件时没有清单,除非您使用的是有清单的 WIN32 资源。现在,当没有提供清单时,该清单会正确添加到 EXE 文件中。
  • +
  • 与版本资源和清单相关的非托管资源的处理方式发生了变化:
  • + +
  • 编译器检测本地资源时,现在会检查是否包含版本和/或清单资源。
  • +
  • 如果没有清单资源,则会将默认清单资源添加到 Win32 资源文件的资源中。
  • +
  • 当存在版本资源时,该版本资源将被编译器根据 Assembly 属性生成的版本资源所取代。
  • +
  • 这将对来自 VO 的用户有所帮助,他们可以对所有程序集(包括具有菜单和窗口资源的程序集)使用 AssemblyVersion 等。
    如果源代码中恰好有版本信息资源,则该资源将被忽略。
  • +
  • 当然,我们添加了一个命令行选项来抑制这种情况:如果使用命令行选项 "-usenativeversion" ,则将使用 Win32 资源中包含的本地版本。如果 Win32 资源文件中没有包含版本资源,则该命令行选项将被忽略。
  • +
    +
    + +
  • ACCESS/ASSIGN 方法中现在支持 PCOUNT() 和 ARGCOUNT()。可以传递的参数数量仍然是固定的,但这两个函数现在将返回在 ACCESS 和/或 ASSIGN 方法中定义的参数数量。
  • +
  • 我们修正了编译器错误 “Failed to emit module”,而不是显示代码中真正问题(类型缺失)的问题。
  • +
  • 预处理器中的扩展匹配标记,如 USE udc 中的 <(file)> 现在也能正确匹配文件名。
  • +
  • 改进了区分括号表达式和类型转换的检测算法。这种算法现在是
  • + +
  • 括号之间的内置类型名称总是被视为类型转换。例如 (DWORD)、(SHORT) 等。
  • +
  • 括号之间的其他类型名称可能被视为类型转换,但也可能被视为括号表达式。这取决于括号后面的标记。如果该标记是运算符,如 +、-、/ 或 *,则视为括号表达式。如果结尾括号后的标记是开头括号,则表达式被视为类型化表达式。举例如下
  • +
    +
    + ? (DWORD) +42       // 这是一种类型转换
    ? (System.UInt32) +42   // 这是一个括号表达式,无法编译
    ? (System.UInt32) 42    // 这是一个类型转换,因为在 42 之前没有运算符
    ? (System.UInt32) (+42) // 这是一个类型转换,因为 +42 位于括号之间
    + +
  • 调用 Axit() 方法的代码现在会产生编译器错误。
  • +
  • 我们使用了 /vo11 编译器选项
  • +
  • 我们更正了几个已签名/未签名警告
  • +
  • 现在,您可以对存储在结构内部的类型化函数指针使用 PCall()(这在 VO Internet 服务 SDK 中使用)。
  • +
  • 词典现在可以识别(在 FoxPro 方言中)For() 和 Field() 函数,您不再需要在这些函数前添加 @@。
  • +
    + 运行时 + +
  • 修正 StrZero() 的负值问题
  • +
  • 修复 IsSpace() 在字符串为空或 null 时崩溃的问题
  • +
  • VFP 方言中的 AFill() 现在也能填充子数组中的元素(适用于多维数组)
  • +
  • NoIVarGet() 和 NoIvarPut() 不再将 IVar 名称转换为符号。这样,在一个类中调用 NoIVarGet() 和 NoIVarPut() 方法时,就能保持原来的命名方式。
  • +
  • VFP 和 XPP Abstract 类现在是真正的抽象类。
  • +
  • 实现 VFP Empty 类。
  • +
  • 实现了 VFP AddProperty 和 VFP RemoveProperty 函数。
  • +
  • 修正了 PropertyVisibility 枚举名称中的一个错字
  • +
  • 修正了在调用 DBF 相关函数时出现的若干错误,这些函数适用于不包含打开表的工作区。
  • +
  • 在 FoxPro 方言中运行时,Seconds() 函数现在可以返回 3 位小数。请注意,您必须添加 SetDecimal(3) 才能真正看到第三位小数
  • +
  • Like() 函数现在在 FoxPro 方言中区分大小写,而在所有其他方言中则不区分大小写。_Like() 函数在所有方言中都区分大小写。
  • +
  • ASort() 不接受 Object() 类型的第 4 个参数。现已纠正:当您传递一个具有 Eval() 方法的对象时,将调用该方法来确定正确的排序顺序。
  • +
  • 使用 Set() 函数设置/恢复全局状态时,运行时同步的某些值可能会不同步。这可能导致不正确的日期格式或类似错误。这一问题已得到修复。
  • +
  • 添加了多个 VFP 兼容功能(其中一些由 Thomas Ganss 提供)。
  • +
  • 我们添加了几个 VFP 功能,例如
  • +
  • 使用 Set() 函数设置 “全局设置 ”时,运行时会确保相关设置也相应设置。例如,设置 Set.DateFormat 现在也会更新 DateFormatNet 和 DateFormatEmpty。
  • +
  • 修复带有非标准填充物的 PadC() 函数
  • +
  • 我们为 FoxPro 特有属性添加了 DBOI_COLLATION 和 DBS_CAPTION。
  • +
    + VO SDK + +
  • 我们已从图形用户界面类源代码中删除了版本信息资源。现在,版本信息由程序集属性生成
  • +
  • 我们已清理了代码,并从抑制警告中删除了警告 9020 和 9021,因为编译器现在可以正确处理这些警告。
  • +
    + RDD 系统 + +
  • 当 DBC 文件被他人独占时,DBFVP 驱动程序不再无法打开 DBF
  • +
  • 已添加对使用 DBS_CAPTION 读取标题和使用 DBOI_COLLATION 读取 collations 的支持
  • +
  • DBFNTX 驱动程序在创建新索引时未正确设置 HPLocking 标志
  • +
    + Visual Studio 集成 + +
  • 使用 VAR 关键字声明的变量的类型查找有时会陷入无限循环。这一问题已得到修复。
  • +
  • 现在只有选中常规编辑器选项中的 “隐藏高级成员 ”复选框时,以“__”开头的成员才会从完成列表中隐藏。
  • +
  • 已添加对 BRACKETED_STRING 常量着色的支持
  • +
  • 修正了关键字大小写同步代码中的一个错误。
  • +
  • VS 表单编辑器后面的代码在声明没有返回类型的方法时存在问题。因此无法打开表单。这一问题已得到修复。
  • +
  • 改进了定义和枚举成员的 intellisense 信息
  • +
  • 现在,您可以在项目属性对话框中启用/禁用  /vo11
  • +
    + VOXporter + +
  • 从剪贴板内容移植时,现在 VOXporter 会将修改后的代码放回剪贴板
  • +
  • 添加了移除 ~ONLYEARLY 实用程序的选项
  • +
    + 安装 + +
  • 安装程序现在有了一个新的命令行参数“-nouninstall”,可以防止自动安装以前的版本。这样就可以同时安装多个版本的 X#。
    请注意,安装程序会将注册表键值设置为上次安装 X# 的位置。Visual Studio 集成将使用该位置来定位编译器。
    如果不更改,所有 VS 安装将始终使用上次安装的 X# 版本。有关该机制如何工作的信息,请参阅 VS 和 MsBuild 的生成过程
    此外,如果您选择在 GAC 中安装 X# 运行时程序集,那么这些运行时 DLL 的较新版本将/可能会覆盖旧版本。这取决于较新的 DLL 是否有新的程序集版本。
    目前,所有 X# 运行时动态链接库(仍然)都是 2.1.0.0 版本,即使 X# 本身现在是 2.3.2 版本。
  • +
  • 安装程序现在会列出所有找到的 VS 2017 和 VS 2019 实例,包括 Visual Studio Buildtools,因此您可以选择在这些版本的 Visual Studio 的特定实例中安装,或者直接在所有实例中安装。
    请注意,在使用 -nouninstall 命令行选项运行 X# 时,安装程序将无法将 X# 从之前安装过它的 VS 安装中移除。
  • +
  • 我们在帮助文件中添加了一些关于所有安装程序命令行选项的 文档 。
  • +
    + 文档 + +
  • 修正了转义码文档中的错误
  • +
  • 我们添加了一个提示和技巧章节,目前包含以下主题。
  • +
  • 添加了对安装程序的说明 命令行选项
  • +
  • 添加了对 VS 和 MsBuild 的生成过程 的描述
  • +
  • 添加了描述 X# 运行时中方言 "不兼容" 的主题。请注意,该主题尚未完成。
  • +
  • 如何在启动时捕捉错误
  • +
  • 编译器在启动代码中的魔法
  • +
  • 编译器生成的特殊类
  • +
    + + Changes in 2.3.1.0 (Bandol GA 2.3a) + 编译器 + +
  • 在大小写敏感模式下编译时,编译器现在会检查子类声明的方法是否与父类中的方法只有大小写上的区别
  • +
    + +
  • 关于向 foreach iterator 变量赋值的警告信息已从 “无法赋值 ”更改为 “不应赋值”。
  • +
  • #pragma warnings 无法使用 xs1234 语法,只能使用数字。现已更正
  • +
    + + 运行时 + +
  • 为 IRdd 接口添加了 SetFieldExtent 方法
  • +
  • USUAL 类型不再 “缓存 ”方言设置
  • +
  • 修正了 ACopy() 在跳过参数或负参数时的一些问题。
  • +
  • Alias() 的返回值现在使用大写字母。
  • +
    + VO SDK + +
  • VO SDK Console 类现在内部使用 System.Console 类。唯一不再可用的功能是
  • + +
  • 它不再响应鼠标
  • +
  • 不支持创建 “新 ”控制台窗口。
  • +
    +
    + RDD 系统 + +
  • 修正了 Advantage RDDs 中的一个问题,该问题是由大小写问题引起的(子类中的方法与试图覆盖的父类中的方法的大小写不同)。因此,我们还在编译器中添加了一项检查。
  • +
  • 在某些情况下,使用 DBFNTX 驱动程序创建 NTX 可能会因时间问题而失败。这一问题已得到修复。
  • +
    + Visual Studio 集成 + +
  • 修正了关键字大小写同步中可能损坏编辑器内容的问题。
  • +
    + + Changes in 2.3.0.0 (Bandol GA 2.3) + 编译器 + +
  • 源文件中的语法错误 (1003) 或解析器错误 (9002) 可能导致错误列表中出现多个错误。现在我们只报告源文件中这些错误类型中的第一个。
  • +
  • 启用 -cs(大小写敏感标识符)编译器选项
  • +
  • 编译器现在会将编译时代码块的源代码作为字符串包含在该代码块中。在编译时代码块上调用 ToString() 将获取该字符串。
  • +
  • 修正了一个问题,即内存变量在传递给 DO <proc> WITH 语句时不会更新
  • +
  • 在类型化代码中访问或赋值未定义的属性或调用未定义的方法会产生编译器错误。现在,编译器会检测类型是否有 NoIVarGet()、NoIVarPut() 或 NoMethod() 方法,如果找到相应的方法,就会生成编译器警告 (XS9094) 而不是编译器错误。
  • +
  • 使用 LOGIC(_CAST,numValue) 结构将数字转换为逻辑值时,只能查看 numValue 的最低字节。如果最低字节为零,而较高字节不为零,结果将是 FALSE。现在编译器将其编译为 (numValue <> 0)。
  • +
  • 编译器现在支持 IF 语句的(可选)THEN 关键字
  • +
  • 已添加对 FoxPro CURRENCY 类型的支持。
  • +
  • 在 PROPERTY SET 方法中,Value 关键字始终以小写编译
  • +
  • 现在可以在行尾检测到未终止的字符串。
  • +
  • 为 FoxPro 添加了ENDTRY UDC
  • +
  • 已添加对 #pragma warning(s) 的支持。更多信息,请参阅帮助文件中的 #pragma warnings
  • +
  • 已添加对 #pragma options 的支持。参见 #pragma options
  • +
    + 运行时 + +
  • 添加了 XSharp.Data.DLL,其中包含 RDD 系统使用的基于 .Net SQL 的数据访问支持代码和新的 Unicode SQL 类。
  • +
  • 当未传递 FOR 块或 WHILE 块时,DbEval() 引发异常
  • +
  • 当求值块不返回逻辑表达式时,DbEval() 引发异常
  • +
  • OrdSetFocus() 的工作区事件有一个错误,即使事件成功,也会导致该事件出现 “操作失败 ”错误。
  • +
  • 包含 STRINGS 的 USUAL 上的索引运算符(仅在 Xbase++ 方言中支持)没有考虑到索引已经为零的情况
  • +
  • 在日期或逻辑字段的长度不正确的情况下调用 DbCreate() 时会出现异常,现在已自动更正。
  • +
  • 添加了将 STRING 类型的 USUAL 值转换为 STRING 的修复。
  • +
  • 修正了当区域为 “NIL ”或 “M ”时,__FIeldSetWa() 中的一个问题。
  • +
    + +
  • 添加了 FoxPro CURRENCY 类型。USUAL 变量也支持这种类型。在内部,CURRENCY 变量的值存储为十进制,但四舍五入到小数点后 4 位。
  • +
  • 大多数运行时 DLL 现在都以大小写敏感模式编译。
  • +
  • 修正了 STOD() 函数中的一个问题,允许字符串长度超过 8 个字符。
  • +
  • 我们在运行时添加了一些 VFP 函数,如 Just...() 函数和 AddBs()。其他一些函数已经存在,但尚未实现。这些函数被标记为 [Obsolete] 属性,调用时将抛出 NotImplementedException 异常。
  • +
  • 在 Windows 上运行时,低级文件 IO 系统现在使用本地 Windows 文件访问,而不是托管访问。这也会影响 RDD 系统。
  • +
  • 修正了 ACopy()、Transform() 和 Str() 中的问题
  • +
    + VOSDK 类 + +
  • 新增了 DbServer:FieldGetBytes() 和 DbServer:FieldPutBytes() 以读取字符串字段的 “原始 ”字节。请注意(在 ccOptimistic 模式下)字节值不会被缓存,调用 FieldPutBytes() 时必须手动锁定和解锁服务。
  • +
  • 添加了几个缺失的定义
  • +
  • 将 VO SDK 同步到 VO 2.8 SP4 SDK。唯一未包含的更改是 DateTimePicker 类中的更改。这些更改导致了与 X# VOSDK 中现有代码的冲突。
  • +
    + RDD 系统 + +
  • Advantage RDD 的标题大小会导致异常。现已修复
  • +
  • 修正了 DbRlockList() 和 advantage RDD 的一个问题
  • +
  • 在 Advantage RDD 的 cursor 中跳转不会刷新相关表的 EOF 和 BOF 标志
  • +
  • 修正了在 FPT 文件中写入字符串的问题
  • +
  • AX_Get.. Handle() 函数没有正确返回句柄
  • +
  • 我们添加了几个缺失的与 Advantage 相关的函数。
  • +
  • 在创建新文件时,DBFVFP 驱动程序没有将 DBC 反向链接块写入文件头,导致记录数为负数。
  • +
  • 我们为 DBFVFP 驱动程序添加了从 DBC 文件读取字段名的(临时)支持。因此,在索引表达式中使用长字段名的 CDX 文件现在也能正确打开了
  • +
  • 修正了 DBF RDD 的 CopyDb() 代码中的一个问题
  • +
  • DBFCDX RDD 现在可以实现 BLOB_GET、BlobExport() 和 BlobImport() 。
  • +
  • Pack、Zap 或重建带有自定义或唯一标记的 CDX 索引时,将无法保留这些标记。这一问题已得到修复。
  • +
  • 使用 DBFVFP 驱动程序创建文件时,现在可以在 DbCreate() 数组的字段类型中包含字段标记,方法是在类型后面加上冒号和一个或多个标记,其中标记为以下其中之一:
    N or 0:Nullable
    BBinary
    +AutoIncrement
    UUnicode.  (不受 FoxPro 支持)
    其他标记也可能随之出现(例如,Harbour 也有 E = 加密和 C = 压缩标记)
    注意:
  • + +
  • 请注意,字段的大小是字节数,因此{“NAME”, “C:U”,20,0}声明了一个包含 10 个 Unicode 字符和 20 个字节的 Unicode 字符字段。
  • +
  • 我们不验证标志的组合。例如,AutoIncrement 只适用于 Integer 类型的字段。
  • +
    +
    + +
  • 除 DBFVFP 驱动程序外,所有 RDD 的 DbFieldInfo(DBS_PROPERTIES) 都返回 5。该驱动程序返回 6 个属性。第 6 个属性是 FLAGS 字段。该字段是 DBFFieldFlags 枚举值的组合。
  • +
  • 修正了 Advantage RDD 的 AppendDb() 和 CopyDb() 的一个问题
  • +
  • 修正了 DBF RDD 的 Append() 代码中的一个问题。当调用 Append() 时没有写入数据,那么写入磁盘的记录可能会损坏。现在,Append() 方法可直接写入带空白的新记录。
  • +
  • 现在,XSharp.RDD.DLL 中 Advantage RDD 的完全限定名称与 Vulcan 的 AdvantageRDD.DLL 中的完全限定名称相同。
  • +
    + +
  • 我们在通知中添加了 FileCommit 事件。该事件会在工作区提交时发送。
  • +
    + 宏编译器 + +
  • 宏编译器现在还能识别 Array()、Date() 和 DateTime() 函数。
  • +
  • 修正了别名表达式的问题
  • +
  • 在宏编译器希望使用单一表达式的地方,现在也可以在括号之间使用表达式列表。列表中的最后一个表达式被视为表达式列表的返回值
  • +
    + Visual Studio 集成 + +
  • 在 VS 项目系统中启用了编译时区分大小写的选项
  • +
    + +
  • "格式化文档"的速度有了很大提高。
  • +
  • 现在,“工具/选项 ”中的 XSharp intellisense 选项页面在需要时会显示滚动条。
  • +
  • VO 窗口编辑器中的工具调色板现在有了图标
  • +
    + +
  • 我们为 VO MDI 窗口和 VO SDI 窗口添加了模板。
  • +
    + 生成系统 + +
  • 在编译本地资源时,资源编译器会自动包含一个包含某些定义(如 VS_VERSION_INFO)的文件。
  • +
    + 调试器 + +
  • 在调试器中输入观察表达式或断点条件时,现在可以使用基于 1 的数组索引。现在,我们的调试器在计算表达式时会自动减去 1。
  • +
    + VOXporter + +
  • 修正了 Windows 窗体代码生成中的一个问题
  • +
    + +
  • 现在,您还可以从剪贴板导出单个 MEF 文件、单个 PRG 文件和数据。
  • +
  • VOXPorter 不会触及 #ifdef ... #endif 之间的代码
  • +
    + + Changes in 2.2.1.0 (Bandol GA 2.2a) + 编译器 + +
  • 在编译包含赋值而非 access 的代码时,尝试读取 access 可能会导致编译器异常。这一问题已得到修复。
  • +
    + 运行时 + +
  • 添加了一个缺失的 _Run() 函数
  • +
    + Visual Studio 集成 / 生成系统 + +
  • 修正了一个问题,该问题会导致对话框显示“‘XSharp 项目系统’软件包未正确加载 ”的信息。
  • +
  • 修正了当源文件名称包含带重音的 ASCII 字符或其他大于 128 的字符时,为资源编译器写响应文件的问题。尽管问题已经解决,但我们仍建议不要对文件名进行过多处理,因为这些文件名必须从 Unicode 转换为 Ansi 格式,因为资源编译器只能读取 Ansi 格式的响应文件。
  • +
  • 修正了某些 快速信息/工具提示 窗口的问题
  • +
  • 现在,VO 项目模板在 Vulcan 包含文件的 #include 语句周围添加了一个条件,因为在为 X# 运行时编译时不再需要这些条件。
  • +
  • 已添加对调试器中 “Auto ”窗口的支持
  • +
  • 观察窗口、断点条件等中的表达式现在可以包含 SELF、SUPER 和冒号分隔符。遗憾的是,它们仍然区分大小写。
  • +
    + VOXPorter + +
  • 我们现在可以检测到一个类的字段名和 accesses/assigns 是否相同。这在 VO 中是允许的,但在 .Net 中不再允许。在类中,字段名将以下划线作为前缀。
  • +
  • 现在,我们在 “Trace ”名称前加上 @@,因为这通常用于在 VS 中有条件地编译跟踪代码。
  • +
    + + Changes in 2.2.0.0 (Bandol GA 2.2) + 编译器 + +
  • 编译器现在可以识别函数 Date()、DateTime() 和 Array(),即使它们的名称与类型名称相同。
    `Date()`带有一个参数仍然会被视为将该参数转换为`Date()`,就像下面的例子中一样。
    LOCAL dwJulianDate AS DWORD
    LOCAL dJulianDate  AS DATE
    dwJulianDate       := DWORD( 1901.01.01)
    dJulianDate        := DATE(dwJulianDate) // 这仍然是从 Date 到 DWORD 的转换
    然而,当调用带有 0 个或 3 个参数的 Date 时,要么返回当前日期(如 Today()),要么根据 3 个参数构造一个日期(如 ConDate())。
    DateTime() 函数接受 3 个或更多参数并构造一个 DateTime() 值。
    Array() 函数的参数与 ArrayNew() 函数相同。
  • +
  • 在为 String.Format() 选择重载且通常表达式作为第一引用传递时,我们不再允许编译器选择期望 IFormatProvider 接口的重载之一。
  • +
  • 通过引用传递给未类型化方法/函数的参数现在已设置了 IsByRef 标志。您可以通过 IsByRef(uParameter) 检查参数来查询 “By Reference ”参数。请注意,为参数赋值后,该标记将被清除。
  • +
  • 编译器现在还允许通过引用将别名字段和 memvar 传递给未类型化函数。甚至允许使用未声明的 memvar。
    请注意,对字段和 memvar 的赋值将在函数调用返回后进行。因此,在函数内部,字段或 memvar 仍然保留其原始值。
  • +
  • 在插值字符串中使用“: ”作为发送操作符会产生歧义,因为“: ”也可用于为插值字符串添加格式规范。编译器现在可以检测并允许使用 “SELF:”、“SUPER: ”和 “THIS:”。
    如果你想安全起见,在其他变量的插值字符串中使用“. ”作为发送操作符,或者干脆不使用插值字符串,而是使用 String.Format,就像在下面的一样:
    ? String.Format("{0} {1}", oObject:Property1, oObject:Property2)
    而不是
    ? i"{oObject:Property1} {oObject:Property2}"
    无论如何,编译器都会生成这样的代码
  • +
    + + 宏编译器 + +
  • 宏编译器现在可以识别并编译嵌套代码块,例如
    LOCAL cb := {|e| IIF(e, {||SomeFunc()}, {||SomeOtherFunc}) } AS CODEBLOCK
    cb := Eval(cb, TRUE)   // cb 现在将包含 {||SomeFunc()}
    ? Eval(cb)
  • +
  • 在 FoxPro 方言中,宏编译器现在可将 AND、OR、NOT 和 XOR 识别为逻辑运算符
  • +
    + 运行时 + +
  • 添加了一些 Xbase++ 兼容函数,如 DbCargo()、DbDescend() 和 DbSetDescend()。
  • +
  • DateCountry 枚举现在还有 System 和 Windows 值,它们都从系统中的区域设置读取日期格式。
  • +
  • 我们添加了一个 WrapperRDD 类,您可以继承该类。这样,您就可以封装现有的 RDD,并根据自己的选择对方法进行子类化。有关示例,请参阅 WrapperRDD 文档。
  • +
  • 我们在 CollationMode 枚举中添加了一个 XPP 成员,其编号与 Clipper 相同。这让一些用户感到困惑。现在我们给 XPP 成员一个新的编号。
  • +
  • 现在,OleAutoObject:NoMethod() 在 Vulcan 方言中的行为有所不同(以便与 Vulcan 兼容)。在 Vulcan 方言中,方法名称会插入参数列表的开头。在其他方言中,参数保持不变,您需要调用 NoMethod() 函数来获取最初调用的方法名称。
  • +
  • 运行时状态中的所有设置现在都以默认值初始化,因此运行时状态中的 Settings() 字典将包含所有 Set 枚举值的值。
  • +
  • 之前的更改修正了 Set() 函数在使用字符串 “On ”或 “Off ”为逻辑设置值时出现的问题。由于某些设置未使用逻辑初始化,因此无法正常工作。
  • +
  • 使用 SetCollation(#Ordinal) 创建索引时,速度会更快一些。
  • +
  • runtimestate 现在有一个 EOF 设置。当设置为 “true ”时(FoxPro 方言会自动这样做),MemoWrit() 将在文本文件后写入一个 ^Z (chr(26)),而 MemoRead()在找到该字符时会将其删除。
  • +
  • runtimestate 现在有了 EOL 设置。默认值为 CR - LF (chr(13)+chr(10))。使用 FWriteLine() 写入文件时,该设置用于行分隔符。
  • +
    + RDD 系统 + + +
  • 修复了 DBFCDX RDD 中的锁定问题,该问题会在打开多个应用程序之间以及多个线程之间共享的文件时造成问题。现在,RDD 可以正确检测 CDX 是否被其他进程或线程更新。
  • +
  • 修复了运行多个线程时文件 IO 系统的一个问题
  • +
  • 修正了运行多个线程时 File() 和 FPathName() 函数的一个问题
  • +
  • 已添加对 Workarea Cargo 的支持(请参阅 DbCargo())
  • +
  • 带有尾部空格的数字列返回值为 0。这一问题已得到解决。
  • +
  • 修复了 DBFCDX 驱动程序中的一个问题,该问题会在删除/更新许多键和删除索引页时出现。
  • +
  • 修复 DBF RDD EOF 时的读取错误。
  • +
    + VOSDK + +
  • 修复了在应用程序关闭时调用已关闭服务器的 DbServer 析构函数时出现的问题。
  • +
    + Visual Studio 集成 + +
  • 在一位用户的帮助下,修复了 “括号匹配 ”代码中的速度问题(感谢 Fergus!)。
  • +
  • 调试器运行时,您将无法再编辑源代码。
  • +
  • 我们在项目属性的生成选项中添加了 “注册 COM Interop ”属性。
  • +
  • 我们更新了装配信息模板。它们现在有了 GUID 和 Comvisible 属性。
  • +
  • 编辑器缓冲区中的空行有时会引发异常。现已修复
  • +
  • TEXT ... ENDTEXT 之间的文本不再因编辑器中的格式选项(如缩进或大小写同步)而改变。
  • +
  • 在编辑器中,不完整字符串的颜色与正常字符串相同。
  • +
  • QuickInfo 和 Completion 列表将遵循关键字编辑器的 “格式大小写 ”设置。
  • +
  • 如果没有设置 “工具/选项 ”中的某个选项,那么在加载编辑器中打开文件并保存的项目时可能会出现异常,导致加载的项目中没有可见项目。卸载和重新加载可以解决这个问题。现在这种情况将不再发生。
  • +
  • 我们做了一些更改,使解决方案的打开和关闭速度更快。
  • +
  • 选择 Visual Studio Dark 主题时,某些颜色难以阅读。这一问题已得到修复。
  • +
  • 括号匹配有时会错误地将END CLASS 与 BEGIN NAMESPACE 匹配。这种情况应该不会再发生了。
  • +
  • 修正了在某些情况下打开解决方案时出现的异常,该异常会在 VS 中显示错误,说明 XSharp 项目系统未正确加载。
  • +
  • Windows 窗体、设置和资源的代码生成器现在尊重 “工具”-“选项 ”TextEditor/XSharp 页面中的关键字大小写设置。
  • +
    + VOXPorter + +
  • 以反斜线结尾的文件夹名称可能会混淆 VOXPorter
  • +
    + + Changes in 2.1.1.0 (Bandol GA 2.11) + 编译器 + +
  • 我们为 OUT 参数添加了新语法。现在您可以使用以下语法之一
  • +
    +
      LOCAL cString as STRING
      cString := "12345"
      IF Int32.TryParse(cString, OUT VAR result)      
    // 这将以内联方式声明 out 变量,其类型来自方法调用
         ? "Parsing succeeded, result is ", result
      ENDIF
      IF Int32.TryParse(cString, OUT result2 AS Int32)  
    // 这将声明内联 out 变量,类型由我们指定
         ? "Parsing succeeded, result is ", result2
      ENDIF
      IF Int32.TryParse(cString, OUT NULL)      
    // 这将告诉编译器生成一个 out 变量,我们对结果并不感兴趣。
         ? "Parsing succeeded"
      ENDIF
      IF Int32.TryParse(cString, OUT VAR _)      
    // 会告诉编译器生成一个 out 变量,但我们对结果并不感兴趣。
    + // 名称“_”的特殊含义是 “忽略此内容”。
         ? "Parsing succeeded"
      ENDIF
    + +
  • 编译器现在允许使用 Date()、DateTime() 和 Array() 函数名。运行时具有这些函数(见下文)
  • +
  • 修正了一个预处理器问题,即当 .not. 或 ! 操作符位于 .AND. 或 .OR. 等逻辑操作符之后时,UDC 内的 <token> 匹配标记会停止匹配标记。
  • +
  • 已添加对 <usualValue> IS <SomeType> 的支持。编译器会自动提取 USUAL 的内容并将其封装在一个对象中,然后应用正常的 IS <SomeType> 操作。
  • +
  • 修正了插值字符串中无法正确识别“/”字符的问题。
  • +
  • 编译器现在支持 cursor 访问的 FoxPro 语法。当动态内存变量被禁用时,它总是被转换为从当前游标/工作区读取字段。

      USE Customer
      SCAN
         ? Customer.LastName
      END SCAN
      USE
  • +
    + 如果启用了内存变量,那么这段代码也可能意味着您正试图读取名称为 “Customer ”的变量的 Lastname 属性,就像下面的示例一样: +   USE Invoices
      Customer = MyCustomerObject{}
      SCAN
         ? Customer.LastName, Invoice.Total
      END SCAN
      USE
    + 您也可以使用 M 前缀来表示局部变量或内存变量。编译器会首先尝试将变量解析为局部变量,如果失败,则会尝试将变量解析为内存变量(启用动态内存变量时)。 + 运行时 + +
  • 我们为 FoxPro cursor 访问语法添加了支持功能。
  • +
  • 在 Vulcan 方言中,NoMethod() 方法现在接收方法名作为第一个参数(这与 VO 不兼容)
  • +
  • 新增了函数 Date()(可有 0 或 3 个参数,相当于 Today() 和 ConDate())、DateTime() 和 Array()。
  • +
  • 添加了对接受区域参数的函数进行修复和优化,例如 Used(uArea) 和 Eof(uArea)。
  • +
  • AScan() 和 AScanExact() 现在可在传递 NULL_ARRAY 时返回 0。
  • +
    + + RDD + +
  • 从 DBF 中读取负数时出现问题。现已修复
  • +
  • 修正了 FPT 驱动程序在 FPT 文件中写入长度为 0 字节的数据块时出现的异常。
  • +
  • DBF() 函数在 FoxPro 方言中返回完整文件名,在其他方言中返回别名。
  • +
  • 为完全清空的 DBF 文件创建 CDX 索引时,会为幽灵记录插入索引键。这一问题已得到修复。
  • +
    + + Changes in 2.1.0.0 (Bandol GA 2.1) + 编译器 + +
  • 我们为函数和方法调用中的未类型化参数添加了对引用参数的支持
  • +
  • 在 Xbase++ 和 FoxPro 方言中,用“@”传递的参数总是被视为 BY REF 参数,因为这些方言不支持 “AddressOf” 功能。
  • +
  • 当使用 /undeclared 时,如果实体添加了一个新的 private 属性,那么当实体退出作用域时,该 private 属性不会被清除。这一问题已得到修复。
  • +
  • 编译器未正确处理编译 oObject?:Variable
  • +
  • 修正了调用 SELF:Axit() 时的内部编译器错误
  • +
  • DO 语句的参数现在通过引用传递
  • +
  • 在编译非 Core 方言时,更改了 “必要” 程序集名称的顺序。
  • +
  • 我们新增了对多条 SET 命令的支持,如 SET DEFAULT、SET PATH、SET DATE 和 SET EXACT 等。
  • +
    + 运行时 + +
  • 我们做了一些更改,以使 XSharp.Core 能够在 Linux 上运行
  • +
  • 我们修复了日期类型减法运算符中的一个问题。这改变了减法运算符的签名,迫使我们增加了运行时的 Assemblyversion。
  • +
  • Xbase++ 方言现在允许在常量内的字符串上使用 [] 操作符。它会返回给定位置上一个字符的子串。
  • +
  • 我们更正了 OrderChanged 事件中的一个错误事件
  • +
  • CoreDb.BuffRefresh 向 IRDD.RecInfo() 方法发送了不正确的枚举器值。
  • +
  • IVarList() 函数包含受保护字段和属性。该问题已得到修复。
  • +
  • 如果对象属于 CodeBlock 的子类,则无法使用 IsInstanceOfUsual()。这一问题现已得到修复。
  • +
  • 我们添加了许多工作区相关函数的重载,这些函数带有一个额外参数,用于指示工作区编号或工作区名称。例如 EoF()、Recno()、Found() 和 Deleted() 函数
  • +
  • 我们添加了 Xbase++ collation 表。SetCollationTable() 函数现在可以选择正确的 collation。
  • +
  • 多个与数组相关的函数现在可以更好地检查 NULL 数组
  • +
  • 错误类中的 SubcodeText 属性现在是读/写属性。当值尚未写入时,将使用子代码编号来查找该属性的值。
  • +
  • MExec() 并不总是计算已编译的代码块。该问题已得到修复。
  • +
  • 我们添加了一些缺失的三角函数,如 ACos()、ASin() 等。
  • +
  • 在 Xbase++ 方言中,FieldGet() 和 FieldPut() 函数不再因字段号不正确而出错。
  • +
  • 我们添加了一个缺失的 MakeShort() 函数和 SEvalA() 函数。
  • +
  • DateCountry 设置现在包括一个系统设置,它将从当前文化的设置中读取日期格式。
  • +
    + 宏编译器 + +
  • 宏编译器检测到不明确的方法或构造函数时,会在错误信息中包含这些方法或构造函数的签名。
  • +
  • 我们添加了一个新的 IMacroCompiler2 接口,它增加了一个额外的属性 “Resolver”。该属性可接收一个 “MacroCompilerResolveAmbiguousMatch ”类型的委托。该委托的原型如下:
    DELEGATE MacroCompilerResolveAmbiguousMatch(m1 as MemberInfo, m2 as MemberInfo, args as System.Type[]) AS LONG
  • +
  • 当宏编译器检测到模棱两可的匹配时,将调用该委托,并接收可能候选的 System.Reflection.MemberInfo 和检测到的参数类型数组(编译时检测到)。委托可以返回 1 或 2,以便在任一候选变量中做出选择。任何其他值都意味着委托不知道要选择哪个模棱两可的成员。
    如果宏编译器发现有 2 个以上的备选方案,它会首先调用备选方案 1 和 2 的委托,然后再调用从备选方案 2 和备选方案 3 中选出的委托,等等。
  • +
  • 您可以将函数或方法注册为新函数的委托
    SetMacroDuplicatesResolver()
  • +
  • 我们现在可以处理(一级)嵌套宏。因此,宏编译器可以正确编译以下代码块
    {|e| iif(e, {||TRUE}, {||FALSE})}
  • +
  • 宏编译器现在允许在整数和逻辑之间进行比较(就像运行时中的普通类型一样)。但仍不建议这样做!
  • +
  • 宏编译器现在允许使用'['和']'作为字符串分隔符。这在普通编译器中是不允许的,因为这些分隔符无法与属性区分开来。
  • +
  • 我们修正了一个问题,即当方法名与 Usual 类型中的方法名或属性名(如名称为 Item() 的方法)相匹配时,需要进行后期绑定调用。
  • +
  • 宏编译代码块的 PCount() 总是返回 1。这一问题已得到修复。
  • +
    + VOSDK + +
  • 修正了代码中未关闭的 DbServer 对象的问题。
    现有代码试图通过析构函数关闭工作区。但在 .Net 中,析构函数在一个单独的线程中运行,而在该 GC 线程中没有打开的文件...
  • +
  • 删除了对 DbfDebug() 的不必要调用
  • +
  • AdsSqlServer 类现已添加到 VORDDClasses 程序集中
  • +
    + RDD + +
  • 我们更正了一个关于解析错误或空日期的问题
  • +
  • 我们更正了在 Advantage RDD 中读取日期时可能导致堆错误的问题。
  • +
  • 我们为 Advantage 支持添加了几个 “缺失 ”功能,这些功能在 VO 的 “Ace.Aef ”中已有
  • +
  • 我们新增了对 Character 字段 > 255 字符的支持
  • +
  • DbSetScope() 现在会将记录指针移动到与新作用域匹配的第一条记录上。
  • +
  • 使用 SetAnsi(TRUE) 的 DBFNTX 驱动程序 DbCreate() 创建的文件第一个字节为 0x07(或 0x87)。
    在 Xbase++、FoxPro 和 Harbour 方言中不再出现这种情况,因为第一个字节只针对 VO
  • +
  • 某些 FoxPro 备注值在写入时末尾会多出一个 0 字节。现在,在读取这些值时,这个额外的字节将被抑制。
  • +
  • 我们修复了 CDX 文件中版本号未更新的问题,并改进了 CDX 锁定功能。
  • +
  • 当索引标题中的标签名称不是大写字母时,Xbase++ 无法识别 NTX 索引。该问题已得到修复。
  • +
  • 我们修复了创建 CDX 索引时的一个(性能和大小)问题。
  • +
  • 当打开一个没有字节编码的 DBF 文件时,我们默认使用当前的 Windows 或 DOS 编码,具体取决于当前的 SetAnsi() 设置。
  • +
  • 优化了numeric、date 和 logical 列的读取
  • +
  • +
    + Visual Studio 集成 + +
  • 修复了 WCF Service 模板
  • +
  • 我们已将项目系统迁移到异步 API。这将使包含大量 X# 项目的解决方案的加载速度更快一些。
  • +
  • 修正了关键字大小写同步中可能导致用户界面锁定数秒的问题
  • +
  • 修正了 BraceMatching 代码中的一个异常。
  • +
  • 取消行块注释有时会在空行前留下注释。这一问题已得到解决。
  • +
  • 我们改进了类型、方法、字段、属性和参数的(XML)文档查找。
  • +
  • 我们改进了 X# 项目之间的类型查找。
  • +
    + VOXPorter + +
  • 现在还可导出 DbServer 和 FieldSpec 实体
  • +
  • VOXPorter 现在还能生成一个单独的项目/应用程序,其中包含 VO 应用程序中 VO 图形用户界面窗口的 Windows 窗体版本。
  • +
  • 运行 VOXPorter 时,您现在可以选择导出到 XIDE、Visual Studio 或两者。
  • +
    + + Changes in 2.0.8.1 (Bandol GA 2.08a) + 编译器 + +
  • 修正了预处理器中的递归问题
  • +
  • 不再能正确检测 MEMVAR-> 和 FIELD-> 现已修复。
  • +
  • 我们更正了 dbcmd.xh 中的几个问题
  • +
  • 修正了 Lambda 表达式中 return 语句的一个问题。
  • +
  • = Expression() 语句(FoxPro 方言)未生成任何代码。现已修复。
  • +
    + 运行时 + +
  • XPP.Abstract.NoMethod()和 XPP.DataObject.NoMethod() 仍然将方法名称作为第一个参数。这个问题已得到修复。
  • +
  • 由于参数不正确,StretchBitmap() 的效果与 ShowBitmap() 相同。这一问题已得到修复。
  • +
    + Visual Studio 集成 + +
  • 改进了格式化文档代码
  • +
  • 修正了 VS 解析器在查找使用 VAR 关键字定义的变量类型时出现的一个问题,该问题可能导致 VS 陷入无尽循环。
  • +
  • TEXT ... ENDTEXT 块的内容以及 \ 和 \\ 标记后的一行现在有了自己的颜色
  • +
    + + Changes in 2.0.8 (Bandol GA 2.08) + 编译器 + +
  • 编译器在 “return ”属性目标上出了问题
  • +
  • 现在,“statementblock”(语句块)规则内的错误能被更好地检测出来,编译器不会再在这些正确的代码行之后报告许多错误。
  • +
  • 修复了与逻辑转换相关的问题。
  • +
  • 修正了将未声明变量用作 For 循环计数器的问题
  • +
  • 改进了前缀操作、后缀操作和赋值中 FIELD、MEMVAR 和未声明变量的代码生成。
  • +
  • 在涉及默认参数时,改进了参数为 ref 或 out 变量的方法调用的代码生成。编译器现在会为这些调用生成额外的临时变量。
  • +
    + +
  • 在与此相关的方言中,编译器现在还支持 ENDFOR 作为 NEXT 的别名和 FOR EACH 作为 FOREACH 的别名。
  • +
  • 已添加对 DO <proc> [WITH arguments] 语法的支持
  • +
    + 运行时 + +
  • 当要创建文件的基本文件名已作为别名打开时,DbCreate() 函数现在会创建一个唯一的别名
  • +
  • 现在,USUAL 值的数值溢出检查与主程序的溢出检查相同
  • +
  • DbUnLock() 现在接受记录编号(可选)作为参数
  • +
  • XMLGetChild() 在未找到元素时会抛出异常
  • +
  • XMLGetChildren() 引发异常
  • +
  • 修正了 “dbcmds.xh ”中 2 条规则的一个问题
  • +
  • XSharpDefs.xh 文件现在会自动包含 “dbcmd.xh”。
  • +
  • 错误报告了一些数据类型错误。
  • +
  • 后期绑定代码的 “NoMethod ”方法在调用时使用了不正确的参数。这一问题已得到修复。
  • +
  • 修正了将带有 NIL 值的 usuals 转换为字符串或对象时出现的一些问题。
  • +
  • 在 Xbase++ 中,Set() 函数也接受逻辑设置值为 “ON ”或 “OFF ”的字符串。我们现在也允许这样做。
  • +
  • Set(_SET_AUTOORDER) 现在可以像在 VO 中一样接受第二个数字参数(Vulcan 使用的是逻辑参数)。
  • +
  • 我们在 FoxPro 类层次结构中添加了一些支持类,用于支持 FoxPro 类(Abstract、Custom 和 Collection)。稍后还将添加更多的类。
  • +
  • 修正了转换和“@ez ”图片的问题。
  • +
    + VOSDK + +
  • 修复了 SQLSelect 类中重新打开 cursor 时的一个问题。
  • +
    + RDD 系统 + +
  • 修复了读取 Advantage MEMO 字段的问题
  • +
  • 改进了因索引表达式错误(如缺少函数)而无法打开索引时的错误信息
  • +
  • 我们添加了在 RDD 系统中安装事件处理程序的选项。更多信息,请参阅主题 Workarea 事件 。
  • +
  • 对于只有 0 条记录的工作区,Skip、Gobottom 和其他更改当前记录的工作区操作将不再把 EOF 设为 FALSE。
  • +
  • 在没有设置作用域的情况下,清除 Advantage 工作区中的作用域会产生异常。这一问题已得到修复。
  • +
  • 在没有锁定记录的情况下,解锁 Advantage 工作区中的记录会出现异常。这一问题已得到修复。
  • +
  • DbSetRelation() 无法正常工作。现已修复。
  • +
    + VS 集成 + +
  • 修复了 DbServer 和 FieldSpec 实体代码生成中的一个问题
  • +
  • 已添加对 DbServer 编辑器中导入和导出按钮的支持
  • +
  • 改进了 Xbase++ 方言编辑器内的实体解析。
  • +
  • 除非源文件本身有预处理标记,否则 VS 解析器不会对 UDC 标记(包括ENDFOR)着色。这一问题已得到修复。
  • +
  • 改进了对新END关键字的块检测。
  • +
  • VS 集成现在可以识别 VFP 类型类的类语法。
  • +
  • 修正了代码中的一个问题,即检查哪个项目系统 “拥有” PRG 扩展名。
  • +
  • 在 “项目属性 ”页面中添加了编译器选项,以抑制生成默认的 Win32 清单。
  • +
    + VOXporter + +
  • VOXPorter 忽略了未在 VO 中正确建立原型的实体。这一问题已得到修复
  • +
    + FoxPro 方言 + +
  • 我们添加了一个编译器选项 /fox1,用于控制对象的类层次结构。启用 /fox1(FoxPro 方言中的默认值)后,所有类都必须从 Custom 类继承。属性代码生成会将属性值保存在自定义类内部的一个集合中。启用 /fox1- 后,属性将生成为带有后备字段的 “auto” 属性。
  • +
  • 我们增加了对 FoxPro 类的支持。请参阅 FoxPro class 了解有关哪些有效,哪些无效的更多信息。
  • +
  • 我们新增了对 DIMENSION 和 DECLARE 语句的支持(这些语句可创建一个用数组初始化的 MEMVAR)
  • +
    + + Changes in 2.0.7 (Bandol GA 2.07) + 可能的突破性变化 + +
  • 我们删除了标准头文件中的 #define CRLF。现在 XSharp.Core 中有一个 DEFINE CRLF。如果你在针对 Vulcan 进行编译时发现缺少 CRLF 的错误,那么你可能需要在代码中添加以下内容:
    DEFINE CRLF := e”\r\n”
  • +
    + 编译器 + +
  • 导致标记列表为空的 UDC 会在预处理器中引发编译器错误。这一问题已得到修复。
  • +
    + +
  • 如果底层数组类中不存在方法,在数组上调用方法将被转换为以方法名称为参数的 ASend()。
    如果出现这种情况,编译器会发出警告。
  • +
  • 编译器对(USUAL)转换产生了错误的代码。这个问题已经修复。在极少数情况下,这可能会导致编译错误。如果发生这种情况,只需通过调用USUAL构造函数创建一个usual:USUAL{somevalue}
  • +
  • 修正了在 CLASS ... END CLASS 之外声明的方法的若干问题
  • +
  • 在 FoxPro 方言中,现在允许使用 NOT、AND、OR 和 XOR 作为 .NOT.、.AND.、.OR.和 .XOR. 的替代语法。
  • +
  • 在 FoxPro 方言中,您现在可以在文件的第一个实体之前加入语句。编译器会识别这些语句,并自动以源文件的名称创建一个函数,并将这些语句中的代码添加到该函数的主体中。
  • +
  • 启用 /vo7 后,编译器现在允许将整数表达式转换为逻辑表达式。对于整数类型的表达式,始终支持 LOGIC(_CAST。
  • +
  • 现在,编译器能更早地检测到语言功能的错误使用(如在 Core 或 FoxPro 方言中使用 VOSTRUCT),从而加快了错误代码的编译速度。
  • +
  • 现在,当启用 /vo2 时,编译器也会使用空字符串初始化多维字符串数组,就像下面的代码一样:
    CLASS TestClass
      EXPORT DIM aDim[3,3] AS STRING
    END CLASS
  • +
    + +
  • 在以前的版本中,如果调用 SELF() 或 SUPER() 的源代码行紧跟在 CONSTRUCTOR() 之后,则无法在该行上设置断点。这一问题已得到修复。
  • +
  • 如果项目包含“_DLL METHOD”、“_DLL ASSIGN ”或“_DLL ACCESS”(从 VO 导出后),编译器现在会生成更有意义的错误信息。
  • +
  • 当一个源文件包含许多相同的错误时,编译器将不再产生数百条相同的错误信息。每个源文件出现 10 个错误后,编译器只会报告唯一的错误编号。因此,如果您的源代码有 20 条不同的错误信息,那么您仍将看到 20 条错误报告,但如果您的源代码包含 100 次相同的错误类型,那么错误列表将在 10 条错误后被截断。
  • +
  • 编译器不再允许代码位于ENDIF 或 NEXT 等结束标记之后。标准头文件 “XSharpDefs.xh ”现在包含了消除这些标记的规则。
  • +
    + 运行时 + +
  • 用于 usualtype 的 ++ 和 -- 操作符对日期和日期时间值不起作用
  • +
  • 当源文件不存在时,FErase() 和 FRename() 现在会将 FError() 设置为 2
  • +
  • File() 函数曾因路径中包含无效字符而引发异常。现在它返回 FALSE 并设置 Ferror()
  • +
  • 一些特定的数字产生了不正确的 Str() 结果。现已修复。
  • +
  • 若干类型的 Value 属性名称的大小写从 Value 更改为 VALUE。这给从 C# 代码连接 X# 代码的用户带来了麻烦。现在已恢复原来的大小写。此更改已被撤销。
  • +
  • 在某些情况下,错误堆栈不会包含完整的帧列表。这一问题已得到解决。
  • +
  • 扩大了错误对话框中关闭和复制按钮的大小,以便为翻译字符串留出更多空间
  • +
  • 对于 NIL 值,Pad...() 函数返回的是 “NIL ”的填充版本。这与 Xbase++ 不兼容。现在,它们会返回一个包含所有空格的字符串。顺便说一句:当你调用带有 NIL 值的 Pad..() 时,VO 会抛出一个异常。
  • +
  • 修正了 PadC() 函数在数值大于 1 个字符时出现的问题。
  • +
  • 我们修改了 Val() 函数,使其与 Visual Objects 更加兼容
  • +
  • 运行时包含 Space() 函数的第二个重载,它接受一个 Int 参数。这导致宏编译器出现问题。该重载已被删除。因此,您可能需要修改代码。
  • +
  • 修正了 EnforceType() 和 EmptyUsual() 中与 STRING 类型有关的一个问题
  • +
  • AEval 和 AEvalOld() 现在都将数组索引作为第二个参数传递给被求值的代码块
  • +
    + RDD 系统 + +
  • 修正了一个问题,即在打开带索引的空 DBF 时,EOF 和 BOF 未同时设为 true。
  • +
  • 修复了 DBFNTX 和 DBFCDX 的 DbSeek() 和 Found() 的一个问题
  • +
  • DBF 类无法正确解码包含 Ascii 字符 > 127 的字段名和/或索引表达式(字段名如 STRAßE)。
  • +
  • 在关闭 dbf 时,即使没有任何更改,文件日期也会被更新。该问题已得到修复。
  • +
  • 运行时现在包含在关机时关闭所有打开的工作区的代码。这将有助于防止 DBF 或索引损坏。
  • +
  • 索引顺序更改后,Advantage RDD 会自动执行 GoTop。现在这种情况不再发生。
  • +
  • Advantage RDD 现在会在失败前重试几次打开 DBF 和索引文件。
  • +
  • 修复了 DBFCDX 和 AXDBFCDX 之间的一个小的不兼容问题
  • +
    + VS 集成 + +
  • Core 类库模板的文件名中有一个错字,导致无法正确加载该模板
  • +
  • Windows 窗体编辑器的代码生成器重复使用 USING 语句。这一问题已得到解决。在设计器中打开和保存表单时,重复的 using 语句将被删除。
  • +
  • 编译消息现在仅在生成详细程度为正常或更高时显示在输出窗口上,包括编译时间、警告和错误数量。如果存在编译器错误,警告和错误消息也会显示在较低生成详细程度下。
  • +
  • 如果项目文件是用 2.0.1 版或更高版本创建的,项目系统将不再更新项目文件中的版本号。
  • +
  • 修正了设置和清除程序集引用的 “特定版本 ”属性时出现的问题。
  • +
  • 兼容 VO 编辑器的默认模板现在安装在 XSharp\Templates 文件夹中,当项目中没有模板时,编辑器会将此位置作为 “后备”。
  • +
  • 现在,“属性 ”文件夹在 “项目 ”树中被列为第一个子文件夹,而 “VO 二进制文件 ”项目在 “项目 ”树中源代码项目的子文件夹列表中被置于资源项目之前。
  • +
    + VOXporter + +
  • VOXPorter 现在以 @@ 作为调试令牌的前缀。
  • +
  • VOXPorter 现在可删除同时声明为 ACCESS/ASSIGN 的属性的 INSTANCE 声明
  • +
  • VOXPorter 现在可在以 .AND 或 .OR. 分隔的变量名之间添加空格。 因此,“a.and.b ”变为 “a .and. b”。
  • +
    + 文档 + +
  • 我们已经“提取”了一些 Visual Objects 运行时函数的文档,并将其添加到我们的运行时文档中。这是一个正在进行中的工作,一些主题需要额外的工作。
  • +
    + + Changes in 2.0.6.0 (Bandol GA 2.06) + 常规 + +
  • 我们收到了关于简化版本号的请求。因此,新版本被称为 Bandol 2.06,文件版本也是 2.06。运行时程序集的程序集版本均为 2.0,我们打算尽可能保持这些版本的稳定,因此您不必被迫重新编译依赖于运行时程序集的代码。
  • +
  • 2.0.5.0 中应包含的几个修复未包含在对应版本中。这已在 2.0.6.0 中得到纠正。
  • +
    + 编译器 + +
  • 缺少 ENDTEXT 关键字现在会产生错误 XS9086
  • +
  • 不平衡的文本合并分隔符会产生警告 XS9085
  • +
  • 现在,FoxPro 方言中的 TEXT 关键字只有在它是一行中第一个非空格符号时才会被识别。因此,您又可以在预处理器命令中使用 <text> 这样的标记了。
  • +
  • 对字面字符串进行 VO 转置操作时,编译器不再就可能的内存泄漏发出警告。
  • +
    + + 运行时 + +
  • 后期绑定代码中的运行时错误总是显示为 TargetInvocationException。这样就隐藏了错误的真正原因。现在我们正在解包该错误并重新抛出原始错误,包括导致该错误的调用堆栈
  • +
  • 更新了字符串资源中的一些文本
  • +
  • 在长度和/或小数的值为 -1 时调用 Str() 函数,会产生与 VO 不兼容的结果。这一问题已得到修复。
  • +
  • 修正了 DBZap() 和带有 DBT 备注文件的一个问题。
  • +
  • 在某些情况下,打开空 DBF 文件时 EOF 和 BOF 未设置为 TRUE。这一问题已得到修复。
  • +
  • 内部指针不正确的 PSZ 值现在显示为 "<Invalid PSZ>(..)"
  • +
    + + RDD 系统 + +
  • 在 Advantage 工作区中读取和写入列的代码现在使用单独的 column 对象,就像 DBF RDD 的代码一样。这使代码更容易理解,速度也会更快。
  • +
    + + VS 集成 + +
  • TEXT 和 ENDTEXT 之间的文本块现在显示为与字面字符串相同的颜色
  • +
  • 与 VO 兼容的项目项目模板不再自动添加对项目的引用
  • +
  • 使用此版本的 X# 项目系统打开 2.01.0 及更高版本的项目文件时,将不再 “接触 ”这些文件,因为自该版本发布以来,项目文件格式未作任何更改。
  • +
    + + VOXporter + +
  • 生成的 Start 函数中的 CATCH 块现在调用 ErrorDialog() 来显示错误。它使用新的语言资源来显示完整的错误,并提供与 VO 兼容的错误信息(Gencode、Subcode 等)。
  • +
    + + Changes in 2.0.5.0 (Bandol GA 2.01) + 编译器 + +
  • END PROPERTY 后的空行可能会使编译器感到困惑。现已修复
  • +
  • 编译器中已执行 TEXT ... ENDTEXT 命令(仅限 FoxPro 方言)
  • +
  • \ 和 \\ 命令已经实现(仅适用于 FoxPro 方言)
  • +
  • FoxPro 方言中的程序现在可以返回值。此外,/vo9 选项现在在 FoxPro 方言中默认为启用。在 Foxpro 方言中,FUNCTION 和 PROCEDURE 的默认返回值现在是 TRUE,而在其他方言中则是 NIL。
  • +
  • 错误信息不再使用 Xbase 类型的内部名称 (XSharp.__Usual) 而使用其正常名称 (USUAL)。
  • +
    + 宏编译器 + +
  • 创建带有命名空间前缀的类不起作用。现已修复。
  • +
    + 运行时 + +
  • 修正了 ArrayNew() 和多个维度的一个问题
  • +
  • 使用数字调用数组类的构造函数时,元素已被初始化。这与 Vulcan.NET 不兼容。现在有了一个额外的构造函数,它接受一个逻辑参数 lFill,可用于自动填充数组。
  • +
  • ERROR_STACK语言资源的文本已更新
  • +
  • 使用整数调用 Str() 会返回与 VO 稍有不同的结果。这一问题已得到修复。
  • +
  • 添加了 TEXT ... ENDTEXT 和 TextMerge 的支持函数以及输出文本文件。
  • +
  • 修正了 DTOC() 函数中的一个问题
  • +
  • 现在您可以为程序集添加多个 ImplicitNamespace 属性
  • +
  • 我们添加了几个 FoxPro 系统变量(目前只有 _TEXT 有作用)
  • +
    + RDDs + +
  • Zap 和 Pack 操作未正确设置 DBF 文件大小
  • +
  • 共享模式下的 Append() 无法正确设置 RecCount
  • +
  • 使用 Advantage SQL RDDs 之一打开文件不起作用。现已修复。
  • +
  • 将 DateTime.Minvalue 写入 DBF 时不会写入空日期,而是写入日期 1.1.1 已修复此问题。
  • +
    + VO SDK + +
  • 修正了 ListView:EnsureVisible() 中的一个问题。
  • +
  • 一些可疑的类型转换(比如导致之前问题的那个)已经被清理掉。
  • +
    + Visual Studio 集成 + +
  • 构造函数调用的参数提示偏差了一个参数。现已修复。
  • +
  • 在查找类型时,XSharp 命名空间现在是首先搜索的命名空间。
  • +
    + + Changes in 2.0.4.0 (Bandol GA) + 编译器 + +
  • 修正赋值表达式中的一个问题,即左侧是一个带有括号中工作区的别名表达式:
    (nArea)->LastName := AnotherArea->LastName
  • +
  • 多行语句(如 FOR 块)不再在调试器中生成多行断点。
  • +
  • 修正了一个问题,即类定义后的空行或带有 “非活动 ”预处理器注释的行会产生编译器错误。
  • +
  • 如果不支持 INT/DWORD 和 PTR 之间的隐式转换,现在会产生更好的错误信息。
  • +
  • USUAL.ToObject() 在启用 latebinding 编译器选项时无法调用。这一问题已得到修复。
  • +
  • 修正了未类型化 STATIC LOCAL 的内部编译器错误。
  • +
  • 修正了别名表达式的一个问题。
  • +
  • 索引 PSZ 值不再受 /az 编译器选项的影响
  • +
    + 宏编译器 + +
  • 修正了一些别名表达式的问题
  • +
  • 宏编译器现在能检测到您在自己的代码中重载内置函数,不再抛出 “方法不明确 ”异常,而是选择您代码中的函数,而不是 X# 运行时中定义的函数。
  • +
    + 运行时 + +
  • 修正了 Directory() 函数中的几个问题
  • +
  • 修复了 PSZ 值索引问题
  • +
  • 在错误对象上添加了 StackTrace 属性,这样在 BEGIN SEQUENCE 中捕获的错误也会有堆栈信息。
  • +
  • 修正了与 NaN、PositiveInfinity 等 “特殊 ”浮点数值和 ToString() 有关的问题
  • +
  • 修正了参数为 null 的 RddSetDefault() 的一个问题
  • +
  • DbInfo(DBI_RDD_LIST) 未返回值。这一问题已得到修复。
  • +
  • 我们更新了许多语言资源,此外,Error:ToString() 现在使用语言资源来显示 “参数 ”和 “说明 ”等标题。
  • +
  • 低级文件错误现在包括调用堆栈
  • +
  • 修正了 AsHexString() 中的一些问题
  • +
  • DosErrString() 不再从语言字符串表中获取信息。这些信息以及 XSharp.VOErrors 枚举中的相关成员已被删除。
  • +
  • 添加了土耳其语资源。
  • +
    + RDD 系统 + +
  • 修复 FPT 文件中的锁定问题
  • +
  • 修复了 OrdKeyCount() 和过滤器、作用域以及 SetDeleted() 设置中的若干问题
  • +
  • 有些 DBF 文件在不支持小数的字段类型的字段定义的 “小数 ”字节中有一个值。这导致了一些问题。现在这些小数将被忽略。
  • +
  • 在未作更改的情况下打开和关闭 DBF 会更新时间戳。这一问题已得到修复。
  • +
  • 修复了 Pack() 和 Zap() 中的问题
  • +
  • 修正了一个意外更新自定义索引的问题。
  • +
  • 修正了 OrdKeyCount() 与过滤器、SetDeleted() 和作用域结合使用时的若干问题。
  • +
    + VO SDK 类 + +
  • 现在,大多数程序库在编译时都禁用了 “后期绑定 ”功能,以提高性能。
    为了帮助实现这一点,我们添加了一些类型化属性,例如 SqlStatement:__Connection 类型为 SQLConnection.
  • +
    + Visual Studio 集成 + +
  • 修复了 Brace 匹配代码中的一个问题
  • +
  • 改进关键字的 Brace 匹配。新增了多个 BEGIN ... END 结构,以及 DO CASE 内的 CASE 语句和 SWITCH、RECOVER、FINALLY、ELSE、ELSEIF 和 OTHERWISE 语句。
  • +
  • 修复在引用已卸载或不可用时添加和删除引用的问题。
  • +
    + VOXPorter + +
  • 在导出到 XSharp 时,程序现在可以注释、取消注释和删除 VO 代码中的源代码行。
    您必须在行尾添加注释。支持以下注释:
  • +
    + // VXP-COM : comments the line when exporting it
    // VXP-UNC : uncomments the line
    // VXP-DEL : deletes the line contents

    示例:
    // METHOD ThisMethodDoesNotGetDefinedInVOcode() // VXP-UNC
    // RETURN NIL // VXP-UNC
    + + Changes in 2.0.3.0 (Bandol RC3) + 编译器 + +
  • 选择 /vo2 时,STRING 类型的 STATIC LOCALs 的代码生成不会将变量初始化为空字符串。我们还改进了用编译时常数初始化 STATIC LOCAL 时的代码生成。
  • +
  • 为了支持通过引用传递给函数/方法的变量,我们现在将在函数/方法结束时将局部变量分配回参数数组。
  • +
  • 如果您将一个枚举的值赋值给另一个枚举的变量,编译器不会抱怨。这一问题已得到解决。
  • +
  • 添加了对 FoxPro '=' 赋值操作符的支持。其他方言也允许使用赋值操作符,但在其他方言中会产生警告。
  • +
  • 无法识别 BEGIN NAMESPACE ... END NAMESPACE 中的 Xbase++ 类。这一问题已得到修复。
  • +
  • WITH 块内的语句不再局限于赋值表达式和方法调用。现在,您可以在 WITH 代码块内的任何地方使用 WITH 语法来表达表达式。如果编译器无法找到 WITH 变量,则会输出一条新的错误信息 (XS9082)
  • +
  • 更新了别名表达式规则,以确保复合表达式正确使用括号。
  • +
  • __DEBUG__ 宏并非总是能正确设置。我们更改了设置该宏的算法。当 DEBUG 定义被设置后,该宏就会被定义。 如果设置了 NDEBUG 定义,则没有定义该宏。如果两个定义都不存在,则不设置 __DEBUG__。
  • +
  • 编译器允许您在字符串和逻辑类型的变量/表达式之间使用 “+”运算符。现在这已被标记为错误。
  • +
    + 宏编译器 + +
  • 修正了在解析与关键字或关键字缩写(如 DATE 和 CODE)相同的字段名以及与内置函数名(如 SET)相同的字段名时出现的问题
  • +
  • 修正了一个问题,即使用别名前缀求值的复杂表达式无法正确求值。
  • +
  • 宏编译器根据运行时的方言选项进行初始化,以启用/禁用某些行为。
  • +
  • 在 FoxPro 方言中运行时,宏编译器现在可以识别用于工作区访问和 memvar 访问的“. ”操作符。
  • +
    + 运行时 + +
  • 已添加函数 FieldPutBytes() 和 FieldGetBytes()
  • +
  • 添加了函数 ShowArray()
  • +
  • 添加了几个缺失的定义,如 MAX_ALLOC 和 ASC_A。
  • +
  • 已添加可接受 BYTE[] 参数的 Crypt() 重载
  • +
  • DataObject 类(XPP 方言)的 ClassDescribe() 方法现在包括动态添加的属性和方法。
  • +
  • 修正了 MemVars 的 RELEASE 命令的一个问题。这也会释放在当前函数/方法之外定义的变量。
  • +
  • 现在,FoxPro 方言与其他方言在 RELEASE 命令的行为上也有区别。
    FoxPro 完全删除变量,而其他方言则将变量值设为 NIL。
  • +
  • 在 FoxPro 方言中,新的 PRIVATE 内存变量初始化为 FALSE。在其他方言中,它们被初始化为 NIL。
  • +
  • 当写入一种类型的数值,而读取时预期是另一种类型的数值时,RuntimeState 中的某些数值属性会出现问题。这一问题已得到修复。
  • +
  • 修正了宏编译代码块返回 NIL 值的问题。
  • +
  • DbClearScope() 的参数现在是可选的了
  • +
  • USUAL 类型现在可以在 PTR 和 LONG/INT64 类型的值之间进行比较,PTR 值被转换为相应的整数类型,然后进行整数比较。
  • +
  • USUAL 类型现在还允许在任何类型和 NIL 之间进行比较。
  • +
  • 不再检查从 USUAL 值到 SHORT、WORD、BYTE 和 SBYTE 的转换是否与 VO 兼容。
  • +
    + RDD 系统 + +
  • 在 DBFFPT 中添加了对不同块大小的支持。
  • +
  • DBFFPT 现在允许从用户代码中覆盖块大小(创建时)。请注意,块大小小于 32 字节时,FPT 无法在 Visual FoxPro 中打开。
  • +
  • 已添加对读取各种 Flexfile 备注字段类型(包括数组)的支持。
  • +
  • 已添加对写入 FPT 文件的支持
  • +
  • 创建 FPT 文件时,我们现在也会写入 FlexFile 头文件。请注意,我们的 FPT 驱动程序不支持像 FlexFile 那样对删除的块进行 “记录回收”。我们也只支持向 FPT 文件写入 STRING 值和 Byte[] 值。
  • +
  • 已添加对使用 COLLATE 选项创建的 Visual FoxPro CDX 文件的支持。RDD dll 现在包含校对和 CodePage 所有可能组合的校对表。
  • +
  • 已添加对带有 NIL 值的 USUAL 和比较运算符(>, >=, <, <=)的支持。除了 >= 和 <= 操作符在比较的两边都是 NIL 时返回 TRUE 外,这些操作符都返回 FALSE。
  • +
  • 我们公开了多个与 Advantage 相关的函数和类型。此外,我们还定义了 AdsConnect60() 函数。我们没有为 Ace32 和 Ace64 中的所有可用函数创建函数,只创建了 RDD 中需要的函数。
  • +
  • 如果您缺少 ACE 类中的某个函数,请告知我们。现在,Ace32 和 Ace64 类或 ACEUNPUB32 或 ACEUNPUB64 类中的所有功能都应可用并可访问。
  • +
  • ADS RDD 返回的逻辑字段值不正确。
  • +
  • 修复了 CDX 索引、作用域和过滤器中跳过的一些问题。
  • +
  • 对 DBFCDX 执行两次 DbGoTop() 或两次 DbGoBottom() 会混淆 RDD。这一问题已得到修复。
  • +
  • 修复了空 DBF 文件中 Seeking() 的一个问题
  • +
  • Advantage RDD 中 STRING 字段的 FieldPut 现在会在赋值前将字段截断到最大长度
  • +
  • 修正了 UNIQUE CDX 索引的一个问题。
  • +
  • 现在,您可以使用 DBCreate() 创建与 VFP 兼容的 DBF 文件。为此,请使用以下字段类型(除常规 CDLMN 外):
  • +
    + WBlob
    YCurrency
    BDouble
    TDateTime
    FFloat
    GGeneral
    IInteger
    PPicture
    QVarbinary
    VVarchar
    + 特殊字段标志可通过在类型后添加后缀来表示: + "0" = Nullable
    "B" = Binary
    "+" = AutoIncrement
    + 这样就创建了一个null日期:“D0”,并创建了一个自动递增整数 “I+”。 + 自动递增列的初始化计数器从 1 开始,步长为 1。 您可以通过调用 DbFieldInfo 来更改: + DbFieldInfo(DBS_COUNTER, 1, 100) // 将字段 1 的计数器设置为 100
            DbFieldInfo(DBS_STEP, 1, 2)   // 将字段 1 的步长设置为 2
    + +
  • 修复了在共享模式下打开 FPT 文件时的锁定问题
  • +
  • 修复了 DBFCDX RDD 中与 OrderKeyCount() 以及 Scopes 和 SetDeleted() 的各种设置有关的若干问题。
  • +
    + VO SDK 类 + +
  • 修正了 DateTimePicker 类中只分配时间值时的一个问题。
  • +
  • 对 System 和 RDD 类进行了一些清理,现在可以在 AnyCPU 模式下编译。这意味着你可以在 64 位程序中使用 DbServer 类!
    这两个库的项目也不再启用 “后期绑定 ”编译器选项。这些库中仍有一些后期绑定代码,但这些代码现在使用显式后期绑定调用,如 Send()、IVarGet() 和 IVarPut()。
  • +
  • 由于 __DEBUG__ 处理方式的改变,某些 SDK 程序集没有得到更好的优化。
  • +
    + Visual Studio 集成 + +
  • 在编辑器中添加了对 WITH ... END WITH 块的支持
  • +
  • 生成本地资源(RC 文件)时,BuildSystem 现在会设置 #define __VERSION__。这将包含 XSharp.Build.DLL 的文件版本号,但不带点。(2.1.0.0 将被写成 “2100”)。
  • +
  • VS 帮助菜单中的 XSharp 帮助项目现在可打开本地帮助 (CHM) 文件
  • +
  • 修复了 WCF service 模板中的一个问题
  • +
  • 对使用属性的代码的多行缩进进行更正
  • +
  • 新事件处理程序的代码生成现在包括 RETURN 语句,即使 VS 没有在语句列表中添加该语句也是如此
  • +
  • 已禁用 intellisense 选项 “在每个字符后显示完成列表”,因为它会对性能产生负面影响,而且还会插入前面带有 @@ 字符的关键字。
  • +
  • 对 Windows 窗体编辑器的代码分析进行了几处修改。现在,注释和区域以及类的属性都可以保存和重新生成。此外,还修正了项目资源中图像的代码生成,以及同一程序集中声明的静态字段和枚举器的解析。
    请注意 :如果使用的值来自与表单定义在同一程序集中的类型,则需要先对程序集进行(重新)编译,然后才能在 Windows 窗体编辑器中成功打开表单。
  • +
  • 现在,从 Windows 窗体编辑器生成的新方法将带有结尾 RETURN 语句。
  • +
  • 我们对源代码编辑器中 QuickInfo 的显示方式进行了一些改进。
  • +
    + 工具 + +
  • VOXporter 现在也可导出 VERSIONINFO 资源
  • +
    + + Changes in 2.0.2.0 (Bandol RC 2) + 编译器 + +
  • 文件范围的 PUBLIC 声明(用于 MEMVAR)被错误地解析为 GLOBAL。因此,它们被初始化为 NIL,而不是 FALSE。现在它们被正确生成为 public Memvars。memvars 的创建和初始化是在程序集中的 Init3 程序运行后进行的。
  • +
  • 实例变量初始化器现在可以引用其他字段,并允许使用 SELF 关键字。但仍不建议这样做。字段初始化的顺序就是它们在源代码中出现的顺序。因此,请确保在代码中以正确的顺序定义字段初始化器。
  • +
  • 启用 /vo2 时,AUTO 属性现在也以空字符串初始化。
  • +
  • 编译器允许您定义接口的实例变量。这些变量在代码生成过程中被忽略。现在,当编译器检测到接口上的字段时,会产生一条错误信息。
  • +
  • 当编译器检测到 2 个类型不同的模糊标识符(例如同名的 LOCAL 和 CLASS)时,错误信息会清楚地显示每个标识符的类型。
  • +
  • 修正了预处理器中的一个异常
  • +
    + +
  • 添加了对 FoxPro 运行时 DLL 的支持(译者注:该 DLL 指 XSharp.VFP.DLL)。
  • +
    + +
  • 不再支持 ANY 关键字(USUAL 的别名)。
  • +
  • 出现在 COLON(“:”)、DOT(“.”)或 ALIAS (->) 操作符之后的关键字不再作为关键字解析,而是作为标识符解析。这将解决访问 DateTime 类的 Date 属性等代码的解析问题。
  • +
  • 我们增加了对 WITH .. END WITH 语句块的支持:

    LOCAL oPerson as Person
    oPerson := Person{}
    WITH oPerson
      :FirstName := "John"
      :LastName := "Doe"
      :Speak()
    END WITH
    您也可以使用 DOT (.) 作为名称的前缀。WITH ... ENDWITH 中唯一允许使用的表达式是赋值和方法调用(如上所示)
  • +
  • 已添加对 FoxPro LPARAMETERS 语句的支持。请注意,函数或过程只能有 PARAMETERS 关键字或 LPARAMETERS 关键字或已声明的参数(名称位于 FUNCTION/PROCEDURE 行的括号之间)
  • +
  • 已添加对 FoxPro THIS 关键字和 .NULL. 关键字
  • +
  • 我们新增了对 FoxPro 日期字面格式 {^2019-06-21} 和 FoxPro 日期时间字面格式 {^2019-06-21 23:59:59} 的支持。
  • +
  • Core 方言现在也支持日期字面量和 DateTime 字面量。在 Core 方言中,日期字面量将表示为 DateTime 值。
  • +
  • 标准头文件 xsharpdefs.xh 现在有条件地包含了 Xbase++ 方言和 FoxPro 方言的头文件。这些头文件目前没有太多内容,但在未来几个月内会有所改变。
  • +
  • 如果编译器检测到包含了某些头文件,但这些头文件中的定义在引用程序集中也可以作为常量使用,那么编译器就会发出警告,并跳过包含文件 (XS9081)
  • +
  • 编译器现在支持隐式函数 _ARGS()。它将被解析为参数数组,通过 clipper 调用约定传递给函数/方法。这可用于将一个函数/方法的所有参数传递给另一个函数/方法。
  • +
  • 我们为 FoxPro 方言添加了 TEXT ... ENDTEXT 命令。TEXT 和 ENDTEXT 行之间的字符串将被传递到一个特殊的运行时函数 __TextSupport 中,该函数将接收 5 个参数:string、merge、NoShow、Flags 和 Pretext 参数。目前,您必须自己定义该函数。
  • +
  • 我们为所有还没有结尾关键字的实体类型添加了结尾关键字支持。新的结束关键字是可选的。它们列于下表。FoxPro ENDPROC 和 ENDFUNC 关键字将通过 UDC 映射到 END PROCEDURE 和 END FUNCTION。
  • +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + 开始 + + 结束 +
    + PROCEDURE + + END PROCEDURE +
    + PROC + + END PROC +
    + FUNCTION + + END FUNCTION +
    + FUNC + + END FUNC +
    + METHOD + + END METHOD +
    + ASSIGN + + END ASSIGN +
    + ACCESS + + END ACCESS +
    + VOSTRUCT + + END VOSTRUCT +
    + UNION + + END UNION +
    + +
  • 编译器现在会在 RuntimeState 的 Dialect 属性中注册 main 的方言(仅限非 Core 方言)
  • +
    + 宏编译器 + +
  • 修正了转义字面字符串的一个问题
  • +
    + +
  • 修正了隐式收缩转换的一个问题
  • +
  • 修正了宏编译别名操作 (Customer)->&fieldName 的一个问题
  • +
    + 运行时 + +
  • 修正了 Round() 函数中的一个问题。
  • +
  • 修正了 ExecName() 函数中的一个问题。
  • +
  • 已添加 FoxPro 运行时 DLL。
  • +
  • 在 Xbase++ 方言运行时添加了 XML 支持功能
  • +
  • 在 Xbase++ 方言运行时添加了对动态类创建的支持。
  • +
  • 修正了 Push-Pop 工作区代码中的别名表达式问题。
  • +
  • 将 NULL 转换为符号会导致异常。这一问题已得到修复。
  • +
    + RDD 系统 + +
  • 修复了 ADS RDD 中的几个问题
  • +
  • 现在包含 DBFCDX RDD
  • +
  • 现在包含 DBFVFP RDD。该 RDD 可用于访问具有 DBF/FPT/CDX 扩展名的文件,并支持 Visual Foxpro 字段类型,如 Integer、Double、日期时间和 VarChar。读取文件应完全支持。除 Picture 和 General 格式以及自增整数字段外,写入文件也应正常工作。您还可以使用 RDD 打开 VFP 的各种 “定义”文件,如项目、表单和报表。RDD “了解 ”索引和备忘录的不同扩展名。您还可以将 DBC 文件作为普通表打开。在未来版本中,我们将支持 VFP 数据库功能。
  • +
    + Visual Studio 集成 + +
  • 现在,您可以指定多行语句应在第二行及以后各行缩进。
  • +
  • BEGIN NAMESPACE ... END NAMESPACE 中函数的类型查找不包括该命名空间中的类型。
  • +
  • 为 Xbase++ 方言中的 INLINE 方法启动 intellisense 功能
  • +
  • 修正了 intellisense 中的几个问题
  • +
  • 改进了 FOREACH 循环中声明的 VAR 关键字的 intellisense 功能
  • +
  • 其他几项(较小的)改进。
  • +
    + 工具 + +
  • VOXporter 现在会在 RC 文件中写入 DEFINES,而不再是字面值。
  • +
  • VOXporter:修正文件名中包含无效字符的模块名称
  • +
    + + + + Changes in 2.0.1.0 (Bandol RC 1) + 编译器 + +
  • 添加了对所谓 IF 模式表达式语法的支持,该语法由 IS 测试和变量赋值组成,前缀为 VAR 关键字:
    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ENDIF

    表达式中引入的变量 oFoo 只在 IF 语句中可见。
    当然,您也可以在其他地方使用该模式,如 ELSEIF 块、CASE 语句、WHILE 表达式等:

    IF x is Foo VAR oFoo
      ? oFoo:DoSomething()
    ELSEIF x is Bar VAR oBar
      ? oBar:DoSomethingElse()
    ENDIF
  • +
  • 修正了方法修饰符和泛型方法的一个问题
  • +
  • 修正了分部类的大小写和析构函数不同的问题
  • +
  • 修正了使用 CLIPPER 调用约定的接口和方法的一个问题
  • +
  • 当 ACCESS 或 ASSIGN 方法包含类型参数和/或约束子句时,编译器现在会生成错误 (9077)
  • +
  • 修正了带有特定二进制数值的 DEFINE 的问题。此外,在计算 DEFINE 值的数字运算结果时,现在总是进行溢出检查。
  • +
  • 当常量值与小于 32 位的数值相加或相减时,编译器会将结果视为 32 位。这有时会迫使你在代码中使用转置。有了这一变化,就不再需要这种转换了。
  • +
  • 编译器允许您连接非字符串值和字符串,并自动在非字符串上调用 ToString()。现在已不再可能。现在,编译器在检测到这种情况时会生成一个错误 (9078)。
  • +
  • 我们已在编译器中添加了错误捕获代码,该代码应将内部错误导向编译器错误 XS9999.如果您发现此类错误,请通知我们。
  • +
  • 字面字符串的 DIM 数组现在可以正确初始化。
  • +
  • 使用共享编译器在不同方言之间切换时存在一个问题。它有时不再能检测到特定方言的关键字。这一问题已得到修复。
  • +
  • 修正了一个问题,在该问题中,不正确的代码会产生错误 “Failure to emit assembly”。
  • +
  • 修正了代码中使用 _CAST 将 32 位值转换为 16 位值的问题
  • +
  • 修正了重载索引属性的一个问题,即子类中的索引参数与超类中的索引参数类型不同。
  • +
  • 更改了若干别名操作的实现(ALIAS->FIELD 和 (ALIAS)->(Expression))
  • +
  • 更改了扩展字符串的预处理器处理 ( (<token>) )
  • +
  • Roslyn 代码没有将某些变量标记为 “已赋值但未读取”,以便与旧的 C# 编译器兼容。现在,我们将这些赋值标记为警告。这可能会在您的代码中产生许多以前未检测到的警告。
    为了支持这一点,我们收到了一些请求,希望在编译器中 “开放” 对基于 1 的索引的支持。过去,编译器只允许对 System.Array 类型或 XBase ARRAY 类型的变量进行基于 1 的索引。
    我们现在为运行时添加了几个接口。如果你的类型实现了这些接口之一,那么编译器将识别这一点,并允许你在代码中使用基于 1 的索引,然后编译器将自动从数字索引参数中减去 1。XSharp ARRAY 类型和 ARRAY OF 类型现在也实现了这些接口(之一)。
    这些接口是:
       INTERFACE IIndexer
           PUBLIC PROPERTY SELF[index PARAMS INT[]] AS USUAL GET SET
       END INTERFACE

       INTERFACE IIndexedProperties
           PROPERTY SELF[index AS INT   ] AS USUAL GET SET
           PROPERTY SELF[name  AS STRING] AS USUAL GET SET
       END INTERFACE
      INTERFACE INamedIndexer
         PUBLIC PROPERTY SELF[index AS INT, name AS STRING] AS USUAL GET SET
      END INTERFACE
  • +
    + 运行时 + +
  • 修正了 OrderInfo() 函数中的一些问题
  • +
  • 修正了运行时中 DB..() 函数的几个问题
  • +
  • 修正了宏编译器的几个问题
  • +
  • 修正了在对方法的后期绑定调用中处理默认参数的问题
  • +
  • 改进了后期绑定代码中缺少方法和/或属性时的错误信息。
  • +
  • Select() 函数会更改当前工作区。现已修复。
  • +
  • 将 USUAL 转换为 STRING 不会像 VO 那样抛出相同的异常。它总是在 USUAL 上调用 ToString()。现在的行为与 VO 相同。
  • +
  • F_ERROR 现在已被定义为 PTR,而不再是数值
  • +
  • CreateInstance 现在还能查找命名空间中定义的类
  • +
  • 修复在后期绑定代码中丢失参数的问题。还添加了对在后期绑定代码中调用重载方法和构造函数的(有限)支持。
  • +
  • 修正了 TransForm() 和几个 Str() 函数的问题。
  • +
  • XSharp.Core 现在已完全编译为安全代码。
  • +
  • 修正了一个关于后期绑定 assigns 和 access 的问题
  • +
  • NIL<-> STRING 比较现在与 Visual Objects 兼容
  • +
  • 修正了 AEval() 和参数缺失的问题
  • +
  • 已添加 Set() 函数。使用 _SET 定义的头文件时请注意。Harbour、Xbase++ 和 VO/Vulcan 中的定义存在细微差别。
    我们建议不要使用头文件中的定义,而是使用 X# 运行时 DLL 中定义的定义
  • +
  • 更改了编译器用于别名操作的函数的实现方式
  • +
    + RDD 系统 + +
  • 已添加对 DBF character 字段的支持,最大可达 64K。
  • +
  • 实施 DBFCDX RDD
  • +
  • 修复了几个与 DBFNTX RDD 有关的问题
  • +
  • DBF RDD 对 Ansi DBF 文件使用了不正确的锁定方案。现在它使用与 VO 和 Vulcan 相同的方案。
  • +
  • 宏编译索引表达式不属于 _CodeBlock 类型,也不属于 RuntimeCodeBlock 类型(RuntimeCodeblock 被封装在 _CodeBlock 对象内)。
    这样,在将这些表达式存储到 USUAL
  • +
    + Visual Studio 集成 + +
  • 修正了键入 VAR 表达式时可能出现的异常
  • +
  • 在项目系统备份项目文件时,我们会确保在写入或删除现有文件前清除只读标记。
  • +
  • 从 C++ 项目读取 intellisense 数据可能会使 intellisense 引擎陷入无限循环。这一问题已得到修复。
  • +
  • 现在,对 Form.Designer.prg 的更改会立即写入磁盘,以确保在窗体编辑器窗口中按下 “运行” 或 “调试” 键时,窗体的更改会被重新编译。
  • +
  • 改进了对 VAR 关键字的 intellisense 支持。
  • +
  • 在 “项目属性 ”页面上添加了对 FoxPro 的支持,以便为 FoxPro 的编译器和运行时更改做好准备。
  • +
  • .CH 文件现在也能在 Visual Studio 中被识别为 “X#”文件。
  • +
  • 现在,您可以控制从 “完成列表 ”中选择条目的字符。例如,DOT(.) 和 COLON(:) 现在也可以选择当前选定的元素。完整列表请参见工具-选项-文本编辑器-XSharp-Intellisense 页面。
  • +
  • 添加到项目中的程序集在下一次加载项目时才会被正确解析。这一问题已得到修复。
  • +
  • 修复了为 Windows 表单编辑器提供数据的 codedom 分析器中的一个问题。现在可以从同一程序集中的另一个窗体继承窗体。当然,您必须先编译项目。
  • +
  • 现在,.CH 扩展名也注册为 X# 项目系统的相关扩展名。
  • +
  • 更改了 #ifdef 命令的自动缩进
  • +
  • 修正了在加载带有 COM 引用的项目文件时可能出现的异常。
  • +
  • 已为 XPP 和 VO Dialect 中的类库添加模板
  • +
  • 有时会在注释区域内触发 intellisense 的类型查找。这一问题已得到修复。
  • +
    + 工具 + +
  • VOXPorter 在创建委托时未移除调用约定。现已修复
  • +
  • VOXporter 有时会生成包含大量重复资源项目的项目文件。这一问题已得到修复。
  • +
  • VOXporter 现在会用“@@”标记与某个新关键字冲突的前缀标识符。
  • +
  • 缩短了 VOXporter 欢迎屏幕的延迟时间。
  • +
    + + + Changes in 2.0.0.9 (Bandol Beta 9) + 编译器 + +
  • Lexer(编译器中识别关键字和文字等的部分)已重写,速度略有加快。
  • +
  • 编译器现在支持数字字面的数字分隔符。因此,您现在可以将 100 万写成
    1_000_000
  • +
    + +
  • 修正了一个问题,即即使选择了编译器选项 -vo2,静态局部变量也不会以 "" 初始化
  • +
  • 使用预处理器宏(如 __XSHARP_RT__ )的 #ifdef 命令无法正常工作。
  • +
  • Xbase++ 方言现在也支持 “普通 ”类语法。
  • +
  • 我们在 Beta 8 中更改了 “入口点 ”算法。现在已经恢复,而且 -main 命令行选项现在也能再次使用。Start方法的 “主体 ”现在封装在一个匿名函数中。
  • +
    + +
  • 重复的包含文件不再产生错误,而是发出警告
  • +
  • 修复默认参数值后缀为 “L ”或 “U ”的问题
  • +
  • 为使用 clipper 调用约定的方法/函数指定默认参数值时添加了编译器错误
  • +
  • 当指定 -vo2 时,STRING 的 DIM 数组未用 "" 初始化。该问题已得到修复。
  • +
  • 新增了对 Dbase 风格内存变量(MEMVAR、PUBLIC、PRIVATE、PARAMETERS)的支持。更多信息,请参阅帮助文件中的  MEMVAR 这仅适用于某些方言,还需要使用 /memvar 命令行选项
  • +
  • 新增了对未声明变量的支持(不建议使用!)。这仅适用于某些方言,需要使用 /memvar 和 /undeclared 命令行选项
  • +
  • 修正了 USUAL 变量和 STRING 变量之间的比较问题
  • +
  • 修正了分部类的一个问题,在不同的声明中,类名的大小写不同
  • +
  • 修正了带有 L 或 U 后缀的数字默认参数的一个问题
  • +
  • 修正了多行注释样式下单行注释后的续行符(分号)问题。
  • +
  • 修正了包含 YIELD 句的方法与编译器选项 /vo9 结合使用时的问题
  • +
  • 当泛型方法上缺少可见性修饰符时,该方法会被创建为 private 方法。这一问题已得到修复。
  • +
  • 在 XSharp.RT 和 XSharp.Core 中的重载函数之间进行选择时,有时会选择 XSharp.RT 程序集中的函数,尽管 XSharp.Core 中的重载效果更好
  • +
  • 如果 CASE 语句中没有 CASE 块,只有一个 OTHERWISE 块,编译器就会崩溃。该问题已得到修复,并添加了关于空 CASE 语句的警告。
  • +
    + 运行时 + +
  • 对宏编译器进行了多项修改,如十六进制字面的解析、参数的大小写敏感性(不再区分大小写)以及对函数重载的有限支持。
  • +
  • 添加了几个缺失的函数,如 _Quit()、
  • +
  • 几个 Ord..() 函数的返回值不正确。现已修复。
  • +
  • 修正了驱动器根目录 CurDir() 的一个问题
  • +
  • 修正了在调用 Send() 时单个参数值为 NULL_OBJECT 的问题。
  • +
  • 解决了 DiskFree() 和 DiskSpace() 参数不正确的问题
  • +
  • MemoRead() 和 MemoWrit() 以及 FRead...() 和 FWrite...() 现在与 VO Runtime 中的函数一样尊重 SetAnsi() 设置。
  • +
  • 我们新增了 2 个用于读/写二进制文件的函数: MemoReadBinary() 和 MemoWritBinary()
  • +
  • 并非所有 DBOI_ enum 值都与 Vulcan 中的值相同。这个问题已经解决。
  • +
  • SetDecimalSep() 和 SetThousandSep() 现在还能设置当前文化中的数字分隔符。
  • +
  • USUAL -> STRING 转换现在调用 AsString()
  • +
    + +
  • 新增了对 Dbase 风格动态内存变量(MEMVAR、PUBLIC、PRIVATE、PARAMETERS)的支持。更多信息,请参阅帮助文件中的 内存变量
  • +
  • 对于 DateTIme 类型的 USUAL,IsDate() 函数现在也返回 TRUE。另外还有一个单独的 IsDateTime() 函数。我们还添加了 IsFractional()(FLOAT 或 DECIMAL)和 IsInteger(LONG 或 INT64)以及 IsInt64()。
  • +
  • 在 Error 类中添加了缺失的 Cargo slot。同时改进了 Error:ToString() 方法。
  • +
  • 修复 W2String() 中的问题
  • +
  • 还有更多微小的变化。
  • +
    + Visual Studio 集成 + +
  • 我们在 “项目属性” 对话框中添加了一个新的标签页: 方言。其中包含特定方言的语言选项。
  • +
  • 将 “生成”选项页面(与配置相关)中的 2 个选项移至 “语言”页面(与生成无关),因为这样更合理:
  • + +
  • Include Path
  • +
  • NoStdDef
  • +
    +
    + +
  • 我们还在语言页面上添加了一个项目属性,用于指定其他标准头文件(而不是 XSharpDefs.xh)。
  • +
  • 在 intellisense 中显示的 XSharp.__Array 类型的名称是错误的
  • +
  • 我们在 “项目属性 ”对话页面上添加了条目,以启用 MEMVAR 支持和启用未声明变量
  • +
  • 修正了 CodeDom 提供程序(Windows 窗体编辑器使用)中的一个问题,即在写回源代码时,带有数组类型的字段会丢失数组括号。
  • +
  • 从窗口窗体编辑器写入更改时,我们不再写入磁盘,而是写入打开的(有时是不可见的).designer.prg 窗口。这样就可以避免在 Visual Studio 外部更改 .designer.prg 文件时出现警告信息。
  • +
  • 修正了源代码解析中标识符名称以“@@”开头的问题
  • +
  • 调试器将 UINT64 显示为 ARRAY 的类型名。现已修复。
  • +
  • 在 Windows 窗体编辑器中重新命名窗体时,对带有单独 .designer.prg 的窗体不起作用。这一问题已得到修复。
  • +
  • 修正了一个(非常老的)问题,即 xsproj 文件中的 OutPutPath 属性有时会设置为 $(OutputPath)。
  • +
  • 修正了编辑器中出现的空源文件或头文件异常。
  • +
  • 修正了为无错误代码的错误创建错误列表时出现的异常
  • +
  • 在编辑器中注释单行时,现在将始终使用 // 注释格式
  • +
    + 工具 + +
  • 本版本无任何更改。
  • +
    + + + Changes in 2.0.0.8 (Bandol Beta 8) + 编译器 + +
  • 编译器源代码已升级到Roslyn 2.10(C# 7.3)。因此,出现了一些新的编译器选项,比如 /refout,并且我们还支持"PRIVATE PROTECTED"修饰符的组合,该修饰符将类型成员定义为对同一程序集中的子类可访问,但对其他程序集中的子类不可访问。
  • +
  • 我们添加了对 Xbase++ 类声明的支持。请参阅 Xbase++ 类声明主题,了解有关语法、支持和不支持的更多信息。
  • +
  • 我们增加了对使用 &Identifier 语法的简单宏的支持
  • +
  • 我们增加了对后期绑定属性访问的支持:
  • + +
  • <Expression>:&<Identifier> 语法。
    这相当于 IVarGet(<Expression>,<Identifier>)。
  • +
  • <Expression>:&(<Expression2>) 语法。
    这相当于 IVarGet(<Expression>,<Expression2>)。
  • +
  • 这两者也可用于赋值,并将被翻译为 IVarPut:
    <Expression>:&<Identifier> := <Value>
    这就变成了 IVarPut(<Expression>,<Identifier>,<Value>)。
  • +
  • 即使未启用 “延迟绑定”,所有这些功能也能正常工作。
  • +
    +
    + +
  • 我们添加了一个新的编译器选项 /stddefs,允许您更改标准头文件(默认为 XSharpDefs.xh)。
  • +
  • 我们添加了一个新的预处理器匹配标记 <#idMarker>,它可以匹配单个标记(第一个空格符之前的所有字符)
  • +
  • 现在选择一种方言后,编译器将自动添加一些编译器宏。VO 方言声明了__VO__宏,Vulcan 方言声明了__VULCAN__宏,harbour 方言声明了__HARBOUR__宏,Xbase++ 方言声明了__XPP__宏。
  • +
  • 根据 X# 运行时编译时,也将定义__XSHARP_RT__宏。
  • +
  • 我们添加了一个新的警告,当您将一个不带 “ref ”修饰符(或 @ 前缀)的参数传递给一个方法或函数时,该方法或函数希望该参数为引用参数或 out 参数。
  • +
  • 我们还添加了一个警告,当您从较大的 integral 类型赋值到较小的 integral 类型时,该警告将显示,以提醒您注意可能出现的溢出问题。
  • +
    + 运行时 + +
  • 此版本包含一个新的更快的宏编译器。它应与 VO 宏编译器完全兼容。宏编译器尚未提供某些 .Net 功能。
  • +
  • 我们将大部分通用 XBase 代码移到了 XSharp.RT.DLL 中。XSharp.VO.DLL 现在只包含 VO 专用代码。我们还为 XPP 添加了 XSharp.XPP.DLL
  • +
  • 修复与 FRead3()、FWrite3() 和 FReadStr 有关的 Ansi2OEM 问题
  • +
  • 添加了丢失的函数 EnableLBOptimizations() 和属性 Array:Count
  • +
  • 修复了使用 CodeBlock 值进行延迟绑定分配的问题。
  • +
  • 修正了 AScan() 和 AEval() 参数缺失的问题
  • +
  • 更改了 DirChange()、DirMake() 和 DirRemove() 的错误返回代码
  • +
  • Send() 会 “吞下 ”错误。现已修复
  • +
  • 修正了为多维数组赋值的问题
  • +
  • 修正了使用 CreateInstance() 创建对象时,对象不在 “global”命名空间中的问题
  • +
  • 修复了 RDD 系统和支持函数中的若干问题。
  • +
  • 修正了后期绑定支持中的几个问题,如 IsMethod、IsAccess、IVarPut、IVarPutSelf 等。
  • +
  • 修正了 TransForm() 的几个问题
  • +
  • 现在,对包含整数的常项进行整除时,根据主程序的编译器设置,要么返回整数,要么返回小数。
  • +
  • 我们修复了后期绑定调用中的几个转换问题
  • +
  • 我们更正了 Val() 和 Str() 函数的几个问题。
  • +
  • DATE 和 FLOAT 的内部类型名称已改为 __Date 和 __Float。如果您依赖这些类型名称,请检查您的代码!
  • +
  • 如果运行时以发布模式编译,DebOut32 无法向调试终端输出数据。这一问题已得到修复。
  • +
    + Visual Studio 集成 + +
  • 修正了错误列表中 “当前项目” 的过滤问题
  • +
  • 局部变量的类型查找有时会失败。现已修复
  • +
  • 修正了可能在 VS 中导致异常的括号匹配问题
  • +
  • 修正了工具提示在 VS 中可能导致异常的问题
  • +
  • 修正了在 VS 中取消注释可能导致异常的问题
  • +
  • 在 VS 中添加的新引用并不总是包含在编辑器的类型搜索中。这一问题已得到修复。
  • +
  • 构造函数的成员原型现在包括类型名称和大括号
  • +
  • 我们已着手改进用 VAR 声明的变量的代码自动补全功能。
  • +
  • 我们已开始支持泛型类型成员的代码自动补全。这项工作尚未完成。
  • +
  • 不属于 X# 项目也不属于 Vulcan 项目的 PRG 文件现在也会在编辑器中着色。
  • +
    + 工具 + +
  • VulcanXPorter 总是调整引用的 VO 库,并忽略 “使用 X# 运行时 ”复选框
  • +
  • VOXPorter 现在有一个选项,可将 AEF 文件中引用的资源复制到项目的资源子文件夹中
  • +
  • VOXPorter 现在还会将 cavowed、cavofed 和 cavoded 模板文件复制到项目的属性文件夹中。
  • +
    + + + Changes in 2.0.0.7 (Bandol Beta 7) + 编译器 + +
  • 在调用带有 USUAL 参数的运行时函数时,编译器现在会自动优先选择带有 “传统 ”VO 类型的方法或函数,而不是带有增强 .Net 类型的方法或函数。例如,如果有两个重载,一个接收 byte[],另一个接收字符串,那么接收字符串的重载将优先于接收 byte[] 的重载。
  • +
  • 解决了 IIF() 表达式中的 .NOT. 表达式问题
  • +
  • 改进了调用表达式(如 String.Compare())的调试器断点生成功能
  • +
  • 修正了 #define 中定义的宏参数的预处理器错误。现在这些参数必须有正确的大小写。不同大小写的参数将不再被解析。
  • +
  • 修正了一个预处理器错误,该错误导致预处理器规则中的可选匹配模式重复出现。这个问题太复杂,无法在此详细解释 <g>。
  • +
  • 编译器为数组操作生成的代码现在使用 X# 运行时声明的新接口(见下文)。
  • +
    + 运行时 + +
  • 我们添加了几个缺失的函数,如 _GetCmdLine、Oem2AnsiA() 和 XSharpLoadLibrary。
  • +
  • 修复了 CreateInstance、IVarGet、IVarPut()、CtoDAnsi() 等程序中的问题。
  • +
  • 为 FRead4() 添加了 VO 兼容重载
  • +
  • 不再为空日期生成异常
  • +
  • Ferror() 并不总是返回文件操作的错误信息。现已修复
  • +
  • 我们添加了一个新的 FException() 函数,该函数可返回低级文件操作中发生的最后一次异常
  • +
  • 现在支持将包含 PTR 的 usual 转换为 LONG 或 DWORD
  • +
  • 新增了一些与数组处理相关的接口。编译器不再在代码中插入对 Array 的转换,而是根据索引参数的类型插入对这些接口之一的转换。USUAL 类型实现了 IIndexer 和 IIndexProperties,当该对象公开接口时,会将调用派发到通常的对象内部。在对 ARRAY OF <type> 使用 AEval 或 AScan 时,可使用这种方法对属性进行索引访问。
  • + +
  • XSharp.IIndexer
  • +
  • XSharp.INamedIndexer
  • +
  • XSharp.IIndexedProperties
  • +
    +
    + SDK 类 + +
  • 我们添加了来自 Paul Piko 的混合用户界面类(经 Paul 许可)
  • +
    + 工具 + +
  • Vulcan XPorter 现在还有一个选项,可将运行时和 SDK 引用替换为 X# 运行时引用
  • +
    + + + Changes in 2.0.0.6 (Bandol Beta 6) + 编译器 + +
  • 编译器有时仍会对编译器生成的未使用变量发出警告。这一问题已得到修复。
  • +
  • 编译器现在会发出尚未支持 #pragmas 的警告 (9006)
  • +
  • 添加了编译器宏 __FUNCTION__ ,它以原始格式返回当前函数/方法的名称。
  • +
  • 在 Core 方言中编译时,多维数组的字面子数组不再需要类型前缀
  • +
  • 修复了生成运行时程序集时出现的全局类名问题(这些程序集对全局类名有特殊约定)
  • +
  • 当接口中方法的调用约定与实现的调用约定(CLIPPER 与非 CLIPPER)不同时,编译器将产生一个新的错误 (9067)。
  • +
  • _DLL 函数和过程的调用约定现在是可选的,默认为 PASCAL (stdcall)
  • +
  • using 语句的命名空间别名并非在所有情况下都有效。
  • +
  • 现在,编译器会对错误使用 VIRTUAL 和 OVERRIDE 修饰符的代码生成错误。
  • +
  • 编译器曾因带有泛型参数的特定类型的不正确局部变量初始化器而抛出异常。现已修复。
  • +
  • 属性的 GET 或 SET 访问器上的可见性修饰符无法正常工作(INTERNAL、PRIVATE 等)。现已修复。
  • +
  • 编译器现在会以不同的方式处理 PSZ(_CAST,...) 和 PSZ(...)。当参数为字面字符串时,PSZ 只分配一次,并存储在程序集的 “PSZ 表 ”中。这个 PSZ 的生命周期就是应用程序的生命周期。出现这种情况时,将显示新的编译器警告 XS9068 。
    当参数是存储在局部或全局(或定义)中的字符串时,编译器无法知道 PSZ 的寿命。因此,编译器会使用 StringAlloc() 函数为 PSZ 分配内存。这样可以确保 PSZ 不会超出范围并被释放。如果您在应用程序中经常使用该函数,那么您可能会重复分配内存。我们建议您避免对 PSZ 使用施用和转换操作符,并通过手动分配和释放 PSZ 来控制 PSZ 变量的生命周期。对非字符串(数值或指针)进行 PSZ 转换时,只需调用 PSZ 构造函数,该构造函数将接收一个 intptr(Win32API 库中有多处使用此函数来处理 “特殊 ”PSZ 值)。
  • +
  • Vulcan 方言现在也支持命名参数。如果您的代码看起来像下面的代码,这可能会导致编译器错误,因为编译器会认为 aValue 是 Empty() 函数的命名参数。

    IF Empty(aValue := SomeExpression())
  • +
  • 如果从另一个类继承静态类,以前会收到编译器警告。现在则会出现编译器错误,因为这会产生一个副作用,即生成的程序集包含一个已损坏的引用。
  • +
  • 重载解析代码现在会选择类型方法/函数,而不是采用 clipper 调用约定的方法/函数。
  • +
  • 编译器现在可以识别 Xbase++ 方言。目前它的行为与 Harbour 相同。我们还添加了编译器宏 __DIALECT_XBASEPP__ ,当以 Xbase++ 模式编译时,该宏将自动定义为 TRUE。
  • +
  • 修正了 PDB 行号生成中的一个问题,该问题会导致调试器中出现不正确的行号
  • +
    + Visual Studio 集成 + +
  • 对于在 #include 文件中定义的 #defines,源代码编辑器并不总是显示正确的 “活动 ”区域。
  • +
  • 打开不含实体的源文件(如头文件)可能会在 VS 内出现错误信息。
  • +
  • 修正了编辑器中的 null 引用异常
  • +
  • 修正了在编辑器中取消代码注释时出现的问题
  • +
  • 改进了具有许多依赖关系的大型解决方案的加载时间性能。
  • +
  • 修正了 intellisense 引擎可能锁定项目引用或程序集引用使用的 DLL 的问题。
  • +
  • 修正了一个问题,即在 windows 窗体编辑器中打开窗体时,缺少引用(例如未在开发人员机器上安装的 COM 引用)可能会导致类型查找问题。
  • +
  • 在项目属性页面添加了选择 Harbour 方言的选项。
  • +
    + 生成系统 + +
  • 生成系统无法识别源代码中已注释的 NAMESPACE 开头行。现已修复。
  • +
    + VOXporter + +
  • 我们在输出文件中添加了按字母顺序排列实体的选项。
  • +
  • 我们添加了一个选项,您可以选择将 X# 运行时作为引用添加到您的应用程序中(否则将使用 Vulcan 运行时)。
  • +
    + 运行时 + +
  • 调用 SetInternational(#Windows) 后,SetCentury 设置不正确。现已修复。
  • +
  • 日期的 Descend 函数现在会返回一个数字,就像在 VO
  • +
  • 函数 ChrA 和 AscA 已更名为 Chr() 和 Asc(),并删除了原来的函数 Chr() 和 Asc()。原来的函数使用的是 DOS (Oem) 代码,与 Visual Objects 不兼容。
  • +
  • 运行时有几处使用 System.Encoding.Default 代码页将字符从 8 位转换为 16 位。这一点已经改变。现在我们使用与运行时状态中 WinCodePage 相匹配的代码页。因此,通过在运行时状态中设置 Windows 代码页,现在还可以控制从 Unicode 到 Ansi 再到 Unicode 的转换。
  • +
  • 某些低级文件功能的 Oem2Ansi 转换不正确。
  • +
  • 我们在后期绑定支持方面做了一些调整
  • +
  • 所有字符串 - PSZ 例程(String2PSz()、StringAlloc() 等)现在都使用 Windows Codepage 将 unicode 字符串转换为 ansi。
  • +
  • 如果您的程序库在编译时使用了 “兼容字符串比较”,但主应用程序没有使用,那么程序库中的字符串比较将遵循与主应用程序相同的规则,因为主应用程序在运行时注册了 /vo13 设置。运行时中的 “兼容 ”字符串比较例程现在会检测到主程序不想进行 VO 兼容字符串比较,并将简单地调用正常的 .Net 比较例程。
    因此,我们建议第三方产品在其代码中始终使用兼容字符串比较。
  • +
    + +
  • 根据源代码注释生成了运行时的初步文档,并将其作为本文档的一个章节。
  • +
    + VO SDK + +
  • 该版本包含根据 X# 运行时编译的第一版 VO SDK。我们包含了以下类库
  • + +
  • Win32API
  • +
  • System Classes
  • +
  • RDD Classes
  • +
  • SQL Classes
  • +
  • GUI Classes
  • +
  • Internet Classes
  • +
  • Console Classes
  • +
  • Report Classes
  • +
    +
    + +
  • 所有程序集都以 VO<Name>.DLL 命名,这些程序集中的类都在 VO 命名空间中。
  • +
  • 本 SDK 基于 VO 2.8 SP3 源代码。VO 2.8 SP3 和 VO 2.8 SP4 之间的差异稍后将合并到源代码中、
  • +
  • 不包括 OLE、OleServer 和 Internet Server 库。XSharp.VO 库中包含 OleAutoObject 类及其支持类。不包括 OleControl 和 OleObject。
  • +
  • 这些类的初步文档是根据源代码注释生成的,已作为章节纳入本文档。
  • +
    + RDD 系统 + +
  • 此版本包含 RDD 系统的第一个版本。DBF-DBT 已准备就绪。其他 RDD 将在后续版本中陆续推出。此外,大部分与 RDD 相关的功能也已在此版本中运行。
  • +
  • 该版本还包含 Advantage RDD 的第一个版本。使用该 RDD,您可以访问 DBF/DBT/NTX 文件、DBF/FPT/CDX 文件和 ADT/ADM/ADI 文件。RDD 名称与 Vulcan 的 RDD 名称相同。(AXDBFCDX、AXDBFNTX、ADSADT)。我们还支持 AXDBFVFP 格式和 AXSQLCDX、AXSQLNTX、AXSQLVFP。有关这些 RDD 的差异和可能性的更多信息,请参阅 Advantage 文档。
    我们在 Advantage 客户端引擎的基础上对 Advantage RDD 进行了编码。我们的 RDD 系统会检测您是在 x86 还是 x64 模式下运行,并相应地调用 Ace32 或 Ace64 中的函数。
    要使用 Advantage,您需要将支持 DLL 从 Advantage Vulcan RDD 复制到您应用程序的文件夹中。请查看 Vulcan 的 Advantage 文档,查看 DLL 列表。Advantage RDD 是标准 XSharp.RDD.DLL 的一部分,因此取代了 Vulcan 的 AdvantageRDD.Dll。
  • +
  • XSharp.Core DLL 现在也支持 RDD。我们选择不在函数中实现,而是在 CoreDb 类中作为静态方法实现。使用 VoDb..() 函数的旧代码可以通过将 “VoDb ”更改为 “CoreDb ”来移植。
    在 VO 和 Vulcan 中作为 USUAL 的参数和返回值在 CoreDb 类中作为 OBJECT 实现。
    ..Info() 方法有两个重载。一个重载Object,一个重载Object引用。
    CoreDb 中的方法用逻辑值返回成功或失败,就像 VO 中的 VODB..() 函数一样。如果您想知道上次操作过程中发生了什么错误,可以使用 CoreDb._ErrInfoPtr() 方法进行访问。该方法返回 RDD 操作中发生的最后一次异常。
  • +
  • 目前,CoreDb 类只有返回对象的 FieldGet()。我们将在下一次生成中添加一些以指定类型返回值的额外方法(如 FieldGetString()、FieldGetBytes() 等)。我们还将为 FieldPut() 添加可接受不同参数类型的重载。
  • +
  • XSharp.VO DLL 具有 VoDb..() 函数和 DbAppend()、EOF()、DbSkip() 等高级函数。
    VoDb..() 函数用逻辑值返回成功或失败。如果您想知道最后一次操作的错误信息,可以使用 _VoDbErrInfoPtr() 方法进行访问。该方法返回 RDD 操作中发生的最后一次异常。
  • +
  • 您可以混合调用 VoDb..() 函数和 CoreDb..() 方法。在引擎下,VoDb...() 函数也会调用 CoreDb 方法。
  • +
  • 高级函数可能会像在 VO 中一样抛出异常。例如,在没有打开表的工作区中调用这些函数时。有些函数会简单地返回空值(如 Dbf()、Recno())。其他函数则会抛出异常。如果使用 ErrorBlock() 注册了错误处理程序,那么该错误处理程序将被错误对象调用。否则系统将抛出异常。
  • +
  • RDD 系统通过 DbDate 结构返回日期值,通过 DbFloat 结构返回浮点值。这些结构没有隐式转换方法。 不过,它们确实实现了 IDate 和 IFloat,而且当它们存储在 XSharp.VO DLL 内的 USUAL 中时,可以并将被转换为 Date 和 Float 类型。DbDate 结构是年、月和日期的简单组合。DbFloat 结构用于保存 Real8 中的字段值以及长度和小数位数。
  • +
  • 有关 RDD 系统的更多文档将在稍后发布。当然,您也可以查看 GitHub 上的帮助文件和源代码。
  • +
    + + Changes in 2.0.0.5 (Bandol Beta 5) + 编译器 + +
  • 使用本地资源的程序集的强命名密钥无效。现已修复
  • +
  • 当同一源代码(PRG)文件包含两次包含文件时,就会产生大量编译器警告,提示重复的 #defines。特别是当 Vulcan VOWin32APILibrary.vh 被包含两次时,每个源文件将产生超过 15000 个编译器警告。大量的警告会导致编译器占用过多内存。现在,当我们检测到同一文件被包含两次时,就会输出编译错误。我们还为每个源 (PRG) 文件添加了 500 个预处理器错误的限制。
  • +
  • Beta 4 中的一项更改可能会导致编译器对 X# 编译器自动引入的未使用变量发出警告。这种警告将不再生成。
  • +
  • 现在,编译器可以正确地将某些编译器选项存储到 XSharp 的运行时状态中。
  • +
    + 运行时 + +
  • 修复了 Ansi2OEM 和 OEM2Ansi 功能中的一个问题。
  • +
  • 修正了 SetCollation(#Windows) 排序中的一个问题
  • +
  • 修正了 ASort() 等运行时函数中的字符串比较问题。现在,它还尊重新的运行时属性 CompilerOptionVO13,以控制排序
  • +
    + Visual Studio 集成 + +
  • 编辑器成员下拉菜单中的成员排序是根据方法名和属性名进行的,不包括类型名。当源文件包含多个类型时,成员下拉菜单中的成员将混合排序
  • +
    + 生成系统 + +
  • VO15 的默认值已从 false 改回未定义。
  • +
    + + + Changes in 2.0.0.4 (Bandol Beta 4) + 编译器 + +
  • 可能的突破性改变:函数现在总是优先于同名方法。如果要调用同一类中的方法,需要在方法前加上类型名(静态方法)或 SELF: 前缀。如果没有冲突的函数名,则仍可使用方法名调用该方法。我们建议在方法调用前加上前缀,以便代码更易于阅读。
  • +
  • 编译器只接受一个标识符,没有 INSTANCE、EXPORT 或其他前缀,也没有类声明中的类型。编译器会创建一个 USUAL 类型的公共字段。现在已经不可能了。
  • +
  • 改进了位置关键字检测算法(这也会影响源代码编辑器)
  • +
  • 操作符 || 现在映射到逻辑或 (a .OR. b) 而不是二进制或 (_OR(a,b))
  • +
  • VAR 语句现在也能正确解析

    VAR x = SomeFunction()
  • +
    + 编译时会警告您应该使用赋值运算符 (:=) 。 + 我们之所以添加这一功能,是因为许多人(包括我们自己)从 VB 和 C# 中复制了操作符为单个等号的示例。 + +
  • 有关冲突类型的错误信息现在包括完全合格的类型名称。
  • +
  • 编译器不再包含字面浮点运算的宽度。这与 VO 兼容。
  • +
  • 现在允许使用枚举类型的默认参数。
  • +
    + 运行时 + +
  • 添加了几个缺失的函数,如 __Str() 和 DoEvents()
  • +
  • 修正了宏编译器在处理非英语语言时出现的问题。
  • +
  • 为 Is...()函数添加了几个重载,这些函数使用 PSZ 而不是字符串,例如 IsAlpha() 和 IsUpper()。
  • +
  • 添加了一些缺失的错误定义,如 E_DEFAULT 和 E_RETRY。
  • +
  • 修复 SubStr() 和负参数的问题
  • +
  • 修复 IsInstanceOf() 的一个问题
  • +
  • 修复 Val() 和包含 “E ”字符的十六进制值之间的问题
  • +
  • 添加了从 ARRAY 到 OBJECT[] 的隐式转换,并返回了隐式转换。
  • +
  • 对 Transform() 和 Unformat() 的代码进行了几处修改,以涵盖多种外来图片格式
  • +
  • 修改 SetCentury() 的代码,使其也能自动调整日期格式(SetDateFormat())
  • +
  • 结合 SetFixed() 和 SetDigitFixed(),修复 Str() 系列函数。
  • +
    + Visual Studio 集成 + +
  • 修正了在 Visual Studio 最新版本中生成项目时出现的问题
  • +
  • 有几个 “关键字” 以前没有同步大小写,如 TRUE、FALSE、NULL_STRING 等、
  • +
  • 只要用户将光标放在关键字上或紧随其后,当前行中的关键字就不会大小写同步。这意味着,当您键入 String 并希望继续将其改为 StringComparer 时,格式器将不再启动,并在您有机会完成单词之前将 “String ”改为关键字的大小写。
  • +
  • 表单编辑器内的控制命令对话框没有保存更改。
  • +
  • 在编辑器右侧下拉菜单中添加了一个选项,可选择包含编辑器中的所有实体,或仅包含当前选定类型中的成员
  • +
  • 编辑器也会匹配字面字符串和注释中的大括号。现已修复。
  • +
  • 修正了 CodeDom 解析器的一个问题,即扩展字符串(包含 CRLF 符号或其他特殊符号的字符串)的解析不正确。这导致 windows 窗体编辑器出现问题。
  • +
  • 编辑器中的成员解析代码与编译器的逻辑不一致: 当函数和方法同名时,它解析的是方法而不是函数。这一问题已得到修复。
  • +
  • 修正了在 X64 模式下调试时的一个问题。
  • +
  • 修复了与 SCC 集成比较源代码文件时出现的异常。
  • +
  • 修复了 XAML 编辑器的若干问题:
  • + +
  • 代码现在以严格的调用约定生成,以避免在启用编译器选项 “隐含 CLIPPER 调用约定” 时出现问题
  • +
  • 出于同样的原因,WPF 和其他模板现在都包含 STRICT 调用约定
  • +
  • XAML 编辑器无法正确加载当前 DLL 或 EXE,因此在解析命名空间和向工具调色板添加用户控件时出现问题。这一问题已得到修复。
  • +
    +
    + +
  • 我们在 Tools/Editor/XSharp/Intellisense 选项中添加了一个选项,允许您控制编辑器中成员组合框的工作方式。你可以选择在右侧组合框中只显示当前类型或所有实体的方法和属性。左侧组合框始终显示文件中的所有类型。
  • +
  • 更新了部分项目和项目模板。没有参数的方法和构造函数现在有了严格的调用约定。此外,在 Core 方言模板中,编译器选项 /vo15 已被明确禁用。
  • +
    + + + Changes in 2.0.0.3 (Bandol Beta 3) + 编译器 + +
  • 当两个方法重载的原型相匹配时,编译器现在会优先选择非泛型方法,而不是泛型方法
  • +
  • 修正了编译包含预处理器命令的单行源代码时可能出现的异常。
  • +
    + 运行时 + +
  • 添加了 Mod() 函数
  • +
  • 已添加不带参数的 ArrayNew() 重载
  • +
    + +
  • 当 length(RHS) > length(LHS) 和 SetExact() == FALSE 时,修正了 __StringNotEquals() 中的问题。
  • +
  • 添加了用于 USUAL 溢出错误的缺失字符串资源
  • +
    + Visual Studio 集成 + +
  • 改进了关键字大小写同步和缩进。打开源文件时也会同步 “关键字大小写”。
  • +
  • 双击查找结果窗口打开源文件,不再为同一源文件打开新窗口
  • +
  • 提高了 intellisense 的类型查找速度
  • +
  • 修正了一个问题,该问题会导致无法查找同一命名空间中的类型
  • +
  • 修复最新 Visual Studio 2017 版本中引入的 QuickInfo 问题
  • +
  • 调试器中不再显示与调试器工具提示重叠的 QuickInfo 提示
  • +
  • 编辑器窗口中包含方法和函数的组合框不再显示参数名和完整类型名。现在显示的是参数的缩写类型名
  • +
  • 这些组合框现在还能显示另一个源文件中定义的方法和属性的文件名
  • +
  • 修正了窗口编辑器为标签页生成代码的问题
  • +
    + Vulcan XPorter + +
  • 解决方案文件中定义的项目依赖关系未正确转换
  • +
    + VO XPorter + +
  • 修正了用定义值替换资源名称的问题
  • +
    + + + Changes in 2.0.0.2 (Bandol Beta 2) + 编译器 + +
  • 编译器现在可以透明地同时接受用于 XBase Array 索引的 Int 和 Dword 参数
  • +
  • 当编译器在 XSharp.VO 中发现一个弱类型的函数,而在 XSharp.Core 中发现一个强类型的函数时,编译器会选择 XSharp.Core 中的强类型函数。
  • +
  • 在 VO 和 Vulcan 方言中,有时会显示(不正确的)“重复使用 ”警告。现在这种情况已被消除。
  • +
  • 改进了 Start 函数的调试器信息,以避免在代码结束时不必要地退回到第 1 行
  • +
  • 改进了 BEGIN LOCK 和 BEGIN SCOPE 的调试器断点信息
  • +
  • 改进了多行属性的调试器断点信息
  • +
  • 现在仅在 VO/Vulcan 方言中支持 /vo6、/vo7 和 /vo11
  • +
    + 运行时 + +
  • 删除了 Array 索引器的 DWORD 重载
  • +
  • 修正了 ErrString() 的重载问题
  • +
  • 修正了 _DebOut() 的重载问题
  • +
  • 修正了 DTOC() 和 Date:ToString() 中的问题
  • +
  • 修正了 ASort() 与 VO 不兼容的问题
  • +
  • 现在,当释放固定内存块时,它们会被填充为 0xFF,以帮助检测问题
  • +
    + Visual Studio + +
  • 修复 VS2017 在生成时 “挂起” 的问题
  • +
  • 修复 VS2017 中显示工具提示(QuickInfo)时的 “挂起 ”问题
  • +
  • 修正了调试 x64 应用程序的问题
  • +
  • 无法再重命名或删除 “属性 ”文件夹
  • +
  • 从 “属性 ”文件夹的上下文菜单中选择 “打开”,即可打开项目属性屏幕
  • +
  • 更新了项目树中的多个图标
  • +
  • 转到定义的改进
  • +
    + 生成系统 + +
  • 修复嵌入式资源命令行选项中 CRLF 的问题
  • +
    + + + Changes in 2.0.0.1 (Bandol Beta 1) + 编译器 + 新特性 + +
  • 已添加对 ARRAY OF 语言结构的支持。有关详细信息,请参见 Runtime 。
  • +
  • 在使用 VO 或 Vulcan 方言编译时,添加了对 X# Runtime 程序集的支持。
  • +
  • 已添加对 “伪 ”函数 ARGCOUNT() 的支持,该函数可返回使用 clipper 调用约定编译的函数/方法中已声明参数的数量。
  • +
  • 为给 foreach 局部变量赋值添加了一个新的警告编号。为 USING 和 FIXED 局部变量赋值将产生错误。
  • +
    + 优化 + +
  • 优化了 Clipper 调用约定函数/方法的代码生成
  • +
  • 不再支持 /cf 和 /norun 编译器选项
  • +
  • 预处理器不再删除空白。这样,在编译使用预处理器的代码时,错误信息会更好。
  • +
  • 某些解析器错误的描述更加详细
  • +
  • 更改了用于确定针对 CLR2 还是 CLR4 进行编译的方法。编译器会检查 system.dll 或 mscorlib.dll 的位置。如果该位置所在路径包含 “v2”、“2.”、“v3 ”或 “3.”,则假定我们是针对 CLR2 进行编译。包含 “V4 ”或 “4. ”的路径则被视为 CLR4。不再支持编译器的 /clr 命令行选项。
  • +
  • 现在,预处理器在检测到递归 #include 文件时会产生错误。
  • +
    + Bug 修复 + +
  • 修正了在 Vulcan 或 VO Dialect 中编译时在参数上使用 [CallerMemberAttribute] 的问题
  • +
  • Abstract 属性不应再对正文产生警告
  • +
  • 现在,您可以正确使用 ENUM 值作为数组索引。
  • +
  • 修正了使用 PUBLIC GET 和 PRIVATE SET 访问器的属性的一个问题。
  • +
  • 修正了将接口赋值给 USUAL 时需要转换为对象的问题
  • +
  • 修正了一个问题,即带有字面类型的 IIF 表达式会返回错误的类型(L 或 U 后缀被忽略)。
  • +
  • 修正了 LOCAL x[10] 声明编译不正确的问题。现在可编译为包含 10 个元素的局部 VO 数组。
  • +
    + Visual Studio 集成 + +
  • 版本 1.2.1 引入了一个问题,可能导致输出文件被 intellisense 引擎锁定。现已修复
  • +
  • 编辑器解析器在处理嵌套类型时出现问题。现已修复
  • +
  • X# 项目内的枚举代码完成中未包含枚举成员
  • +
  • 代码重新格式化方面的一些改进
  • +
  • 在 “工具/选项 ”中为编辑器添加了选项,以便在 “所有标记 ”完成列表中包含关键词
  • +
    + +
  • 修正了一个问题,即无法加载程序集以检索元信息时,程序集会 “永远 ”重试
  • +
  • 修正了从包含托管代码和非托管代码的程序集中检索类型信息的问题。
  • +
  • 在 IDE 属性窗口中添加了一些引用程序集的属性
  • +
  • 修复了 Visual Studio 2017 最新更新中引入的有关程序集引用和 Windows 窗体编辑器的问题
  • +
  • 在 “项目属性 ”窗口中启用 XML 输出时,对于程序集名称中包含“. ”的程序集,会显示不正确的文件名。
  • +
  • 编辑器解析器现在能更好地支持 REF 和 OUT 类型的参数
  • +
  • 在程序集引用和 COM 引用的属性窗口中添加了对 “嵌入互操作类型 ”的支持
  • +
  • 修复了代码模型有时会锁定项目引用的输出 DLL 的问题
  • +
    + 生成系统 + +
  • 修正了 XML 文档文件的命名问题。
  • +
    + 运行时 + +
  • 已添加 XSharp.Core.DLL、XSharp.VO.DLL 和 XSharp.Macrocompiler.DLL。
    已实现并支持大多数运行时函数。更多信息请参阅 X# Runtime章节
  • +
    + VO XPorter + +
  • 删除了 SDK 相关选项。这些选项稍后将转移到一个新工具中。
  • +
    + + +
    diff --git a/docs/Help_ZH-CN/Topics/Who-is-the-X-team.xml b/docs/Help_ZH-CN/Topics/Who-is-the-X-team.xml index c7f31e4aed..3eb837924e 100644 --- a/docs/Help_ZH-CN/Topics/Who-is-the-X-team.xml +++ b/docs/Help_ZH-CN/Topics/Who-is-the-X-team.xml @@ -1,6 +1,6 @@  - + X# 团队成员
    @@ -12,7 +12,7 @@ 他们按字母顺序排列: - +
    - - - - + + + + + + @@ -66,7 +66,7 @@ X# Core @@ -80,7 +80,7 @@ X# non - core @@ -94,7 +94,7 @@ X# core @@ -108,7 +108,7 @@ X# VO and X# Vulcan @@ -122,7 +122,7 @@ X# XPP @@ -136,7 +136,7 @@ X# FoxPro @@ -150,7 +150,7 @@ X# Core @@ -164,7 +164,7 @@ X# Core @@ -178,7 +178,7 @@ X# Core diff --git a/docs/Help_Spanish/Topics/dialect_Vulcan.xml b/docs/Help_Spanish/Topics/dialect_Vulcan.xml index 241acd512e..4bfd7537cd 100644 --- a/docs/Help_Spanish/Topics/dialect_Vulcan.xml +++ b/docs/Help_Spanish/Topics/dialect_Vulcan.xml @@ -1,6 +1,6 @@  - + Vulcan '@' @@ -16,6 +16,15 @@ Vulcan This dialect shares the features of "All Non Core Dialects". + +
    姓名 @@ -56,19 +56,33 @@
    + Chris Pyrgas + 希腊 + chris@xsharp.eu + 支持、工具、示例、教程、运行时
    + Irwin Rodriguez + + 西班牙 + + irwin@xsharp.e + + 西班牙语翻译,FoxPro兼容性 +
    Robert van der Hulst diff --git a/docs/Help_ZH-CN/Topics/dialect_Vulcan.xml b/docs/Help_ZH-CN/Topics/dialect_Vulcan.xml index 7c2bcd3aaa..ab142878d5 100644 --- a/docs/Help_ZH-CN/Topics/dialect_Vulcan.xml +++ b/docs/Help_ZH-CN/Topics/dialect_Vulcan.xml @@ -1,6 +1,6 @@  - + Vulcan '@' @@ -18,7 +18,15 @@ 这种方言具有“所有非 Core 方言”的特征。 - 编译器和运行时在编译 “Vulcan” 方言时具有以下“特殊”行为。 + + + + +
    + 请注意,在 XSharp 3 中,Vulcan 方言仅支持 XSharp 运行时 DLL。不再
    支持"自带运行时"功能
    。此外,编译器不再自动从注册表读取 Vulcan 包含文件的位置设置。
    若使用这些文件,需确保项目设置中包含文件存储位置。
    +
    + + 编译器和运行时在为"Vulcan"方言编译时具有以下"特殊"行为: 编译器
  • 不允许使用 4 个字母的关键字缩写
  • diff --git a/docs/Help_ZH-CN/XSHelp.hmxp b/docs/Help_ZH-CN/XSHelp.hmxp index 9f6050ef0d..ea107cbff6 100644 --- a/docs/Help_ZH-CN/XSHelp.hmxp +++ b/docs/Help_ZH-CN/XSHelp.hmxp @@ -14,6 +14,16 @@ * + + + ..\..\artifacts\DocChinese\HTML\index.html + ..\help\XSharp_WebHelp.hmskin + HTML + OPT_PARENTHOME,OPT_TOPICFOOTER,OPT_WEBFONTS + * + Table of Contents + + ..\..\artifacts\Doc\XSharp_ZH-CN.pdf @@ -23,6 +33,7 @@ 36526 PDF * + Table of Contents @@ -34,15 +45,6 @@ Table of Contents - - - ..\..\artifacts\DocChinese\HTML\index.html - ..\help\XSharp_WebHelp.hmskin - HTML - OPT_PARENTHOME,OPT_TOPICFOOTER,OPT_WEBFONTS - * - - @@ -159,8 +161,8 @@ XSharp XSharp BV © 2015- <%YEAR%> <%AUTHOR%> - 2 - 24 + 3 + 0 0 zh-cn GB2312_CHARSET @@ -755,7 +757,7 @@ {"sourcelang":"EN","destlang":"ZH","defapiglossary":"","glossarycount":"0"} - Cahors (2.24.0.0) + Gaia (3.0.0.0) XSharp From 8d9c9ba0a25b9052b1b159cfe74ab60478a879cf Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 16:38:44 +0100 Subject: [PATCH 10/17] [Templates] Adjust names in project templates to include (SDK). Also changed available frameworks for VOGUI dependent projects to 46, 47, 48 --- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../p_netcore/.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 20 ++++++++-------- .../XSharp.VOMDIApplication.xsproj | 2 +- .../.template.config/template.json | 20 ++++++++-------- .../.template.config/template.json | 4 ++-- .../p_webmap/.template.config/template.json | 4 ++-- .../p_webroute/.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../.template.config/template.json | 4 ++-- .../ProjectBase/ProjectElement.cs | 23 ++++--------------- .../Nodes/XSharpSdkProjectNode.cs | 12 +++------- 26 files changed, 71 insertions(+), 90 deletions(-) diff --git a/src/Templates/working/content/p_classlibrary/.template.config/template.json b/src/Templates/working/content/p_classlibrary/.template.config/template.json index 8f3e215bfd..7f284804d4 100644 --- a/src/Templates/working/content/p_classlibrary/.template.config/template.json +++ b/src/Templates/working/content/p_classlibrary/.template.config/template.json @@ -6,8 +6,8 @@ "Library" ], "Identity": "XSharp.ClassLibrary", - "Name": "Class Library Core Dialect without Runtime", - "Description": "A project for creating a X# class library (.dll) for the Core dialect with no dependencies on the runtime", + "Name": "Class Library Core Dialect without Runtime (SDK)", + "Description": "A SDK Style project for creating a X# class library (.dll) for the Core dialect with no dependencies on the runtime", "SourceName": "XSharp.ClassLibrary", "ShortName": "xsclasslibrary", "Tags": { diff --git a/src/Templates/working/content/p_classlibrarycore/.template.config/template.json b/src/Templates/working/content/p_classlibrarycore/.template.config/template.json index 2e66834072..7ae128f6dc 100644 --- a/src/Templates/working/content/p_classlibrarycore/.template.config/template.json +++ b/src/Templates/working/content/p_classlibrarycore/.template.config/template.json @@ -6,8 +6,8 @@ "Library" ], "Identity": "XSharp.ClassLibraryCore", - "Name": "Class Library Core Dialect with Runtime", - "Description": "A project for creating a X# class library (.dll) for the Core dialect with a dependency on XSharp.Core", + "Name": "Class Library Core Dialect with Runtime (SDK)", + "Description": "A SDK Style project for creating a X# class library (.dll) for the Core dialect with a dependency on XSharp.Core", "SourceName": "XSharp.ClassLibraryCore", "ShortName": "xsclasslibrarycore", "Tags": { diff --git a/src/Templates/working/content/p_classlibraryfox/.template.config/template.json b/src/Templates/working/content/p_classlibraryfox/.template.config/template.json index b5b4c2929e..b2a871c6f0 100644 --- a/src/Templates/working/content/p_classlibraryfox/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryfox/.template.config/template.json @@ -7,8 +7,8 @@ "Visual FoxPro" ], "Identity": "XSharp.ClassLibraryFox", - "Name": "Class Library FoxPro Dialect", - "Description": "A project for creating a X# class library (.dll) for the Visual FoxPro Dialect", + "Name": "Class Library FoxPro Dialect (SDK)", + "Description": "A SDK Style project for creating a X# class library (.dll) for the Visual FoxPro Dialect", "SourceName": "XSharp.ClassLibraryFox", "ShortName": "xsclasslibraryfox", "Tags": { diff --git a/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json b/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json index c5bc7e45ee..798a45d964 100644 --- a/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json @@ -7,8 +7,8 @@ "Harbour" ], "Identity": "XSharp.ClassLibraryHarbour", - "Name": "Class Library Harbour Dialect", - "Description": "A project for creating a X# class library (.dll) for the Harbour Dialect", + "Name": "Class Library Harbour Dialect (SDK)", + "Description": "A SDK Style project for creating a X# class library (.dll) for the Harbour Dialect", "SourceName": "XSharp.ClassLibraryHarbour", "ShortName": "xsclasslibraryharbour", "Tags": { diff --git a/src/Templates/working/content/p_classlibraryvo/.template.config/template.json b/src/Templates/working/content/p_classlibraryvo/.template.config/template.json index 9ece014a77..9ce820059c 100644 --- a/src/Templates/working/content/p_classlibraryvo/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryvo/.template.config/template.json @@ -7,8 +7,8 @@ "VO" ], "Identity": "XSharp.ClassLibraryVO", - "Name": "Class Library VO Dialect", - "Description": "A project for creating a X# class library (.dll) for the VO Dialect", + "Name": "Class Library VO Dialect (SDK)", + "Description": "A SDK Style project for creating a X# class library (.dll) for the VO Dialect", "SourceName": "XSharp.ClassLibraryVO", "ShortName": "xsclasslibraryvo", "Tags": { diff --git a/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json b/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json index 833ca3f340..c804ddd6b0 100644 --- a/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json @@ -7,8 +7,8 @@ "Vulcan" ], "Identity": "XSharp.ClassLibraryVulcan", - "Name": "Class Library Vulcan Dialect", - "Description": "A project for creating a X# class library (.dll) for the Vulcan Dialect", + "Name": "Class Library Vulcan Dialect (SDK)", + "Description": "A SDK Style project for creating a X# class library (.dll) for the Vulcan Dialect", "SourceName": "XSharp.ClassLibraryVulcan", "ShortName": "xsclasslibraryvulcan", "Tags": { diff --git a/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json b/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json index 675fc5d3bc..d3646982f8 100644 --- a/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json @@ -7,8 +7,8 @@ "XPP" ], "Identity": "XSharp.ClassLibraryXPP", - "Name": "Class Library XBase\u002B\u002B Dialect", - "Description": "A project for creating a X# class library (.dll) for the Xbase\u002B\u002B Dialect", + "Name": "Class Library XBase\u002B\u002B Dialect (SDK)", + "Description": "A SDK Style project for creating a X# class library (.dll) for the Xbase\u002B\u002B Dialect", "SourceName": "XSharp.ClassLibraryXPP", "ShortName": "xsclasslibraryxpp", "Tags": { diff --git a/src/Templates/working/content/p_consoleapplication/.template.config/template.json b/src/Templates/working/content/p_consoleapplication/.template.config/template.json index c27d8c6e37..e434df2a6c 100644 --- a/src/Templates/working/content/p_consoleapplication/.template.config/template.json +++ b/src/Templates/working/content/p_consoleapplication/.template.config/template.json @@ -6,8 +6,8 @@ "Console" ], "Identity": "XSharp.ConsoleApplication", - "Name": "Console Application", - "Description": "A project for creating a X# command-line application in the core dialect.", + "Name": "Console Application (SDK)", + "Description": "A SDK Style project for creating a X# command-line application in the core dialect.", "SourceName": "XSharp.ConsoleApplication", "ShortName": "xsconsoleapplication", "Tags": { diff --git a/src/Templates/working/content/p_harbourconsole/.template.config/template.json b/src/Templates/working/content/p_harbourconsole/.template.config/template.json index 564cf00a3f..fc0cdc3b7e 100644 --- a/src/Templates/working/content/p_harbourconsole/.template.config/template.json +++ b/src/Templates/working/content/p_harbourconsole/.template.config/template.json @@ -7,8 +7,8 @@ "Harbour" ], "Identity": "XSharp.HarbourConsole", - "Name": "Harbour Console Application", - "Description": "A project for creating a X# command-line application in the Harbour Dialect.", + "Name": "Harbour Console Application (SDK)", + "Description": "A SDK Style project for creating a X# command-line application in the Harbour Dialect.", "SourceName": "XSharp.HarbourConsole", "ShortName": "xsharbourconsole", "Tags": { diff --git a/src/Templates/working/content/p_msclasslibrary/.template.config/template.json b/src/Templates/working/content/p_msclasslibrary/.template.config/template.json index 7baf3e9e79..5a3e69c93c 100644 --- a/src/Templates/working/content/p_msclasslibrary/.template.config/template.json +++ b/src/Templates/working/content/p_msclasslibrary/.template.config/template.json @@ -6,8 +6,8 @@ "Test" ], "Identity": "XSharp.Test.MsClassLibrary", - "Name": "Class Library with MsTest Support", - "Description": "A project for creating a X# class library (.dll) with MS Unit Testing", + "Name": "Class Library with MsTest Support (SDK)", + "Description": "A SDK Style project for creating a X# class library (.dll) with MS Unit Testing", "SourceName": "XSharp.Test.MsClassLibrary", "ShortName": "xsmsclasslibrary", "Tags": { diff --git a/src/Templates/working/content/p_netcore/.template.config/template.json b/src/Templates/working/content/p_netcore/.template.config/template.json index 94ed3f805c..cd6b254a2e 100644 --- a/src/Templates/working/content/p_netcore/.template.config/template.json +++ b/src/Templates/working/content/p_netcore/.template.config/template.json @@ -6,8 +6,8 @@ "Console" ], "Identity": "XSharp.ConsoleApplication.NetCore", - "Name": "Console Application (.Net Core)", - "Description": "A project for creating a X# command-line application in the core dialect.", + "Name": "Console Application (.Net Core) (SDK)", + "Description": "A SDK Style project for creating a X# command-line application in the core dialect.", "SourceName": "XSharp.ConsoleApplication.NetCore", "ShortName": "xsnetcore", "Tags": { diff --git a/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json b/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json index 2251d5c92e..1321504e63 100644 --- a/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json +++ b/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json @@ -6,8 +6,8 @@ "Test" ], "Identity": "XSharp.Test.NUnitClassLibrary", - "Name": "Class Library with NUnit Testing", - "Description": "A project for creating a X# class library (.dll) with NUnit Testing", + "Name": "Class Library with NUnit Testing (SDK)", + "Description": "A SDK Style project for creating a X# class library (.dll) with NUnit Testing", "SourceName": "XSharp.Test.NUnitClassLibrary", "ShortName": "xsnunitclasslibrary", "Tags": { diff --git a/src/Templates/working/content/p_vfpconsole/.template.config/template.json b/src/Templates/working/content/p_vfpconsole/.template.config/template.json index 2767e4d652..92253ffe0f 100644 --- a/src/Templates/working/content/p_vfpconsole/.template.config/template.json +++ b/src/Templates/working/content/p_vfpconsole/.template.config/template.json @@ -7,8 +7,8 @@ "Visual FoxPro" ], "Identity": "XSharp.VFPConsole", - "Name": "FoxPro Console Application", - "Description": "A project for creating a X# command-line application in the Visual FoxPro Dialect.", + "Name": "FoxPro Console Application (SDK)", + "Description": "A SDK Style project for creating a X# command-line application in the Visual FoxPro Dialect.", "SourceName": "XSharp.VFPConsole", "ShortName": "xsvfpconsole", "Tags": { diff --git a/src/Templates/working/content/p_voconsole/.template.config/template.json b/src/Templates/working/content/p_voconsole/.template.config/template.json index 8474f61251..9b8717b0b7 100644 --- a/src/Templates/working/content/p_voconsole/.template.config/template.json +++ b/src/Templates/working/content/p_voconsole/.template.config/template.json @@ -7,8 +7,8 @@ "VO" ], "Identity": "XSharp.VOConsole", - "Name": "VO Console Application", - "Description": "A project for creating a X# command-line application in the VO Dialect.", + "Name": "VO Console Application (SDK)", + "Description": "A SDK Style project for creating a X# command-line application in the VO Dialect.", "SourceName": "XSharp.VOConsole", "ShortName": "xsvoconsole", "Tags": { diff --git a/src/Templates/working/content/p_vomdiapplication/.template.config/template.json b/src/Templates/working/content/p_vomdiapplication/.template.config/template.json index 62bbe7aaaf..cdfb5743ab 100644 --- a/src/Templates/working/content/p_vomdiapplication/.template.config/template.json +++ b/src/Templates/working/content/p_vomdiapplication/.template.config/template.json @@ -7,8 +7,8 @@ "VO" ], "Identity": "XSharp.VOMDIApplication", - "Name": "VO MDI Application", - "Description": "A project for creating a VO MDI application in the VO Dialect.", + "Name": "VO MDI Application (SDK)", + "Description": "A SDK Style project for creating a VO MDI application in the VO Dialect.", "SourceName": "XSharp.VOMDIApplication", "ShortName": "xsvomdiapplication", "Tags": { @@ -26,20 +26,20 @@ "Datatype": "choice", "Choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "Choice": "net46", + "Description": "Target .NET Framework 4.6" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "Choice": "net47", + "Description": "Target .NET Framework 4.7" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "Choice": "net48", + "Description": "Target .NET Framework 4.8" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "Replaces": "net46", + "DefaultValue": "net46" }, "DefaultNamespace": { "Type": "parameter", diff --git a/src/Templates/working/content/p_vomdiapplication/XSharp.VOMDIApplication.xsproj b/src/Templates/working/content/p_vomdiapplication/XSharp.VOMDIApplication.xsproj index 37d5ae01d0..eaf9621483 100644 --- a/src/Templates/working/content/p_vomdiapplication/XSharp.VOMDIApplication.xsproj +++ b/src/Templates/working/content/p_vomdiapplication/XSharp.VOMDIApplication.xsproj @@ -27,7 +27,7 @@ true False False - net8.0 + net46 diff --git a/src/Templates/working/content/p_vosdiapplication/.template.config/template.json b/src/Templates/working/content/p_vosdiapplication/.template.config/template.json index 2a5af43c0d..f517c74670 100644 --- a/src/Templates/working/content/p_vosdiapplication/.template.config/template.json +++ b/src/Templates/working/content/p_vosdiapplication/.template.config/template.json @@ -7,8 +7,8 @@ "VO" ], "Identity": "XSharp.VOSDIApplication", - "Name": "VO SDI Application", - "Description": "A project for creating a VO SDI application in the VO Dialect.", + "Name": "VO SDI Application (SDK)", + "Description": "A SDK Style project for creating a VO SDI application in the VO Dialect.", "SourceName": "XSharp.VOSDIApplication", "ShortName": "xsvosdiapplication", "Tags": { @@ -26,20 +26,20 @@ "Datatype": "choice", "Choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "Choice": "net46", + "Description": "Target .NET Framework 4.6" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "Choice": "net47", + "Description": "Target .NET Framework 4.7" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "Choice": "net48", + "Description": "Target .NET Framework 4.8" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "Replaces": "net46", + "DefaultValue": "net46" }, "DefaultNamespace": { "Type": "parameter", diff --git a/src/Templates/working/content/p_vulcanconsole/.template.config/template.json b/src/Templates/working/content/p_vulcanconsole/.template.config/template.json index 478dcb84e8..95dacd6c9d 100644 --- a/src/Templates/working/content/p_vulcanconsole/.template.config/template.json +++ b/src/Templates/working/content/p_vulcanconsole/.template.config/template.json @@ -7,8 +7,8 @@ "Vulcan" ], "Identity": "XSharp.VulcanConsole", - "Name": "Vulcan Application", - "Description": "A project for creating a X# command-line application in the Vulcan dialect with Vulcan Runtime Assemblies (BYOR = Bring Your Own Runtime).", + "Name": "Vulcan Application (SDK)", + "Description": "A SDK Style project for creating a X# command-line application in the Vulcan dialect with Vulcan Runtime Assemblies (BYOR = Bring Your Own Runtime).", "SourceName": "XSharp.VulcanConsole", "ShortName": "xsvulcanconsole", "Tags": { diff --git a/src/Templates/working/content/p_webmap/.template.config/template.json b/src/Templates/working/content/p_webmap/.template.config/template.json index bc12e038c9..f3b5131756 100644 --- a/src/Templates/working/content/p_webmap/.template.config/template.json +++ b/src/Templates/working/content/p_webmap/.template.config/template.json @@ -3,8 +3,8 @@ "Author": "XSharp", "classifications": [ "Web","WebAPI","Web API","API","Service", "X#" ], "identity": "XSharpBV.WebMap.XSharp", - "name": "WebApp Application - RESTful with MapGet/MapPost", - "description": "A project for creating a RESTful application that can run on .NET on Windows, Linux and macOS. This application is using MapGet/MapPost for routing.", + "name": "WebApp Application - RESTful with MapGet/MapPost (SDK)", + "description": "A SDK Style project for creating a RESTful application that can run on .NET on Windows, Linux and macOS. This application is using MapGet/MapPost for routing.", "sourceName":"XSharp.WebMap", "shortName": "xswebmap", "tags": { diff --git a/src/Templates/working/content/p_webroute/.template.config/template.json b/src/Templates/working/content/p_webroute/.template.config/template.json index 1e99f2c2a8..406584850b 100644 --- a/src/Templates/working/content/p_webroute/.template.config/template.json +++ b/src/Templates/working/content/p_webroute/.template.config/template.json @@ -3,8 +3,8 @@ "Author": "XSharp", "classifications": [ "Web","WebAPI","Web API","API","Service", "X#" ], "identity": "XSharpBV.WebRoute.XSharp", - "name": "WebApp Application - RESTful with Attributes", - "description": "A project for creating a RESTful application that can run on .NET on Windows, Linux and macOS. This application is using Attributes for routing.", + "name": "WebApp Application - RESTful with Attributes (SDK)", + "description": "A SDK Style project for creating a RESTful application that can run on .NET on Windows, Linux and macOS. This application is using Attributes for routing.", "sourceName":"XSharp.WebRoute", "shortName": "xswebroute", "tags": { diff --git a/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json b/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json index 6692f38f6d..5242b731f9 100644 --- a/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json +++ b/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json @@ -6,8 +6,8 @@ "Desktop" ], "Identity": "XSharp.WindowsFormsApplication", - "Name": "Windows Forms Application", - "Description": "A project for creating an application with a Windows Forms user interface.", + "Name": "Windows Forms Application (SDK)", + "Description": "A SDK Style project for creating an application with a Windows Forms user interface.", "SourceName": "XSharp.WindowsFormsApplication", "ShortName": "xswindowsformsapplication", "Tags": { diff --git a/src/Templates/working/content/p_wpfapplication/.template.config/template.json b/src/Templates/working/content/p_wpfapplication/.template.config/template.json index 3a3e0fdb79..74bef54c03 100644 --- a/src/Templates/working/content/p_wpfapplication/.template.config/template.json +++ b/src/Templates/working/content/p_wpfapplication/.template.config/template.json @@ -6,8 +6,8 @@ "Desktop" ], "Identity": "XSharp.WPFApplication", - "Name": "WPF Application", - "Description": "Windows Presentation Foundation client application.", + "Name": "WPF Application (SDK)", + "Description": "SDK Style Windows Presentation Foundation client application.", "SourceName": "XSharp.WPFApplication", "ShortName": "xswpfapplication", "Tags": { diff --git a/src/Templates/working/content/p_xppconsole/.template.config/template.json b/src/Templates/working/content/p_xppconsole/.template.config/template.json index a6700c8746..5099b5fa01 100644 --- a/src/Templates/working/content/p_xppconsole/.template.config/template.json +++ b/src/Templates/working/content/p_xppconsole/.template.config/template.json @@ -7,8 +7,8 @@ "XPP" ], "Identity": "XSharp.XPPConsole", - "Name": "Xbase\u002B\u002B Console Application", - "Description": "A project for creating a X# command-line application in the Xbase\u002B\u002B Dialect.", + "Name": "Xbase\u002B\u002B Console Application (SDK)", + "Description": "A SDK Style project for creating a X# command-line application in the Xbase\u002B\u002B Dialect.", "SourceName": "XSharp.XPPConsole", "ShortName": "xsxppconsole", "Tags": { diff --git a/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json b/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json index f663e993e9..5c3f2a8dc4 100644 --- a/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json +++ b/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json @@ -6,8 +6,8 @@ "Test" ], "Identity": "XSharp.Test.XUnitClassLibrary", - "Name": "Class Library with XUnit Testing", - "Description": "A project for creating a X# class library (.dll) with XUnit Testing", + "Name": "Class Library with XUnit Testing (SDK)", + "Description": "A SDK Style project for creating a X# class library (.dll) with XUnit Testing", "SourceName": "XSharp.Test.XUnitClassLibrary", "ShortName": "xsxunitclasslibrary", "Tags": { diff --git a/src/VisualStudio/ProjectBase/ProjectElement.cs b/src/VisualStudio/ProjectBase/ProjectElement.cs index 52a10e75d9..fb6e82175e 100644 --- a/src/VisualStudio/ProjectBase/ProjectElement.cs +++ b/src/VisualStudio/ProjectBase/ProjectElement.cs @@ -345,27 +345,14 @@ public void RefreshProperties() return; bool isSdk = itemProject.BuildProject.Xml.Sdk != null; - itemProject.BuildProject.ReevaluateIfNecessary(); - IEnumerable items = itemProject.BuildProject.GetItems(this.item.ItemType); - if (isSdk) - { - if (items.Count() > 1) - { - var ouritems = items.Where(i => i.EvaluatedInclude == this.item.EvaluatedInclude && i.UnevaluatedInclude == this.item.UnevaluatedInclude); - var theiritems = items.Where(i => i.IsImported && i.EvaluatedInclude == this.item.EvaluatedInclude); - if (ouritems.Count() == 1 && theiritems.Count() == 1) - { - itemProject.BuildProject.RemoveItem(this.item); - this.item = theiritems.First(); - itemProject.BuildProject.ReevaluateIfNecessary(); - } - } - } - else + if (!isSdk) { + // prevent duplicate items. + itemProject.BuildProject.ReevaluateIfNecessary(); + IEnumerable items = itemProject.BuildProject.GetItems(this.item.ItemType); foreach (ProjectItem projectItem in items) { - if (projectItem != null && projectItem.UnevaluatedInclude.Equals(item.UnevaluatedInclude)) + if (string.Equals(projectItem?.UnevaluatedInclude, item.UnevaluatedInclude, StringComparison.OrdinalIgnoreCase)) { this.item = projectItem; return; diff --git a/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs b/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs index ec28a1a17a..0bc5b7f435 100644 --- a/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs +++ b/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs @@ -402,7 +402,7 @@ public XSharpFrameworkNode(XSharpProjectNode root, string filePath) : } protected override ImageMoniker GetIconMoniker(bool open) { - return KnownMonikers.Framework; + return KnownMonikers.ReferencePrivate; } } @@ -418,15 +418,9 @@ public XSharpDependencyNode(XSharpProjectNode root, string filePath) : protected override ImageMoniker GetIconMoniker(bool open) { - return KnownMonikers.Framework; - } - override public Guid ItemTypeGuid - { - get - { - return VSConstants.GUID_ItemType_VirtualFolder; - } + return KnownMonikers.ReferencePrivate; } + override public Guid ItemTypeGuid => VSConstants.GUID_ItemType_VirtualFolder; } From d36abef33c8d5d1fc954f30b0c9904b411325b3a Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 16:58:44 +0100 Subject: [PATCH 11/17] [Templates] Make the name of the project templates unique by adding a .SDK suffix --- .../content/p_classlibrary/.template.config/template.json | 2 +- .../p_classlibrarycore/.template.config/template.json | 2 +- .../p_classlibraryfox/.template.config/template.json | 2 +- .../p_classlibraryharbour/.template.config/template.json | 2 +- .../content/p_classlibraryvo/.template.config/template.json | 2 +- .../p_classlibraryvulcan/.template.config/template.json | 2 +- .../p_classlibraryxpp/.template.config/template.json | 2 +- .../p_consoleapplication/.template.config/template.json | 2 +- .../content/p_harbourconsole/.template.config/template.json | 2 +- .../content/p_msclasslibrary/.template.config/template.json | 2 +- .../content/p_netcore/.template.config/template.json | 2 +- .../p_nunitclasslibrary/.template.config/template.json | 2 +- .../content/p_vfpconsole/.template.config/template.json | 2 +- .../content/p_voconsole/.template.config/template.json | 2 +- .../p_vomdiapplication/.template.config/template.json | 2 +- .../p_vosdiapplication/.template.config/template.json | 2 +- .../content/p_vulcanconsole/.template.config/template.json | 2 +- .../working/content/p_webmap/.template.config/template.json | 6 +++--- .../content/p_webroute/.template.config/template.json | 6 +++--- .../.template.config/template.json | 2 +- .../content/p_wpfapplication/.template.config/template.json | 2 +- .../content/p_xppconsole/.template.config/template.json | 2 +- .../p_xunitclasslibrary/.template.config/template.json | 2 +- 23 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/Templates/working/content/p_classlibrary/.template.config/template.json b/src/Templates/working/content/p_classlibrary/.template.config/template.json index 7f284804d4..55b37c5ffe 100644 --- a/src/Templates/working/content/p_classlibrary/.template.config/template.json +++ b/src/Templates/working/content/p_classlibrary/.template.config/template.json @@ -5,7 +5,7 @@ "Windows", "Library" ], - "Identity": "XSharp.ClassLibrary", + "Identity": "XSharp.ClassLibrary.SDK", "Name": "Class Library Core Dialect without Runtime (SDK)", "Description": "A SDK Style project for creating a X# class library (.dll) for the Core dialect with no dependencies on the runtime", "SourceName": "XSharp.ClassLibrary", diff --git a/src/Templates/working/content/p_classlibrarycore/.template.config/template.json b/src/Templates/working/content/p_classlibrarycore/.template.config/template.json index 7ae128f6dc..613431c1f0 100644 --- a/src/Templates/working/content/p_classlibrarycore/.template.config/template.json +++ b/src/Templates/working/content/p_classlibrarycore/.template.config/template.json @@ -5,7 +5,7 @@ "Windows", "Library" ], - "Identity": "XSharp.ClassLibraryCore", + "Identity": "XSharp.ClassLibraryCore.SDK", "Name": "Class Library Core Dialect with Runtime (SDK)", "Description": "A SDK Style project for creating a X# class library (.dll) for the Core dialect with a dependency on XSharp.Core", "SourceName": "XSharp.ClassLibraryCore", diff --git a/src/Templates/working/content/p_classlibraryfox/.template.config/template.json b/src/Templates/working/content/p_classlibraryfox/.template.config/template.json index b2a871c6f0..83a7596735 100644 --- a/src/Templates/working/content/p_classlibraryfox/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryfox/.template.config/template.json @@ -6,7 +6,7 @@ "Library", "Visual FoxPro" ], - "Identity": "XSharp.ClassLibraryFox", + "Identity": "XSharp.ClassLibraryFox.SDK", "Name": "Class Library FoxPro Dialect (SDK)", "Description": "A SDK Style project for creating a X# class library (.dll) for the Visual FoxPro Dialect", "SourceName": "XSharp.ClassLibraryFox", diff --git a/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json b/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json index 798a45d964..c5a6a288eb 100644 --- a/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json @@ -6,7 +6,7 @@ "Library", "Harbour" ], - "Identity": "XSharp.ClassLibraryHarbour", + "Identity": "XSharp.ClassLibraryHarbour.SDK", "Name": "Class Library Harbour Dialect (SDK)", "Description": "A SDK Style project for creating a X# class library (.dll) for the Harbour Dialect", "SourceName": "XSharp.ClassLibraryHarbour", diff --git a/src/Templates/working/content/p_classlibraryvo/.template.config/template.json b/src/Templates/working/content/p_classlibraryvo/.template.config/template.json index 9ce820059c..c7ddc75025 100644 --- a/src/Templates/working/content/p_classlibraryvo/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryvo/.template.config/template.json @@ -6,7 +6,7 @@ "Library", "VO" ], - "Identity": "XSharp.ClassLibraryVO", + "Identity": "XSharp.ClassLibraryVO.SDK", "Name": "Class Library VO Dialect (SDK)", "Description": "A SDK Style project for creating a X# class library (.dll) for the VO Dialect", "SourceName": "XSharp.ClassLibraryVO", diff --git a/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json b/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json index c804ddd6b0..6afc15044e 100644 --- a/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json @@ -6,7 +6,7 @@ "Library", "Vulcan" ], - "Identity": "XSharp.ClassLibraryVulcan", + "Identity": "XSharp.ClassLibraryVulcan.SDK", "Name": "Class Library Vulcan Dialect (SDK)", "Description": "A SDK Style project for creating a X# class library (.dll) for the Vulcan Dialect", "SourceName": "XSharp.ClassLibraryVulcan", diff --git a/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json b/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json index d3646982f8..cdeefa380d 100644 --- a/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json @@ -6,7 +6,7 @@ "Library", "XPP" ], - "Identity": "XSharp.ClassLibraryXPP", + "Identity": "XSharp.ClassLibraryXPP.SDK", "Name": "Class Library XBase\u002B\u002B Dialect (SDK)", "Description": "A SDK Style project for creating a X# class library (.dll) for the Xbase\u002B\u002B Dialect", "SourceName": "XSharp.ClassLibraryXPP", diff --git a/src/Templates/working/content/p_consoleapplication/.template.config/template.json b/src/Templates/working/content/p_consoleapplication/.template.config/template.json index e434df2a6c..86cb9691ef 100644 --- a/src/Templates/working/content/p_consoleapplication/.template.config/template.json +++ b/src/Templates/working/content/p_consoleapplication/.template.config/template.json @@ -5,7 +5,7 @@ "Windows", "Console" ], - "Identity": "XSharp.ConsoleApplication", + "Identity": "XSharp.ConsoleApplication.SDK", "Name": "Console Application (SDK)", "Description": "A SDK Style project for creating a X# command-line application in the core dialect.", "SourceName": "XSharp.ConsoleApplication", diff --git a/src/Templates/working/content/p_harbourconsole/.template.config/template.json b/src/Templates/working/content/p_harbourconsole/.template.config/template.json index fc0cdc3b7e..ebcf1a67ad 100644 --- a/src/Templates/working/content/p_harbourconsole/.template.config/template.json +++ b/src/Templates/working/content/p_harbourconsole/.template.config/template.json @@ -6,7 +6,7 @@ "Console", "Harbour" ], - "Identity": "XSharp.HarbourConsole", + "Identity": "XSharp.HarbourConsole.SDK", "Name": "Harbour Console Application (SDK)", "Description": "A SDK Style project for creating a X# command-line application in the Harbour Dialect.", "SourceName": "XSharp.HarbourConsole", diff --git a/src/Templates/working/content/p_msclasslibrary/.template.config/template.json b/src/Templates/working/content/p_msclasslibrary/.template.config/template.json index 5a3e69c93c..0f477cf38b 100644 --- a/src/Templates/working/content/p_msclasslibrary/.template.config/template.json +++ b/src/Templates/working/content/p_msclasslibrary/.template.config/template.json @@ -5,7 +5,7 @@ "Windows", "Test" ], - "Identity": "XSharp.Test.MsClassLibrary", + "Identity": "XSharp.Test.MsClassLibrary.SDK", "Name": "Class Library with MsTest Support (SDK)", "Description": "A SDK Style project for creating a X# class library (.dll) with MS Unit Testing", "SourceName": "XSharp.Test.MsClassLibrary", diff --git a/src/Templates/working/content/p_netcore/.template.config/template.json b/src/Templates/working/content/p_netcore/.template.config/template.json index cd6b254a2e..d6b16ee6fc 100644 --- a/src/Templates/working/content/p_netcore/.template.config/template.json +++ b/src/Templates/working/content/p_netcore/.template.config/template.json @@ -5,7 +5,7 @@ "Windows", "Console" ], - "Identity": "XSharp.ConsoleApplication.NetCore", + "Identity": "XSharp.ConsoleApplication.NetCore.SDK", "Name": "Console Application (.Net Core) (SDK)", "Description": "A SDK Style project for creating a X# command-line application in the core dialect.", "SourceName": "XSharp.ConsoleApplication.NetCore", diff --git a/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json b/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json index 1321504e63..8515691620 100644 --- a/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json +++ b/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json @@ -5,7 +5,7 @@ "Windows", "Test" ], - "Identity": "XSharp.Test.NUnitClassLibrary", + "Identity": "XSharp.Test.NUnitClassLibrary.SDK", "Name": "Class Library with NUnit Testing (SDK)", "Description": "A SDK Style project for creating a X# class library (.dll) with NUnit Testing", "SourceName": "XSharp.Test.NUnitClassLibrary", diff --git a/src/Templates/working/content/p_vfpconsole/.template.config/template.json b/src/Templates/working/content/p_vfpconsole/.template.config/template.json index 92253ffe0f..f5d57cac85 100644 --- a/src/Templates/working/content/p_vfpconsole/.template.config/template.json +++ b/src/Templates/working/content/p_vfpconsole/.template.config/template.json @@ -6,7 +6,7 @@ "Console", "Visual FoxPro" ], - "Identity": "XSharp.VFPConsole", + "Identity": "XSharp.VFPConsole.SDK", "Name": "FoxPro Console Application (SDK)", "Description": "A SDK Style project for creating a X# command-line application in the Visual FoxPro Dialect.", "SourceName": "XSharp.VFPConsole", diff --git a/src/Templates/working/content/p_voconsole/.template.config/template.json b/src/Templates/working/content/p_voconsole/.template.config/template.json index 9b8717b0b7..021fc80f5c 100644 --- a/src/Templates/working/content/p_voconsole/.template.config/template.json +++ b/src/Templates/working/content/p_voconsole/.template.config/template.json @@ -6,7 +6,7 @@ "Console", "VO" ], - "Identity": "XSharp.VOConsole", + "Identity": "XSharp.VOConsole.SDK", "Name": "VO Console Application (SDK)", "Description": "A SDK Style project for creating a X# command-line application in the VO Dialect.", "SourceName": "XSharp.VOConsole", diff --git a/src/Templates/working/content/p_vomdiapplication/.template.config/template.json b/src/Templates/working/content/p_vomdiapplication/.template.config/template.json index cdfb5743ab..fab771bf85 100644 --- a/src/Templates/working/content/p_vomdiapplication/.template.config/template.json +++ b/src/Templates/working/content/p_vomdiapplication/.template.config/template.json @@ -6,7 +6,7 @@ "Desktop", "VO" ], - "Identity": "XSharp.VOMDIApplication", + "Identity": "XSharp.VOMDIApplication.SDK", "Name": "VO MDI Application (SDK)", "Description": "A SDK Style project for creating a VO MDI application in the VO Dialect.", "SourceName": "XSharp.VOMDIApplication", diff --git a/src/Templates/working/content/p_vosdiapplication/.template.config/template.json b/src/Templates/working/content/p_vosdiapplication/.template.config/template.json index f517c74670..a745831f99 100644 --- a/src/Templates/working/content/p_vosdiapplication/.template.config/template.json +++ b/src/Templates/working/content/p_vosdiapplication/.template.config/template.json @@ -6,7 +6,7 @@ "Desktop", "VO" ], - "Identity": "XSharp.VOSDIApplication", + "Identity": "XSharp.VOSDIApplication.SDK", "Name": "VO SDI Application (SDK)", "Description": "A SDK Style project for creating a VO SDI application in the VO Dialect.", "SourceName": "XSharp.VOSDIApplication", diff --git a/src/Templates/working/content/p_vulcanconsole/.template.config/template.json b/src/Templates/working/content/p_vulcanconsole/.template.config/template.json index 95dacd6c9d..78891ad9a2 100644 --- a/src/Templates/working/content/p_vulcanconsole/.template.config/template.json +++ b/src/Templates/working/content/p_vulcanconsole/.template.config/template.json @@ -6,7 +6,7 @@ "Console", "Vulcan" ], - "Identity": "XSharp.VulcanConsole", + "Identity": "XSharp.VulcanConsole.SDK", "Name": "Vulcan Application (SDK)", "Description": "A SDK Style project for creating a X# command-line application in the Vulcan dialect with Vulcan Runtime Assemblies (BYOR = Bring Your Own Runtime).", "SourceName": "XSharp.VulcanConsole", diff --git a/src/Templates/working/content/p_webmap/.template.config/template.json b/src/Templates/working/content/p_webmap/.template.config/template.json index f3b5131756..3af5b21dff 100644 --- a/src/Templates/working/content/p_webmap/.template.config/template.json +++ b/src/Templates/working/content/p_webmap/.template.config/template.json @@ -1,11 +1,11 @@ { "$schema": "http://json.schemastore.org/template", "Author": "XSharp", - "classifications": [ "Web","WebAPI","Web API","API","Service", "X#" ], - "identity": "XSharpBV.WebMap.XSharp", + "classifications": [ "Web", "WebAPI", "Web API", "API", "Service", "X#" ], + "identity": "XSharpBV.WebMap.XSharp.SDK", "name": "WebApp Application - RESTful with MapGet/MapPost (SDK)", "description": "A SDK Style project for creating a RESTful application that can run on .NET on Windows, Linux and macOS. This application is using MapGet/MapPost for routing.", - "sourceName":"XSharp.WebMap", + "sourceName": "XSharp.WebMap", "shortName": "xswebmap", "tags": { "language": "X#", diff --git a/src/Templates/working/content/p_webroute/.template.config/template.json b/src/Templates/working/content/p_webroute/.template.config/template.json index 406584850b..0dcfead451 100644 --- a/src/Templates/working/content/p_webroute/.template.config/template.json +++ b/src/Templates/working/content/p_webroute/.template.config/template.json @@ -1,11 +1,11 @@ { "$schema": "http://json.schemastore.org/template", "Author": "XSharp", - "classifications": [ "Web","WebAPI","Web API","API","Service", "X#" ], - "identity": "XSharpBV.WebRoute.XSharp", + "classifications": [ "Web", "WebAPI", "Web API", "API", "Service", "X#" ], + "identity": "XSharpBV.WebRoute.XSharp.SDK", "name": "WebApp Application - RESTful with Attributes (SDK)", "description": "A SDK Style project for creating a RESTful application that can run on .NET on Windows, Linux and macOS. This application is using Attributes for routing.", - "sourceName":"XSharp.WebRoute", + "sourceName": "XSharp.WebRoute", "shortName": "xswebroute", "tags": { "language": "X#", diff --git a/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json b/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json index 5242b731f9..cdba3d5201 100644 --- a/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json +++ b/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json @@ -5,7 +5,7 @@ "Windows", "Desktop" ], - "Identity": "XSharp.WindowsFormsApplication", + "Identity": "XSharp.WindowsFormsApplication.SDK", "Name": "Windows Forms Application (SDK)", "Description": "A SDK Style project for creating an application with a Windows Forms user interface.", "SourceName": "XSharp.WindowsFormsApplication", diff --git a/src/Templates/working/content/p_wpfapplication/.template.config/template.json b/src/Templates/working/content/p_wpfapplication/.template.config/template.json index 74bef54c03..784d76d9db 100644 --- a/src/Templates/working/content/p_wpfapplication/.template.config/template.json +++ b/src/Templates/working/content/p_wpfapplication/.template.config/template.json @@ -5,7 +5,7 @@ "Windows", "Desktop" ], - "Identity": "XSharp.WPFApplication", + "Identity": "XSharp.WPFApplication.SDK", "Name": "WPF Application (SDK)", "Description": "SDK Style Windows Presentation Foundation client application.", "SourceName": "XSharp.WPFApplication", diff --git a/src/Templates/working/content/p_xppconsole/.template.config/template.json b/src/Templates/working/content/p_xppconsole/.template.config/template.json index 5099b5fa01..cf78a14fb8 100644 --- a/src/Templates/working/content/p_xppconsole/.template.config/template.json +++ b/src/Templates/working/content/p_xppconsole/.template.config/template.json @@ -6,7 +6,7 @@ "Console", "XPP" ], - "Identity": "XSharp.XPPConsole", + "Identity": "XSharp.XPPConsole.SDK", "Name": "Xbase\u002B\u002B Console Application (SDK)", "Description": "A SDK Style project for creating a X# command-line application in the Xbase\u002B\u002B Dialect.", "SourceName": "XSharp.XPPConsole", diff --git a/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json b/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json index 5c3f2a8dc4..d5b90f30bc 100644 --- a/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json +++ b/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json @@ -5,7 +5,7 @@ "Windows", "Test" ], - "Identity": "XSharp.Test.XUnitClassLibrary", + "Identity": "XSharp.Test.XUnitClassLibrary.SDK", "Name": "Class Library with XUnit Testing (SDK)", "Description": "A SDK Style project for creating a X# class library (.dll) with XUnit Testing", "SourceName": "XSharp.Test.XUnitClassLibrary", From bba4e63dea7cdb7e939039f8ef94653bd0b54457 Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 18:18:21 +0100 Subject: [PATCH 12/17] [templates] More changes: lowecase parameter names etc --- .../.template.config/template.json | 6 +- .../i_bitmap/.template.config/template.json | 6 +- .../i_class/.template.config/template.json | 8 +-- .../i_classfox/.template.config/template.json | 8 +-- .../i_classxpp/.template.config/template.json | 8 +-- .../i_codefile/.template.config/template.json | 6 +- .../i_cursor/.template.config/template.json | 6 +- .../.template.config/template.json | 6 +- .../i_form/.template.config/template.json | 8 +-- .../.template.config/template.json | 8 +-- .../i_header/.template.config/template.json | 6 +- .../i_icon/.template.config/template.json | 6 +- .../.template.config/template.json | 8 +-- .../i_internal/.template.config/template.json | 6 +- .../.template.config/template.json | 6 +- .../i_page/.template.config/template.json | 8 +-- .../.template.config/template.json | 6 +- .../i_resource/.template.config/template.json | 6 +- .../.template.config/template.json | 6 +- .../.template.config/template.json | 8 +-- .../i_t4/.template.config/template.json | 6 +- .../i_textfile/.template.config/template.json | 6 +- .../.template.config/template.json | 8 +-- .../.template.config/template.json | 8 +-- .../.template.config/template.json | 8 +-- .../.template.config/template.json | 6 +- .../i_vomenu/.template.config/template.json | 8 +-- .../i_vowindow/.template.config/template.json | 8 +-- .../i_wcfitem/.template.config/template.json | 8 +-- .../i_webroute/.template.config/template.json | 8 +-- .../i_window/.template.config/template.json | 8 +-- .../.template.config/template.json | 50 +++++++------ .../p_classlibrary/XSharp.ClassLibrary.xsproj | 6 +- .../.template.config/template.json | 50 +++++++------ .../XSharp.ClassLibraryCore.xsproj | 7 +- .../.template.config/template.json | 50 +++++++------ .../XSharp.ClassLibraryFox.xsproj | 8 ++- .../.template.config/template.json | 50 +++++++------ .../XSharp.ClassLibraryHarbour.xsproj | 8 ++- .../.template.config/template.json | 50 +++++++------ .../XSharp.ClassLibraryVO.xsproj | 10 +-- .../.template.config/template.json | 50 +++++++------ .../XSharp.ClassLibraryVulcan.xsproj | 8 ++- .../.template.config/template.json | 50 +++++++------ .../XSharp.ClassLibraryXPP.xsproj | 8 ++- .../.template.config/template.json | 50 +++++++------ .../XSharp.ConsoleApplication.xsproj | 4 +- .../.template.config/template.json | 50 +++++++------ .../XSharp.HarbourConsole.xsproj | 8 ++- .../.template.config/template.json | 50 +++++++------ .../XSharp.Test.MsClassLibrary.xsproj | 4 +- .../p_netcore/.template.config/template.json | 50 +++++++------ .../XSharp.ConsoleApplication.NetCore.xsproj | 4 +- .../.template.config/template.json | 50 +++++++------ .../XSharp.Test.NUnitClassLibrary.xsproj | 4 +- .../.template.config/template.json | 50 +++++++------ .../p_vfpconsole/XSharp.VFPConsole.xsproj | 10 +-- .../.template.config/template.json | 50 +++++++------ .../p_voconsole/XSharp.VOConsole.xsproj | 10 +-- .../.template.config/template.json | 66 ++++++++++-------- .../content/p_vomdiapplication/HelpAbt.bmp | Bin 0 -> 48654 bytes .../p_vomdiapplication/Standard Shell.prg | 4 +- .../XSharp.VOMDIApplication.xsproj | 10 +-- .../content/p_vomdiapplication/XSharp.ico | Bin 0 -> 9662 bytes .../.template.config/template.json | 50 +++++++------ .../content/p_vosdiapplication/HelpAbt.bmp | Bin 0 -> 48654 bytes .../p_vosdiapplication/Standard SDI.prg | 52 +++++++------- .../XSharp.VOSDIApplication.xsproj | 8 ++- .../content/p_vosdiapplication/XSharp.ico | Bin 0 -> 9662 bytes .../.template.config/template.json | 50 +++++++------ .../XSharp.VulcanConsole.xsproj | 8 ++- .../content/p_webmap/XSharp.WebMap.xsproj | 4 +- .../content/p_webroute/XSharp.WebRoute.xsproj | 4 +- .../.template.config/template.json | 50 +++++++------ .../XSharp.WindowsFormsApplication.xsproj | 4 +- .../.template.config/template.json | 50 +++++++------ .../XSharp.WPFApplication.xsproj | 4 +- .../.template.config/template.json | 50 +++++++------ .../p_xppconsole/XSharp.XPPConsole.xsproj | 10 +-- .../.template.config/template.json | 50 +++++++------ .../XSharp.Test.XUnitClassLibrary.xsproj | 4 +- 81 files changed, 854 insertions(+), 641 deletions(-) create mode 100644 src/Templates/working/content/p_vomdiapplication/HelpAbt.bmp create mode 100644 src/Templates/working/content/p_vomdiapplication/XSharp.ico create mode 100644 src/Templates/working/content/p_vosdiapplication/HelpAbt.bmp create mode 100644 src/Templates/working/content/p_vosdiapplication/XSharp.ico diff --git a/src/Templates/working/content/i_appmanifestinternal/.template.config/template.json b/src/Templates/working/content/i_appmanifestinternal/.template.config/template.json index 8899bb6b5f..6d197ce336 100644 --- a/src/Templates/working/content/i_appmanifestinternal/.template.config/template.json +++ b/src/Templates/working/content/i_appmanifestinternal/.template.config/template.json @@ -4,13 +4,13 @@ "Classifications": [], "Identity": "XSharp.AppManifestInternal", "Name": "AppManifestInternal", - "Description": "A hidden app.manifest", + "description": "A hidden app.manifest", "SourceName": "AppManifestInternal", "ShortName": "xsappmanifestinternali", "Tags": { "language": "X#", "type": "item" }, - "PreferNameDirectory": true, - "DefaultName": "app.manifest" + "preferNameDirectory": true, + "defaultName": "app.manifest" } \ No newline at end of file diff --git a/src/Templates/working/content/i_bitmap/.template.config/template.json b/src/Templates/working/content/i_bitmap/.template.config/template.json index f5e01f8d66..2b44a29a42 100644 --- a/src/Templates/working/content/i_bitmap/.template.config/template.json +++ b/src/Templates/working/content/i_bitmap/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.Bitmap", "Name": "Bitmap", - "Description": "A Bitmap file", + "description": "A Bitmap file", "SourceName": "Bitmap", "ShortName": "xsbitmapi", "Tags": { @@ -14,6 +14,6 @@ "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Bitmap.bmp" + "preferNameDirectory": true, + "defaultName": "Bitmap.bmp" } \ No newline at end of file diff --git a/src/Templates/working/content/i_class/.template.config/template.json b/src/Templates/working/content/i_class/.template.config/template.json index 86e39ed684..6a7c3c3308 100644 --- a/src/Templates/working/content/i_class/.template.config/template.json +++ b/src/Templates/working/content/i_class/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.Class", "Name": "Class", - "Description": "An empty class definition", + "description": "An empty class definition", "SourceName": "Class1", "ShortName": "xsclassi", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Class1.prg", + "preferNameDirectory": true, + "defaultName": "Class1.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "Class1", "fileRename": "Class1", - "defaultValue": "Class1" + "defaultvalue": "Class1" } } } \ No newline at end of file diff --git a/src/Templates/working/content/i_classfox/.template.config/template.json b/src/Templates/working/content/i_classfox/.template.config/template.json index e1a397b779..026ceb477d 100644 --- a/src/Templates/working/content/i_classfox/.template.config/template.json +++ b/src/Templates/working/content/i_classfox/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.ClassFox", "Name": "ClassFox", - "Description": "An empty class definition using the VFP Class syntax", + "description": "An empty class definition using the VFP Class syntax", "SourceName": "ClassFox1", "ShortName": "xsclassfoxi", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Class1.prg", + "preferNameDirectory": true, + "defaultName": "Class1.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "Class1", "fileRename": "Class1", - "defaultValue": "Class1" + "defaultvalue": "Class1" } }, "postActions": [ diff --git a/src/Templates/working/content/i_classxpp/.template.config/template.json b/src/Templates/working/content/i_classxpp/.template.config/template.json index 449b5d8512..d498ecde61 100644 --- a/src/Templates/working/content/i_classxpp/.template.config/template.json +++ b/src/Templates/working/content/i_classxpp/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.ClassXpp", "Name": "ClassXpp", - "Description": "An empty class definition using the Xbase\u002B\u002B class syntax", + "description": "An empty class definition using the Xbase\u002B\u002B class syntax", "SourceName": "ClassXpp", "ShortName": "xsclassxppi", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Class1.prg", + "preferNameDirectory": true, + "defaultName": "Class1.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "Class1", "fileRename": "Class1", - "defaultValue": "Class1" + "defaultvalue": "Class1" } }, "postActions": [ diff --git a/src/Templates/working/content/i_codefile/.template.config/template.json b/src/Templates/working/content/i_codefile/.template.config/template.json index 9f209ed933..d2cac9708f 100644 --- a/src/Templates/working/content/i_codefile/.template.config/template.json +++ b/src/Templates/working/content/i_codefile/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.CodeFile", "Name": "CodeFile", - "Description": "An empty Code File", + "description": "An empty Code File", "SourceName": "CodeFile", "ShortName": "xscodefilei", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "CodeFile.prg" + "preferNameDirectory": true, + "defaultName": "CodeFile.prg" } diff --git a/src/Templates/working/content/i_cursor/.template.config/template.json b/src/Templates/working/content/i_cursor/.template.config/template.json index 9e14ac36ee..eb647e3c98 100644 --- a/src/Templates/working/content/i_cursor/.template.config/template.json +++ b/src/Templates/working/content/i_cursor/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.Cursor", "Name": "Cursor", - "Description": "A Cursor file", + "description": "A Cursor file", "SourceName": "Cursor", "ShortName": "xscursori", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Cursor.cur" + "preferNameDirectory": true, + "defaultName": "Cursor.cur" } diff --git a/src/Templates/working/content/i_flowdocument/.template.config/template.json b/src/Templates/working/content/i_flowdocument/.template.config/template.json index 93527c8f7e..cebadee7fe 100644 --- a/src/Templates/working/content/i_flowdocument/.template.config/template.json +++ b/src/Templates/working/content/i_flowdocument/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.WPF.FlowDocument", "Name": "Flow Document (WPF)", - "Description": "Dynamically formatted XAML document", + "description": "Dynamically formatted XAML document", "SourceName": "Flow Document (WPF)", "ShortName": "xsflowdocumenti", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "FlowDocument.xaml" + "preferNameDirectory": true, + "defaultName": "FlowDocument.xaml" } diff --git a/src/Templates/working/content/i_form/.template.config/template.json b/src/Templates/working/content/i_form/.template.config/template.json index d511fa048d..edde89ade6 100644 --- a/src/Templates/working/content/i_form/.template.config/template.json +++ b/src/Templates/working/content/i_form/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.Form", "Name": "Windows Forms Form", - "Description": "A Windows form with separate designer.prg", + "description": "A Windows form with separate designer.prg", "SourceName": "Form1", "ShortName": "xsformi", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Form1.prg", + "preferNameDirectory": true, + "defaultName": "Form1.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "Form1", "fileRename": "Form1", - "defaultValue": "Form1" + "defaultvalue": "Form1" } } } diff --git a/src/Templates/working/content/i_formsimple/.template.config/template.json b/src/Templates/working/content/i_formsimple/.template.config/template.json index 2be3327f9f..77ddd3f93a 100644 --- a/src/Templates/working/content/i_formsimple/.template.config/template.json +++ b/src/Templates/working/content/i_formsimple/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.FormSimple", "Name": "Windows Forms Simple Form", - "Description": "A simple Windows Forms Form without designer.prg", + "description": "A simple Windows Forms Form without designer.prg", "SourceName": "SimpleForm1", "ShortName": "xsformsimplei", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "SimpleForm1.prg", + "preferNameDirectory": true, + "defaultName": "SimpleForm1.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "SimpleForm1", "fileRename": "SimpleForm1", - "defaultValue": "SimpleForm1" + "defaultvalue": "SimpleForm1" } } } diff --git a/src/Templates/working/content/i_header/.template.config/template.json b/src/Templates/working/content/i_header/.template.config/template.json index 0ef2b85811..626b4a8222 100644 --- a/src/Templates/working/content/i_header/.template.config/template.json +++ b/src/Templates/working/content/i_header/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.Header", "Name": "Header", - "Description": "An empty Header File", + "description": "An empty Header File", "SourceName": "Header1", "ShortName": "xsheaderi", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Header1.xh" + "preferNameDirectory": true, + "defaultName": "Header1.xh" } diff --git a/src/Templates/working/content/i_icon/.template.config/template.json b/src/Templates/working/content/i_icon/.template.config/template.json index d547d1d321..d8a49b2867 100644 --- a/src/Templates/working/content/i_icon/.template.config/template.json +++ b/src/Templates/working/content/i_icon/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.Icon", "Name": "Icon", - "Description": "An Icon file", + "description": "An Icon file", "SourceName": "Icon", "ShortName": "xsiconi", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Icon.ico" + "preferNameDirectory": true, + "defaultName": "Icon.ico" } diff --git a/src/Templates/working/content/i_interface/.template.config/template.json b/src/Templates/working/content/i_interface/.template.config/template.json index ec5b8a6963..7e4df72ff7 100644 --- a/src/Templates/working/content/i_interface/.template.config/template.json +++ b/src/Templates/working/content/i_interface/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.Interface", "Name": "Interface", - "Description": "An empty interface definition", + "description": "An empty interface definition", "SourceName": "Interface1", "ShortName": "xsinterfacei", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Interface1.prg", + "preferNameDirectory": true, + "defaultName": "Interface1.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "Interface1", "fileRename": "Interface1", - "defaultValue": "Interface1" + "defaultvalue": "Interface1" } } } diff --git a/src/Templates/working/content/i_internal/.template.config/template.json b/src/Templates/working/content/i_internal/.template.config/template.json index 1a5241aa06..71cf9bdbeb 100644 --- a/src/Templates/working/content/i_internal/.template.config/template.json +++ b/src/Templates/working/content/i_internal/.template.config/template.json @@ -4,13 +4,13 @@ "Classifications": [], "Identity": "XSharp.Settings.Internal", "Name": "Settings Internal", - "Description": "A hidden settings file", + "description": "A hidden settings file", "SourceName": "Settings Internal", "ShortName": "xsinternali", "Tags": { "language": "X#", "type": "item" }, - "PreferNameDirectory": true, - "DefaultName": "Settings.settings" + "preferNameDirectory": true, + "defaultName": "Settings.settings" } diff --git a/src/Templates/working/content/i_nativeresource/.template.config/template.json b/src/Templates/working/content/i_nativeresource/.template.config/template.json index 75731ba57a..eb68011dcf 100644 --- a/src/Templates/working/content/i_nativeresource/.template.config/template.json +++ b/src/Templates/working/content/i_nativeresource/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.NativeResource", "Name": "Native Resource File (.rc)", - "Description": "A file in which native resources can be defined", + "description": "A file in which native resources can be defined", "SourceName": "NativeResources1", "ShortName": "xsnativeresourcei", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "NativeResources1.rc" + "preferNameDirectory": true, + "defaultName": "NativeResources1.rc" } diff --git a/src/Templates/working/content/i_page/.template.config/template.json b/src/Templates/working/content/i_page/.template.config/template.json index 8202ebd3a0..2059f001b1 100644 --- a/src/Templates/working/content/i_page/.template.config/template.json +++ b/src/Templates/working/content/i_page/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.WPF.Page", "Name": "Page (WPF)", - "Description": "Windows Presentation Foundation page", + "description": "Windows Presentation Foundation page", "SourceName": "Page1", "ShortName": "xspagei", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Page1.xaml", + "preferNameDirectory": true, + "defaultName": "Page1.xaml", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "Page1", "fileRename": "Page1", - "defaultValue": "Page1" + "defaultvalue": "Page1" } } } diff --git a/src/Templates/working/content/i_pagefunction/.template.config/template.json b/src/Templates/working/content/i_pagefunction/.template.config/template.json index 2eed4c051e..fbe12d18e3 100644 --- a/src/Templates/working/content/i_pagefunction/.template.config/template.json +++ b/src/Templates/working/content/i_pagefunction/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.WPF.PageFunction", "Name": "Page Function (WPF)", - "Description": "Windows Presentation Foundation page function", + "description": "Windows Presentation Foundation page function", "SourceName": "PageFunction1", "ShortName": "xspagefunctioni", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "PageFunction1.xaml" + "preferNameDirectory": true, + "defaultName": "PageFunction1.xaml" } diff --git a/src/Templates/working/content/i_resource/.template.config/template.json b/src/Templates/working/content/i_resource/.template.config/template.json index 67eb0fab91..78b2938cdb 100644 --- a/src/Templates/working/content/i_resource/.template.config/template.json +++ b/src/Templates/working/content/i_resource/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.Resource", "Name": "Managed resource file (.resx)", - "Description": "A file to store managed resources", + "description": "A file to store managed resources", "SourceName": "Resource1", "ShortName": "xsresourcei", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Resource1.resx" + "preferNameDirectory": true, + "defaultName": "Resource1.resx" } diff --git a/src/Templates/working/content/i_resourcedictionary/.template.config/template.json b/src/Templates/working/content/i_resourcedictionary/.template.config/template.json index 6502cf5a4c..4152bc9747 100644 --- a/src/Templates/working/content/i_resourcedictionary/.template.config/template.json +++ b/src/Templates/working/content/i_resourcedictionary/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.WPF.ResourceDictionary", "Name": "Resource Dictionary (WPF)", - "Description": "XAML Resource Dictionary", + "description": "XAML Resource Dictionary", "SourceName": "ResourceDictionary1", "ShortName": "xsresourcedictionaryi", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ResourceDictionary1.xaml" + "preferNameDirectory": true, + "defaultName": "ResourceDictionary1.xaml" } diff --git a/src/Templates/working/content/i_structure/.template.config/template.json b/src/Templates/working/content/i_structure/.template.config/template.json index cb0f426135..10e53df41b 100644 --- a/src/Templates/working/content/i_structure/.template.config/template.json +++ b/src/Templates/working/content/i_structure/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.Structure", "Name": "Structure", - "Description": "An empty structure definition", + "description": "An empty structure definition", "SourceName": "Structure1", "ShortName": "xsstructurei", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Structure1.prg", + "preferNameDirectory": true, + "defaultName": "Structure1.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "Structure1", "fileRename": "Structure1", - "defaultValue": "Structure1" + "defaultvalue": "Structure1" } } } diff --git a/src/Templates/working/content/i_t4/.template.config/template.json b/src/Templates/working/content/i_t4/.template.config/template.json index 317797fe95..57604e38b5 100644 --- a/src/Templates/working/content/i_t4/.template.config/template.json +++ b/src/Templates/working/content/i_t4/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.T4", "Name": "Text Template", - "Description": "A template for the T4 text template transformation system", + "description": "A template for the T4 text template transformation system", "SourceName": "TextTemplate1", "ShortName": "xst4i", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "TextTemplate1.tt" + "preferNameDirectory": true, + "defaultName": "TextTemplate1.tt" } diff --git a/src/Templates/working/content/i_textfile/.template.config/template.json b/src/Templates/working/content/i_textfile/.template.config/template.json index 5a82ba60db..685da6d67e 100644 --- a/src/Templates/working/content/i_textfile/.template.config/template.json +++ b/src/Templates/working/content/i_textfile/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.TextFile", "Name": "TextFile", - "Description": "An empty text file", + "description": "An empty text file", "SourceName": "TextFile1", "ShortName": "xstextfilei", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "TextFile1.txt" + "preferNameDirectory": true, + "defaultName": "TextFile1.txt" } diff --git a/src/Templates/working/content/i_usercontrol/.template.config/template.json b/src/Templates/working/content/i_usercontrol/.template.config/template.json index 57990abb93..db05193ff4 100644 --- a/src/Templates/working/content/i_usercontrol/.template.config/template.json +++ b/src/Templates/working/content/i_usercontrol/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.WinForms.UserControl", "Name": "UserControl (WinForms)", - "Description": "Windows Forms User control", + "description": "Windows Forms User control", "SourceName": "UserControl1", "ShortName": "xsusercontroli", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "UserControl1.prg", + "preferNameDirectory": true, + "defaultName": "UserControl1.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "UserControl1", "fileRename": "UserControl1", - "defaultValue": "UserControl1" + "defaultvalue": "UserControl1" } } } diff --git a/src/Templates/working/content/i_usercontrolwpf/.template.config/template.json b/src/Templates/working/content/i_usercontrolwpf/.template.config/template.json index 2c0c780378..b4d205deea 100644 --- a/src/Templates/working/content/i_usercontrolwpf/.template.config/template.json +++ b/src/Templates/working/content/i_usercontrolwpf/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.WPF.UserControl", "Name": "UserControl (WPF)", - "Description": "Windows Presentation Foundation user control", + "description": "Windows Presentation Foundation user control", "SourceName": "UserControl1", "ShortName": "xsusercontroli", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "UserControl1.xaml", + "preferNameDirectory": true, + "defaultName": "UserControl1.xaml", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "UserControl1", "fileRename": "UserControl1", - "defaultValue": "UserControl1" + "defaultvalue": "UserControl1" } } } diff --git a/src/Templates/working/content/i_vodbserver/.template.config/template.json b/src/Templates/working/content/i_vodbserver/.template.config/template.json index 039e8e3818..63efc41d2d 100644 --- a/src/Templates/working/content/i_vodbserver/.template.config/template.json +++ b/src/Templates/working/content/i_vodbserver/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.VODBServer", "Name": "VODBServer", - "Description": "An empty DBServer", + "description": "An empty DBServer", "SourceName": "VODBServer1", "ShortName": "xsvodbserveri", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "VODBServer1.prg", + "preferNameDirectory": true, + "defaultName": "VODBServer1.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "VODBServer1", "fileRename": "VODBServer1", - "defaultValue": "VODBServer1" + "defaultvalue": "VODBServer1" } }, "postActions": [ diff --git a/src/Templates/working/content/i_vofieldspec/.template.config/template.json b/src/Templates/working/content/i_vofieldspec/.template.config/template.json index d4b88385d5..21d75d40d7 100644 --- a/src/Templates/working/content/i_vofieldspec/.template.config/template.json +++ b/src/Templates/working/content/i_vofieldspec/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.VOFieldSpec", "Name": "VOFieldSpec", - "Description": "An empty FieldSpec container file", + "description": "An empty FieldSpec container file", "SourceName": "VOFieldSpec", "ShortName": "xsvofieldspeci", "Tags": { @@ -13,6 +13,6 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "Fieldspecs.prg" + "preferNameDirectory": true, + "defaultName": "Fieldspecs.prg" } diff --git a/src/Templates/working/content/i_vomenu/.template.config/template.json b/src/Templates/working/content/i_vomenu/.template.config/template.json index 5b7de54f98..6d360332c1 100644 --- a/src/Templates/working/content/i_vomenu/.template.config/template.json +++ b/src/Templates/working/content/i_vomenu/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.VOMenu", "Name": "VOMenu", - "Description": "An empty VO Menu", + "description": "An empty VO Menu", "SourceName": "VOMenu", "ShortName": "xsvomenui", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "VOMenu.prg", + "preferNameDirectory": true, + "defaultName": "VOMenu.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "VOMenu", "fileRename": "VOMenu", - "defaultValue": "VOMenu" + "defaultvalue": "VOMenu" } }, "postActions": [ diff --git a/src/Templates/working/content/i_vowindow/.template.config/template.json b/src/Templates/working/content/i_vowindow/.template.config/template.json index 35f81fb3fa..c9118b9b95 100644 --- a/src/Templates/working/content/i_vowindow/.template.config/template.json +++ b/src/Templates/working/content/i_vowindow/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.VOWindow", "Name": "VOWindow", - "Description": "An empty VO Window", + "description": "An empty VO Window", "SourceName": "VOWindow", "ShortName": "xsvowindowi", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "VOWindow.prg", + "preferNameDirectory": true, + "defaultName": "VOWindow.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "VOWindow", "fileRename": "VOWindow", - "defaultValue": "VOWindow" + "defaultvalue": "VOWindow" } }, "postActions": [ diff --git a/src/Templates/working/content/i_wcfitem/.template.config/template.json b/src/Templates/working/content/i_wcfitem/.template.config/template.json index d4b1d5407c..8563860519 100644 --- a/src/Templates/working/content/i_wcfitem/.template.config/template.json +++ b/src/Templates/working/content/i_wcfitem/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.WcfItem", "Name": "WCF Service", - "Description": "A WCF Service", + "description": "A WCF Service", "SourceName": "WCFService1", "ShortName": "xswcfitemi", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "WCFService1.prg", + "preferNameDirectory": true, + "defaultName": "WCFService1.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "WCFService1", "fileRename": "WCFService1", - "defaultValue": "WCFService1" + "defaultvalue": "WCFService1" } } } diff --git a/src/Templates/working/content/i_webroute/.template.config/template.json b/src/Templates/working/content/i_webroute/.template.config/template.json index e0beb3d3df..2e56969f19 100644 --- a/src/Templates/working/content/i_webroute/.template.config/template.json +++ b/src/Templates/working/content/i_webroute/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.APIController", "Name": "APIController", - "Description": "An empty Web API controller", + "description": "An empty Web API controller", "SourceName": "APIController", "ShortName": "xsapicontrolleri", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "APIController.prg", + "preferNameDirectory": true, + "defaultName": "APIController.prg", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "APIController", "fileRename": "APIController", - "defaultValue": "APIController" + "defaultvalue": "APIController" } } } diff --git a/src/Templates/working/content/i_window/.template.config/template.json b/src/Templates/working/content/i_window/.template.config/template.json index 1b79a79127..9aba339624 100644 --- a/src/Templates/working/content/i_window/.template.config/template.json +++ b/src/Templates/working/content/i_window/.template.config/template.json @@ -4,7 +4,7 @@ "Classifications": [], "Identity": "XSharp.WPF.Window", "Name": "Window (WPF)", - "Description": "Windows Presentation Foundation window", + "description": "Windows Presentation Foundation window", "SourceName": "WPFWindow1", "ShortName": "xswindowi", "Tags": { @@ -13,8 +13,8 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "WPFWindow1.xaml", + "preferNameDirectory": true, + "defaultName": "WPFWindow1.xaml", "symbols": { "name": { "type": "parameter", @@ -22,7 +22,7 @@ "datatype": "string", "replaces": "WPFWindow1", "fileRename": "WPFWindow1", - "defaultValue": "WPFWindow1" + "defaultvalue": "WPFWindow1" } } } diff --git a/src/Templates/working/content/p_classlibrary/.template.config/template.json b/src/Templates/working/content/p_classlibrary/.template.config/template.json index 55b37c5ffe..8cd850cd4e 100644 --- a/src/Templates/working/content/p_classlibrary/.template.config/template.json +++ b/src/Templates/working/content/p_classlibrary/.template.config/template.json @@ -7,7 +7,7 @@ ], "Identity": "XSharp.ClassLibrary.SDK", "Name": "Class Library Core Dialect without Runtime (SDK)", - "Description": "A SDK Style project for creating a X# class library (.dll) for the Core dialect with no dependencies on the runtime", + "description": "A SDK Style project for creating a X# class library (.dll) for the Core dialect with no dependencies on the runtime", "SourceName": "XSharp.ClassLibrary", "ShortName": "xsclasslibrary", "Tags": { @@ -16,35 +16,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ClassLibrary", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ClassLibrary", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_classlibrary/XSharp.ClassLibrary.xsproj b/src/Templates/working/content/p_classlibrary/XSharp.ClassLibrary.xsproj index 28e2545905..42a8f29bd6 100644 --- a/src/Templates/working/content/p_classlibrary/XSharp.ClassLibrary.xsproj +++ b/src/Templates/working/content/p_classlibrary/XSharp.ClassLibrary.xsproj @@ -6,7 +6,9 @@ Core True True - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 - + \ No newline at end of file diff --git a/src/Templates/working/content/p_classlibrarycore/.template.config/template.json b/src/Templates/working/content/p_classlibrarycore/.template.config/template.json index 613431c1f0..ca873b1a78 100644 --- a/src/Templates/working/content/p_classlibrarycore/.template.config/template.json +++ b/src/Templates/working/content/p_classlibrarycore/.template.config/template.json @@ -7,7 +7,7 @@ ], "Identity": "XSharp.ClassLibraryCore.SDK", "Name": "Class Library Core Dialect with Runtime (SDK)", - "Description": "A SDK Style project for creating a X# class library (.dll) for the Core dialect with a dependency on XSharp.Core", + "description": "A SDK Style project for creating a X# class library (.dll) for the Core dialect with a dependency on XSharp.Core", "SourceName": "XSharp.ClassLibraryCore", "ShortName": "xsclasslibrarycore", "Tags": { @@ -16,35 +16,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ClassLibrary", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ClassLibrary", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_classlibrarycore/XSharp.ClassLibraryCore.xsproj b/src/Templates/working/content/p_classlibrarycore/XSharp.ClassLibraryCore.xsproj index 68c7727ddc..349a8d8272 100644 --- a/src/Templates/working/content/p_classlibrarycore/XSharp.ClassLibraryCore.xsproj +++ b/src/Templates/working/content/p_classlibrarycore/XSharp.ClassLibraryCore.xsproj @@ -6,11 +6,12 @@ Core True True - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 - - + \ No newline at end of file diff --git a/src/Templates/working/content/p_classlibraryfox/.template.config/template.json b/src/Templates/working/content/p_classlibraryfox/.template.config/template.json index 83a7596735..f5d818c491 100644 --- a/src/Templates/working/content/p_classlibraryfox/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryfox/.template.config/template.json @@ -8,7 +8,7 @@ ], "Identity": "XSharp.ClassLibraryFox.SDK", "Name": "Class Library FoxPro Dialect (SDK)", - "Description": "A SDK Style project for creating a X# class library (.dll) for the Visual FoxPro Dialect", + "description": "A SDK Style project for creating a X# class library (.dll) for the Visual FoxPro Dialect", "SourceName": "XSharp.ClassLibraryFox", "ShortName": "xsclasslibraryfox", "Tags": { @@ -17,35 +17,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ClassLibrary", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ClassLibrary", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_classlibraryfox/XSharp.ClassLibraryFox.xsproj b/src/Templates/working/content/p_classlibraryfox/XSharp.ClassLibraryFox.xsproj index a599d7249d..1211e7d8a8 100644 --- a/src/Templates/working/content/p_classlibraryfox/XSharp.ClassLibraryFox.xsproj +++ b/src/Templates/working/content/p_classlibraryfox/XSharp.ClassLibraryFox.xsproj @@ -25,11 +25,13 @@ true True False - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 - + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json b/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json index c5a6a288eb..91650fad49 100644 --- a/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryharbour/.template.config/template.json @@ -8,7 +8,7 @@ ], "Identity": "XSharp.ClassLibraryHarbour.SDK", "Name": "Class Library Harbour Dialect (SDK)", - "Description": "A SDK Style project for creating a X# class library (.dll) for the Harbour Dialect", + "description": "A SDK Style project for creating a X# class library (.dll) for the Harbour Dialect", "SourceName": "XSharp.ClassLibraryHarbour", "ShortName": "xsclasslibraryharbour", "Tags": { @@ -17,35 +17,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ClassLibrary", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ClassLibrary", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_classlibraryharbour/XSharp.ClassLibraryHarbour.xsproj b/src/Templates/working/content/p_classlibraryharbour/XSharp.ClassLibraryHarbour.xsproj index eb1063b141..8d828b2c81 100644 --- a/src/Templates/working/content/p_classlibraryharbour/XSharp.ClassLibraryHarbour.xsproj +++ b/src/Templates/working/content/p_classlibraryharbour/XSharp.ClassLibraryHarbour.xsproj @@ -18,11 +18,13 @@ true true False - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 - + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_classlibraryvo/.template.config/template.json b/src/Templates/working/content/p_classlibraryvo/.template.config/template.json index c7ddc75025..fa715b78d0 100644 --- a/src/Templates/working/content/p_classlibraryvo/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryvo/.template.config/template.json @@ -8,7 +8,7 @@ ], "Identity": "XSharp.ClassLibraryVO.SDK", "Name": "Class Library VO Dialect (SDK)", - "Description": "A SDK Style project for creating a X# class library (.dll) for the VO Dialect", + "description": "A SDK Style project for creating a X# class library (.dll) for the VO Dialect", "SourceName": "XSharp.ClassLibraryVO", "ShortName": "xsclasslibraryvo", "Tags": { @@ -17,35 +17,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ClassLibrary", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ClassLibrary", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_classlibraryvo/XSharp.ClassLibraryVO.xsproj b/src/Templates/working/content/p_classlibraryvo/XSharp.ClassLibraryVO.xsproj index 3c62aabea6..df4f252f6e 100644 --- a/src/Templates/working/content/p_classlibraryvo/XSharp.ClassLibraryVO.xsproj +++ b/src/Templates/working/content/p_classlibraryvo/XSharp.ClassLibraryVO.xsproj @@ -18,12 +18,14 @@ true true False - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 - - + + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json b/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json index 6afc15044e..b22e46d02e 100644 --- a/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryvulcan/.template.config/template.json @@ -8,7 +8,7 @@ ], "Identity": "XSharp.ClassLibraryVulcan.SDK", "Name": "Class Library Vulcan Dialect (SDK)", - "Description": "A SDK Style project for creating a X# class library (.dll) for the Vulcan Dialect", + "description": "A SDK Style project for creating a X# class library (.dll) for the Vulcan Dialect", "SourceName": "XSharp.ClassLibraryVulcan", "ShortName": "xsclasslibraryvulcan", "Tags": { @@ -17,35 +17,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ClassLibrary", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ClassLibrary", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_classlibraryvulcan/XSharp.ClassLibraryVulcan.xsproj b/src/Templates/working/content/p_classlibraryvulcan/XSharp.ClassLibraryVulcan.xsproj index 87f95da8c7..21a93e8fa5 100644 --- a/src/Templates/working/content/p_classlibraryvulcan/XSharp.ClassLibraryVulcan.xsproj +++ b/src/Templates/working/content/p_classlibraryvulcan/XSharp.ClassLibraryVulcan.xsproj @@ -18,11 +18,13 @@ true true False - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 - + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json b/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json index cdeefa380d..1da8917355 100644 --- a/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json +++ b/src/Templates/working/content/p_classlibraryxpp/.template.config/template.json @@ -8,7 +8,7 @@ ], "Identity": "XSharp.ClassLibraryXPP.SDK", "Name": "Class Library XBase\u002B\u002B Dialect (SDK)", - "Description": "A SDK Style project for creating a X# class library (.dll) for the Xbase\u002B\u002B Dialect", + "description": "A SDK Style project for creating a X# class library (.dll) for the Xbase\u002B\u002B Dialect", "SourceName": "XSharp.ClassLibraryXPP", "ShortName": "xsclasslibraryxpp", "Tags": { @@ -17,35 +17,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ClassLibrary", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ClassLibrary", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_classlibraryxpp/XSharp.ClassLibraryXPP.xsproj b/src/Templates/working/content/p_classlibraryxpp/XSharp.ClassLibraryXPP.xsproj index c8c101f159..f542e44c1b 100644 --- a/src/Templates/working/content/p_classlibraryxpp/XSharp.ClassLibraryXPP.xsproj +++ b/src/Templates/working/content/p_classlibraryxpp/XSharp.ClassLibraryXPP.xsproj @@ -18,11 +18,13 @@ true true False - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 - + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_consoleapplication/.template.config/template.json b/src/Templates/working/content/p_consoleapplication/.template.config/template.json index 86cb9691ef..ab9887fa8a 100644 --- a/src/Templates/working/content/p_consoleapplication/.template.config/template.json +++ b/src/Templates/working/content/p_consoleapplication/.template.config/template.json @@ -7,42 +7,50 @@ ], "Identity": "XSharp.ConsoleApplication.SDK", "Name": "Console Application (SDK)", - "Description": "A SDK Style project for creating a X# command-line application in the core dialect.", + "description": "A SDK Style project for creating a X# command-line application in the core dialect.", "SourceName": "XSharp.ConsoleApplication", "ShortName": "xsconsoleapplication", "Tags": { "language": "X#", "type": "project" }, - "PreferNameDirectory": true, - "DefaultName": "ConsoleApplication", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ConsoleApplication", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_consoleapplication/XSharp.ConsoleApplication.xsproj b/src/Templates/working/content/p_consoleapplication/XSharp.ConsoleApplication.xsproj index 72089c34fb..ea4ec9e419 100644 --- a/src/Templates/working/content/p_consoleapplication/XSharp.ConsoleApplication.xsproj +++ b/src/Templates/working/content/p_consoleapplication/XSharp.ConsoleApplication.xsproj @@ -2,6 +2,8 @@ ConsoleApplication - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 \ No newline at end of file diff --git a/src/Templates/working/content/p_harbourconsole/.template.config/template.json b/src/Templates/working/content/p_harbourconsole/.template.config/template.json index ebcf1a67ad..2f783c29c8 100644 --- a/src/Templates/working/content/p_harbourconsole/.template.config/template.json +++ b/src/Templates/working/content/p_harbourconsole/.template.config/template.json @@ -8,7 +8,7 @@ ], "Identity": "XSharp.HarbourConsole.SDK", "Name": "Harbour Console Application (SDK)", - "Description": "A SDK Style project for creating a X# command-line application in the Harbour Dialect.", + "description": "A SDK Style project for creating a X# command-line application in the Harbour Dialect.", "SourceName": "XSharp.HarbourConsole", "ShortName": "xsharbourconsole", "Tags": { @@ -17,35 +17,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ConsoleApplication", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ConsoleApplication", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_harbourconsole/XSharp.HarbourConsole.xsproj b/src/Templates/working/content/p_harbourconsole/XSharp.HarbourConsole.xsproj index 91e5e93fcd..37b7010a39 100644 --- a/src/Templates/working/content/p_harbourconsole/XSharp.HarbourConsole.xsproj +++ b/src/Templates/working/content/p_harbourconsole/XSharp.HarbourConsole.xsproj @@ -7,11 +7,13 @@ True True False - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 - + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_msclasslibrary/.template.config/template.json b/src/Templates/working/content/p_msclasslibrary/.template.config/template.json index 0f477cf38b..336359be64 100644 --- a/src/Templates/working/content/p_msclasslibrary/.template.config/template.json +++ b/src/Templates/working/content/p_msclasslibrary/.template.config/template.json @@ -7,7 +7,7 @@ ], "Identity": "XSharp.Test.MsClassLibrary.SDK", "Name": "Class Library with MsTest Support (SDK)", - "Description": "A SDK Style project for creating a X# class library (.dll) with MS Unit Testing", + "description": "A SDK Style project for creating a X# class library (.dll) with MS Unit Testing", "SourceName": "XSharp.Test.MsClassLibrary", "ShortName": "xsmsclasslibrary", "Tags": { @@ -16,35 +16,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "MsUnitTestClassLibrary", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "MsUnitTestClassLibrary", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_msclasslibrary/XSharp.Test.MsClassLibrary.xsproj b/src/Templates/working/content/p_msclasslibrary/XSharp.Test.MsClassLibrary.xsproj index 56c2f9a690..e40ccba2e5 100644 --- a/src/Templates/working/content/p_msclasslibrary/XSharp.Test.MsClassLibrary.xsproj +++ b/src/Templates/working/content/p_msclasslibrary/XSharp.Test.MsClassLibrary.xsproj @@ -12,6 +12,8 @@ Core True True - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 \ No newline at end of file diff --git a/src/Templates/working/content/p_netcore/.template.config/template.json b/src/Templates/working/content/p_netcore/.template.config/template.json index d6b16ee6fc..718e88a307 100644 --- a/src/Templates/working/content/p_netcore/.template.config/template.json +++ b/src/Templates/working/content/p_netcore/.template.config/template.json @@ -7,42 +7,50 @@ ], "Identity": "XSharp.ConsoleApplication.NetCore.SDK", "Name": "Console Application (.Net Core) (SDK)", - "Description": "A SDK Style project for creating a X# command-line application in the core dialect.", + "description": "A SDK Style project for creating a X# command-line application in the core dialect.", "SourceName": "XSharp.ConsoleApplication.NetCore", "ShortName": "xsnetcore", "Tags": { "language": "X#", "type": "project" }, - "PreferNameDirectory": true, - "DefaultName": "ConsoleApplication", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ConsoleApplication", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_netcore/XSharp.ConsoleApplication.NetCore.xsproj b/src/Templates/working/content/p_netcore/XSharp.ConsoleApplication.NetCore.xsproj index 72089c34fb..ea4ec9e419 100644 --- a/src/Templates/working/content/p_netcore/XSharp.ConsoleApplication.NetCore.xsproj +++ b/src/Templates/working/content/p_netcore/XSharp.ConsoleApplication.NetCore.xsproj @@ -2,6 +2,8 @@ ConsoleApplication - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 \ No newline at end of file diff --git a/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json b/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json index 8515691620..f6a81f5915 100644 --- a/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json +++ b/src/Templates/working/content/p_nunitclasslibrary/.template.config/template.json @@ -7,7 +7,7 @@ ], "Identity": "XSharp.Test.NUnitClassLibrary.SDK", "Name": "Class Library with NUnit Testing (SDK)", - "Description": "A SDK Style project for creating a X# class library (.dll) with NUnit Testing", + "description": "A SDK Style project for creating a X# class library (.dll) with NUnit Testing", "SourceName": "XSharp.Test.NUnitClassLibrary", "ShortName": "xsnunitclasslibrary", "Tags": { @@ -16,35 +16,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "NUnitTestClassLibrary", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "NUnitTestClassLibrary", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_nunitclasslibrary/XSharp.Test.NUnitClassLibrary.xsproj b/src/Templates/working/content/p_nunitclasslibrary/XSharp.Test.NUnitClassLibrary.xsproj index 672c755ef1..0d307110d5 100644 --- a/src/Templates/working/content/p_nunitclasslibrary/XSharp.Test.NUnitClassLibrary.xsproj +++ b/src/Templates/working/content/p_nunitclasslibrary/XSharp.Test.NUnitClassLibrary.xsproj @@ -7,6 +7,8 @@ Core True True - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 \ No newline at end of file diff --git a/src/Templates/working/content/p_vfpconsole/.template.config/template.json b/src/Templates/working/content/p_vfpconsole/.template.config/template.json index f5d57cac85..26e933b4f9 100644 --- a/src/Templates/working/content/p_vfpconsole/.template.config/template.json +++ b/src/Templates/working/content/p_vfpconsole/.template.config/template.json @@ -8,7 +8,7 @@ ], "Identity": "XSharp.VFPConsole.SDK", "Name": "FoxPro Console Application (SDK)", - "Description": "A SDK Style project for creating a X# command-line application in the Visual FoxPro Dialect.", + "description": "A SDK Style project for creating a X# command-line application in the Visual FoxPro Dialect.", "SourceName": "XSharp.VFPConsole", "ShortName": "xsvfpconsole", "Tags": { @@ -17,35 +17,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ConsoleApplication", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ConsoleApplication", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_vfpconsole/XSharp.VFPConsole.xsproj b/src/Templates/working/content/p_vfpconsole/XSharp.VFPConsole.xsproj index db380bca9e..1979f37143 100644 --- a/src/Templates/working/content/p_vfpconsole/XSharp.VFPConsole.xsproj +++ b/src/Templates/working/content/p_vfpconsole/XSharp.VFPConsole.xsproj @@ -27,11 +27,13 @@ true True False - net8.0 - - + net8.0 + TargetFrameworkOverride + Company.Namespace1 + + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_voconsole/.template.config/template.json b/src/Templates/working/content/p_voconsole/.template.config/template.json index 021fc80f5c..bd6e812205 100644 --- a/src/Templates/working/content/p_voconsole/.template.config/template.json +++ b/src/Templates/working/content/p_voconsole/.template.config/template.json @@ -8,7 +8,7 @@ ], "Identity": "XSharp.VOConsole.SDK", "Name": "VO Console Application (SDK)", - "Description": "A SDK Style project for creating a X# command-line application in the VO Dialect.", + "description": "A SDK Style project for creating a X# command-line application in the VO Dialect.", "SourceName": "XSharp.VOConsole", "ShortName": "xsvoconsole", "Tags": { @@ -17,35 +17,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ConsoleApplication", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ConsoleApplication", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_voconsole/XSharp.VOConsole.xsproj b/src/Templates/working/content/p_voconsole/XSharp.VOConsole.xsproj index 8d2808a0c7..75e1244002 100644 --- a/src/Templates/working/content/p_voconsole/XSharp.VOConsole.xsproj +++ b/src/Templates/working/content/p_voconsole/XSharp.VOConsole.xsproj @@ -7,11 +7,13 @@ True True False - net8.0 - - + net8.0 + TargetFrameworkOverride + Company.Namespace1 + + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_vomdiapplication/.template.config/template.json b/src/Templates/working/content/p_vomdiapplication/.template.config/template.json index fab771bf85..c28a6ff0a4 100644 --- a/src/Templates/working/content/p_vomdiapplication/.template.config/template.json +++ b/src/Templates/working/content/p_vomdiapplication/.template.config/template.json @@ -1,51 +1,59 @@ { "$schema": "http://json.schemastore.org/template", - "Author": "XSharp", - "Classifications": [ + "author": "XSharp", + "classifications": [ "Windows", "Desktop", "VO" ], - "Identity": "XSharp.VOMDIApplication.SDK", - "Name": "VO MDI Application (SDK)", - "Description": "A SDK Style project for creating a VO MDI application in the VO Dialect.", - "SourceName": "XSharp.VOMDIApplication", - "ShortName": "xsvomdiapplication", - "Tags": { + "identity": "XSharp.VOMDIApplication.SDK", + "name": "VO MDI Application (SDK)", + "description": "A SDK Style project for creating a VO MDI application in the VO Dialect.", + "sourceName": "XSharp.VOMDIApplication", + "shortName": "xsvomdiapplication", + "tags": { "language": "X#", "type": "project", "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "VOMDIApp", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "VOMDIApp", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net46", - "Description": "Target .NET Framework 4.6" + "choice": "net46", + "description": "Target .NET Framework 4.6" }, { - "Choice": "net47", - "Description": "Target .NET Framework 4.7" + "choice": "net47", + "description": "Target .NET Framework 4.7" }, { - "Choice": "net48", - "Description": "Target .NET Framework 4.8" + "choice": "net48", + "description": "Target .NET Framework 4.8" } ], - "Replaces": "net46", - "DefaultValue": "net46" + "replaces": "net46", + "defaultvalue": "net46" }, - "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "RootNamespace": { + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } \ No newline at end of file diff --git a/src/Templates/working/content/p_vomdiapplication/HelpAbt.bmp b/src/Templates/working/content/p_vomdiapplication/HelpAbt.bmp new file mode 100644 index 0000000000000000000000000000000000000000..63825a67f109af39f89a4c03953b75eee17da86f GIT binary patch literal 48654 zcmeHQcUV-%7WciE@BQ(d5F2WuV31xG5U?bcl=l)9 z#n@@mY^VgghQz2~j2#;)i3L;;8v+{Nxw|lX_wK!S3!4}7W&8%dxpU8)8Gd_q=A1KU zjz0dK4|Y=hQ^0Q#{Op3CVEFl4CrkL^0gM1f03(1AzzARjFaj6>i~vReBY+XW2w(&-0vG{|07l@| zt5db-mQ=3TaIs*+#X@@7SXGp9X5*?eS+9OG8%$>p>?!$tVR`o2@3Ph~N_p0rvgMy& z`mx+>gJDJ;MnG2RXPfIS$Qz(rgn92;=Xm;T9pB+WC$^5qf_mx3YwJ3~yE z#-^CiM5jJ!B!`-z5Y3f3C?z%~aK>H!ZwM4!-pQksN{dHWWqX!ZA24b@w=P|nWA!F% z8C;77yo$E#dj5!UY>k=&CN>KK!*)z?Dd1E}-3xss1;dOQX#PNPio~8vFkmrJy7pZ; zHNYsInD`Gt;O4`cUYq1RN~wKr|3wwc4V>HFRbRyjx^W7ILIfslEYYL6smVZwnCy>5 zAo2T8d6ZH~k)KVD*ZpS?^iJ||{ex(M1;0Zh+QH(x?6rDXVS?8O0YT0H@M&-xls6Ddkg2hmnONcxIj~wFAqPbI~9vhepx-L>>%i#4p2yJvb}VV z?{8nd6lv3iXEycV^-!yM$K8J<^92!Y~5e!Ow2V*i@ujrZ>}21SoQ6y{zyvcJ0W7?g|U2agu#qF1Suy(=ocfUEN_{mNbnohAv4ZYAy9t=IVA!^{w4g3}D>06iG4>X4e6KFx zMEz{kVAfujE02YCe*=O*+K2_+!Yuz;xoaCMF>dTQ0wYQ$^C+e8%CBUydX%OoPof<7 zBQ%H@fyI$5;~X041Kj9pEz}nblCu6?zg##Awhvu0;~jhMU2UkRj+G~Ffk~_zo-m^P~`p)v6sX4rJ=jvr+=d>bZT(Y|j5;@qF z;+%RlKX2CM)73?X|bPp>&TFak_GM#^z|Hl znp8#Y&`3`(VM;l%q4eblmW3#Li-x+px~w4NIaw~C2Z}%}*;nKF{4lyqaEq}BY`F|d zsRx@q>*rcBGGLxhK$t9coMN7s-QNXDLWP43gINLqT5$^#eOp3$~5yKji>g8nGxVV?$2tZ6}U+tJuYBwqIpE$=m zC{!LaTQPn%IWfX}p^RW?9ZDCg)gJ~LJ`jVlV%PRKVGs0iLj{iYk8j<~AX7iCnl>(p zrku=`3qf%;-}M^SF>xb>Ks*&ws_~S%?iexZi(wOHNI@{vB_Ny(o8~oNEI^6}<h$tH<}TF-(J3S-t41} zDV1#T^C}oMX}UZpj6|{#7^WB-sYo0xPnW2~Lw)5WYfVSy08aQAVK;5dwC|P$?19HS zw3QR+6-!v&`vr%ucjOZ=v~S_166+i<@RYjjd_Op0V9-ozH=&on+2puLuk-;fpm-#U z?G_G^8_Jr4uC=w5vP?+=6|hVpKADxgJZ}T|yHZIJA_kAg?JJj9iE*RZ5%4XUDBAL# z?>8fZLnL&mK=tt-lT*XI7f6K>HgDBl*Lc(ooJro?m=(ePD<^*dW!02_ub4DO31$vS zq$t{pT#(}Jk~uwaTYpg#tNlKvk$ z-*|f4K!%8{@qS$l(F1k_qS)qAUwG%0%2o?uK(_SGGNXIlrJ4qx^&NmG)7`D(C zjfg8|M4+zvS|VW?9PR~1D_tH?9aN5q(`AD*h7K*AWbC*tEiFnnYr5Y%6^`|(3$vOJ z7wRbrR@o523Nu%AyS80gsE*0n*QS7Zf^+W|FR^KB?1!VDe(A_}Q(UZ5hl;`31!90i zLQ|O~4@w;9R`NbXq;I`as-L4a#r%PiDBHK=gxzCR1uF4wHtCdXXiBPrh<56YXb@!- zVF}v}of0}G$b@uCu!tjUyRe?fXio$`8HWIzumiSW2!MM$I?!Y695Rq$r-YG{X2`ws z{lUl;7Y!HW8XZag=)wKtC0i?bN4i-KwAV?pD*N ze^-{4oZ9!T(%UsrCPb7_PZ=mVUw)`k#SJKd`K`+rjr+4PwLS#kpfk>?XR6vOP7({m zf*GOS<384yu^=ZCrc1#g=C)&`IwA{>c6) zySM2U1mK@86(svf$3{|$2P_(sLL`H-{NVtOeqsx;VGumlk!e&N`+?y$k8|v~Z}l=( zo>{SBT5fZah!a^pZ+gy3j2q2@0DSxCp%HDXhf48?nCJx#ji8TY8@-0OrA#VjcU+NHS3i^L zpCsTo=K5*ATX?K|aHAmzz|BNRxTLk4FnkE0oyr75R{FYbV~dCU2`vy<4i>9sks(EJ#Q*c&-K@m8v4aSFI?NMJ%`|8;1cS<< zVYP1Z_;2qYX`{B!!C! zbdf-HSUO-~`S$uj6Xx^ZpphwJTjcPBDJk8pU%Yss%c}L|3%FCMl8rVO2LztwB}M8| z;+BpekTK;0x;;q$GOFva?=SN8q7M;vC<*RDB6(m`Kq-ajAUeH)^$js$ajrH=q)1(q zaw5{P*R!WjS-VG2o^t{b$Gh9Em}YuVBI^);@y65pN~84U(1^5q`?j|Kx#dNRU5+=` zg#{25$c(-4ID14N0{rLwWz^ZLhbUE5(mWlN5Wk^1M}wm@bxD#55@APEz~P#vP>-HY z334GKqbgv=N`>j3j))s{SvuMj5k)ini&v8Pb7(+PP{*DHb7OT;T5)=VU0y$))Goa@ zk@uhSWrg}CYzm}32jx>;!0(+PS8WhfAcv+XWkPs`$WTQU@1Y@sF3BKQ+LV#jZ=E@0 zy30lPum0<_bLv<_&PA8;rX6C%IZLo8Zrn)wr@*V6>vOf>99{4Rg(^#=e*?r1T;=K# zX>XC<_Qh|rJ|Hk7-qi{bXjNSLGU7epF;dW-M$;v<+duYwvw~{^xSbV&eVJcF3JdBS zQ~QgC9@P$w=S|O8yQ9WikMHv5&j(NG;uD++5S}+RJ*d4~UsngEvHrpJs*AH7xYvaS=5KT>keuME+^l4g@ixr}TO1RLn>SV>EhK7cFbx`W-Y9H0}DLm+}z!ikR zlZOr9ROE4JKvWM%4g^%7E<6>8+z@OYz*sTRBcv(?i>B@gXA&L;=SbTws<6+tbptNf zub#nfnI0|5OAuKiX9!fleRs72$Cfh?HSTd)u)m(9pgIl>{sD-*fe`(L+eC>SCA94!91y^>bQHTCdS-uFTl%1OVmM)`+_fFC!WCl?IJIXdGeSdqTLJA9 zRu#}x4d`E0`6MN(x$-7H=$Dk0O6JZhMx>pP%n*2+z+(`_S*mQ*LuH`~R#_ zf9DotzNO0sSS4GRq#H5{rqM+pJ1z_^^)Tguwr)TUjbxdKi8h?lf{=m-yyI6 zmnSpz@>xD{G!^XEKBZJS0nWGP=S{jDTVK6mEPzx3pE)yhDRGNl1a6%EDbiLu-mm>5 zX!|TwIW$a83OZ$9q+`Ah+DaG|*jajRls#=`KO8}m&rS%ZAMQ{AU4&&r9eX4yWc;A} zXF#ZyPaTU`;fmo1z*f%h(14@NOb(;KkWm_&9>HA|FiaRyfgZtA8eA66&uaT(aF%Kk z_`pXGO2y4{r&)U?kwW_Z2!GuoUvE}Q+{lAK>DNnRA^8cfLj#gS!hLogCVF2jt<12` z>yLziQGrOpK3R&Rw<>t}9L`z`3J=;-paRCo`EvIB#*2Nu>Cz5zlI$VkVUAzvBG7pM zUbxkp03E1yTm_D$zRO;x+t=6@ae*&*N?`|q0tdB>LInjC`tk5Q$q4p?!#=|DXkj*M zmkdUBK`Mh>S5`{g$c4bYnj3I*0{24`UHj@5Xa}RUm?IGi7f-Hsi2RWh47bne2bbL( zHxGs)YA;Z?%jqX87{L>7e7W*C70^Y?tpS#4>GCgFhuaiA6ZS#acTkD4eXFV2^z=cj zqu@sKBGBC0+|+8yZIPDNR#@U9sM47#)}3cr{C)pAb`R~*E&1>kXxfOaI?wF>#*3FP z&HJ}tZm%r@j~W|!=JxcN)``yxd~coyEc^;1fDyn5U<5D%7y*m`MgSv#5x@vw1TX>^ a0gM1f03(1AzzARjFaj6>jKH4_f&T$kqsMaq literal 0 HcmV?d00001 diff --git a/src/Templates/working/content/p_vomdiapplication/Standard Shell.prg b/src/Templates/working/content/p_vomdiapplication/Standard Shell.prg index 10bf07ad0a..deb76ee931 100644 --- a/src/Templates/working/content/p_vomdiapplication/Standard Shell.prg +++ b/src/Templates/working/content/p_vomdiapplication/Standard Shell.prg @@ -86,7 +86,7 @@ CONSTRUCTOR( oOwnerApp ) oPrinter := PrintingDevice{} - return self + return ACCESS Printer @@ -147,7 +147,7 @@ CONSTRUCTOR(oParentWindow, sFileName, lReadOnly, oServer) SELF:Caption := sCaption + sFileName ENDIF -RETURN SELF +RETURN method ViewForm() self:ToolBar:UnPressItem(IDM_StandardShellMenu_View_Table_ID) diff --git a/src/Templates/working/content/p_vomdiapplication/XSharp.VOMDIApplication.xsproj b/src/Templates/working/content/p_vomdiapplication/XSharp.VOMDIApplication.xsproj index eaf9621483..86a60cf515 100644 --- a/src/Templates/working/content/p_vomdiapplication/XSharp.VOMDIApplication.xsproj +++ b/src/Templates/working/content/p_vomdiapplication/XSharp.VOMDIApplication.xsproj @@ -27,11 +27,13 @@ true False False - net46 - - + net46 + TargetFrameworkOverride + Company.Namespace1 + + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_vomdiapplication/XSharp.ico b/src/Templates/working/content/p_vomdiapplication/XSharp.ico new file mode 100644 index 0000000000000000000000000000000000000000..dd1707e251c47b5348cb85b0abfbb1e40bfb30d9 GIT binary patch literal 9662 zcmeHNc~n)$88=DyrtL}Flb)vMw6-RSS|h8XN!%0Miq?&~MdNY9sENiUVKu?ss1c3E zeTxYKqT&`6ji`i8MdE@x2r3}&-FM%@;@zgdZ+Q3m-UT#CZTk;+KIY!}X1@8&x6L;f zn>2X}|9pL$Hld${mzp$r9<2|^7c?65RFkIojh`258_(a2u_lewsDnlyX!LAd2E|MM0Qiv)ST7 zD-E(*>3K#)Ma2tP`>98*Z@1fjXBUL2b!3n{t94#wWo6)hV-L{H^LCr9K(yHukXjEZ zHbE!_F5iamS65g6)nT{ac#Mo1$Qa#_j33$$-7g``SfAB6tLl);?quL=c2PW^n3(uX zed~ai4pN;CC#$NiVU;FwI$aEWl2eZPzo<{f5AB2BWRmRCic)3Vv02jiW3yzPCgM4x zC|h=jc3N8zt=948bp$~e0iFc^VK?*7%9|#SmNtfulszeHPm)Ay5V>qNKeLSgiP-8 z<(Oa}HKu(FPg1VtX38|b(&b{X_uusSPojnXMj^JiZVp~QCbvy`L-kMU#fbbsw4bDc zRM}~F5Pn+!eSKYE|B(6|4hPHJl>qE5wdkOiSaiEuiVA4PcDz4Dw%#w-YWHZ%z}%nc z^PfZuJkNphNWMj|sNpAO%YI2c8T8MI_A&6#1f{g%9=8GXcpLkD0shh)_)AHzWhKSx zim+Y^VTbNHMYn6t=5`NIujidn$hVLKsO|kEFq>rne;DFGBR@Y~n5A?`=|}!!?4fO9 zh_*F;pUYTU2mSSr`(mkiK>N z^t`lxH|1_oAs>&icMvx%2rtEq2BOxC|4}^iSo6Eh>Fkbms>mNM+`TM!+B1m9fo_Mk ziEpq^&u^9NHc@k7pX6^im$c-#2q`MCnSq_}A=pPt-?2${AfJ*v#Mp7G)!N!-u?%#% zTr&|bvxuCcIM|8vr>v~(599-Szsqi)>9E=QqwhI0&PTmtdF$L_Mlke{jeqac5~j@ zL;H9i#=C&=M`oOldbgwI!8|%|*@pbjWnlNRLHp!T?aIAt^0@n z)3JND6=kK2e2o)w>-BTF+`nkd-J91Ly+1z+ubJm`I-iFP1d@5*Qm*zn z@Rp+M-`#4{jz>LM8rs!M_k=(0wU^c6s|8-V_ry>7pYv)PoDa=8(9TL}aczDzWA=PsIV{w`cw*~113!)VxL;R;my?=Y%d^?O zf=(9c`PYoKp?Bn>Vf=hTjz4)TOYu+csrn%ndVSbY4hs*^hJ*)dW5e3WF+t6>NdIP9 z*6u_ZIi_CSJ6)Bm>Vd>*^OP|L#>1oQDF<0)mzK1esa-bGADUflR5TL!&v!%Ro;wS~NSub{)Uyylzc|Lz8F{oA9pqif@pqw7{`S97yiRc-AzxgmYm*N;69r}e3> z$Spi8hrZuIg6?avV-G_>!^Zf^=|@u}s^MsCeRO1PJe$`&kW+NW)+`FxiDD4TdOx+% z9a=r)z1BvX*DXLL+PnBee&!%Xw$_KUp+4Y`Av}m7mb*Jyp46|6G#Gwk=pTCtiF-v} zp0`1AijD^LfAWhhY+jEbPIEf>vMA&#qR3z$qo4S(onAJ0QP|7eZUNfdZh`8~*qJ*1 z{S9F?_d6_>me{X_@R!{#R6iNgQ;7_2p}skytxS3+I}Dr}q_#&qcSfyo@y=zvKCNSe z;wzWg@y%;NpP`<9heZ;0%C|k*@jmJ&+A@8j!CMsCl^xr(MoruNnM%2cpT~B4ycuT$ z@6SN@o2hODel2ZXyoCCaQNDbyyN^6{yuUgGG5q?%S7rZQy_ql0<(SMR3eM#^*lGW$ zLG@TdVfR zcYmC@quqBstspx?j&9$=>t2F2wKby#O2=-Ulme6cXy!en-^wuX=$NVHSfFd1aSSpI zx^ey-)u5b;3N9J_w6}Y=i!|ct^*WwoA7ukNcd^brT2FxPKSdo(cy-@#x7wAQOc~>} z3CCy2X8c1Bzs<3FVy9=+MeI_>Np|7n*TCrG&NDvj>+KuarPJx0^3uLC;x`ibPwz_5 zE}l+TE@x(_g2ke7U$WVnHna!eUq-m7wm+S)O^&7eIOOQ~={YfGrc8cCn9dgG%K?cG z>r>hbY{C*Rr`EB-+Ob1X-}rH&+^O4O4sxd6Pc7x8hrG5L`Z(ns`-?B-eB_-;|eLH#G326_guauIj1-17VvJuYZ*{9}7{5yrmeLwWzTkO8I+-nc(#tmh& zTK$nzMBt0HI)OfB`~Jn~Cw@eLn}_vgw|&S<|9n&J86b+2>cfwkGnL?;{t5>>JK*l-=^Ofncd%MBAoMFfgXfkLG$AsYF(J>*rAzg@appmfg9l-G!oKl;GH_$73#_fxxL_7sDcx+ISC><&jha!+(+J?EEI z6erR-OZC_JqX*^K4lTX%O%!}}Q}`&^iu*3f$6hbqb?X2%_7SO?-frrN9yW@Bkb~v1sxpNVX zqqTDJogubkYYk_twroHTo{M!J@-}#_IB(6EA)E)_$ur?L^bdJOG}lsIu3pXhM)IQU zZzT8&zU%XEA8;|pD`q*B7R#St!*Uwq#62OWBu~mII;Z9o=P@F^CUVOtf;{au&e?4< zCTUw|gloxjBWwNA9ZPg?--dqTr7oM#Xde70$Gooo4&HR^0iTdWh2qmp)K7dt6qo9A z%q_-D!59&~#J^LME$DkSC&UIY%V68!d!g7X)sfZs8;69ybx4&})s&N6HpCL<--M0~ zo~yEoc=${wMw!?2e20A^Fy;=%dif%~qrU_c;W@s(XMFD)3pv+-&+8sQ@1O#lkN={1 zH8nNOAuk1c`WAEn{&x=T3i>-Cbm<4$4?gE%pJ%bB1(;Xo8d5F2WuV31xG5U?bcl=l)9 z#n@@mY^VgghQz2~j2#;)i3L;;8v+{Nxw|lX_wK!S3!4}7W&8%dxpU8)8Gd_q=A1KU zjz0dK4|Y=hQ^0Q#{Op3CVEFl4CrkL^0gM1f03(1AzzARjFaj6>i~vReBY+XW2w(&-0vG{|07l@| zt5db-mQ=3TaIs*+#X@@7SXGp9X5*?eS+9OG8%$>p>?!$tVR`o2@3Ph~N_p0rvgMy& z`mx+>gJDJ;MnG2RXPfIS$Qz(rgn92;=Xm;T9pB+WC$^5qf_mx3YwJ3~yE z#-^CiM5jJ!B!`-z5Y3f3C?z%~aK>H!ZwM4!-pQksN{dHWWqX!ZA24b@w=P|nWA!F% z8C;77yo$E#dj5!UY>k=&CN>KK!*)z?Dd1E}-3xss1;dOQX#PNPio~8vFkmrJy7pZ; zHNYsInD`Gt;O4`cUYq1RN~wKr|3wwc4V>HFRbRyjx^W7ILIfslEYYL6smVZwnCy>5 zAo2T8d6ZH~k)KVD*ZpS?^iJ||{ex(M1;0Zh+QH(x?6rDXVS?8O0YT0H@M&-xls6Ddkg2hmnONcxIj~wFAqPbI~9vhepx-L>>%i#4p2yJvb}VV z?{8nd6lv3iXEycV^-!yM$K8J<^92!Y~5e!Ow2V*i@ujrZ>}21SoQ6y{zyvcJ0W7?g|U2agu#qF1Suy(=ocfUEN_{mNbnohAv4ZYAy9t=IVA!^{w4g3}D>06iG4>X4e6KFx zMEz{kVAfujE02YCe*=O*+K2_+!Yuz;xoaCMF>dTQ0wYQ$^C+e8%CBUydX%OoPof<7 zBQ%H@fyI$5;~X041Kj9pEz}nblCu6?zg##Awhvu0;~jhMU2UkRj+G~Ffk~_zo-m^P~`p)v6sX4rJ=jvr+=d>bZT(Y|j5;@qF z;+%RlKX2CM)73?X|bPp>&TFak_GM#^z|Hl znp8#Y&`3`(VM;l%q4eblmW3#Li-x+px~w4NIaw~C2Z}%}*;nKF{4lyqaEq}BY`F|d zsRx@q>*rcBGGLxhK$t9coMN7s-QNXDLWP43gINLqT5$^#eOp3$~5yKji>g8nGxVV?$2tZ6}U+tJuYBwqIpE$=m zC{!LaTQPn%IWfX}p^RW?9ZDCg)gJ~LJ`jVlV%PRKVGs0iLj{iYk8j<~AX7iCnl>(p zrku=`3qf%;-}M^SF>xb>Ks*&ws_~S%?iexZi(wOHNI@{vB_Ny(o8~oNEI^6}<h$tH<}TF-(J3S-t41} zDV1#T^C}oMX}UZpj6|{#7^WB-sYo0xPnW2~Lw)5WYfVSy08aQAVK;5dwC|P$?19HS zw3QR+6-!v&`vr%ucjOZ=v~S_166+i<@RYjjd_Op0V9-ozH=&on+2puLuk-;fpm-#U z?G_G^8_Jr4uC=w5vP?+=6|hVpKADxgJZ}T|yHZIJA_kAg?JJj9iE*RZ5%4XUDBAL# z?>8fZLnL&mK=tt-lT*XI7f6K>HgDBl*Lc(ooJro?m=(ePD<^*dW!02_ub4DO31$vS zq$t{pT#(}Jk~uwaTYpg#tNlKvk$ z-*|f4K!%8{@qS$l(F1k_qS)qAUwG%0%2o?uK(_SGGNXIlrJ4qx^&NmG)7`D(C zjfg8|M4+zvS|VW?9PR~1D_tH?9aN5q(`AD*h7K*AWbC*tEiFnnYr5Y%6^`|(3$vOJ z7wRbrR@o523Nu%AyS80gsE*0n*QS7Zf^+W|FR^KB?1!VDe(A_}Q(UZ5hl;`31!90i zLQ|O~4@w;9R`NbXq;I`as-L4a#r%PiDBHK=gxzCR1uF4wHtCdXXiBPrh<56YXb@!- zVF}v}of0}G$b@uCu!tjUyRe?fXio$`8HWIzumiSW2!MM$I?!Y695Rq$r-YG{X2`ws z{lUl;7Y!HW8XZag=)wKtC0i?bN4i-KwAV?pD*N ze^-{4oZ9!T(%UsrCPb7_PZ=mVUw)`k#SJKd`K`+rjr+4PwLS#kpfk>?XR6vOP7({m zf*GOS<384yu^=ZCrc1#g=C)&`IwA{>c6) zySM2U1mK@86(svf$3{|$2P_(sLL`H-{NVtOeqsx;VGumlk!e&N`+?y$k8|v~Z}l=( zo>{SBT5fZah!a^pZ+gy3j2q2@0DSxCp%HDXhf48?nCJx#ji8TY8@-0OrA#VjcU+NHS3i^L zpCsTo=K5*ATX?K|aHAmzz|BNRxTLk4FnkE0oyr75R{FYbV~dCU2`vy<4i>9sks(EJ#Q*c&-K@m8v4aSFI?NMJ%`|8;1cS<< zVYP1Z_;2qYX`{B!!C! zbdf-HSUO-~`S$uj6Xx^ZpphwJTjcPBDJk8pU%Yss%c}L|3%FCMl8rVO2LztwB}M8| z;+BpekTK;0x;;q$GOFva?=SN8q7M;vC<*RDB6(m`Kq-ajAUeH)^$js$ajrH=q)1(q zaw5{P*R!WjS-VG2o^t{b$Gh9Em}YuVBI^);@y65pN~84U(1^5q`?j|Kx#dNRU5+=` zg#{25$c(-4ID14N0{rLwWz^ZLhbUE5(mWlN5Wk^1M}wm@bxD#55@APEz~P#vP>-HY z334GKqbgv=N`>j3j))s{SvuMj5k)ini&v8Pb7(+PP{*DHb7OT;T5)=VU0y$))Goa@ zk@uhSWrg}CYzm}32jx>;!0(+PS8WhfAcv+XWkPs`$WTQU@1Y@sF3BKQ+LV#jZ=E@0 zy30lPum0<_bLv<_&PA8;rX6C%IZLo8Zrn)wr@*V6>vOf>99{4Rg(^#=e*?r1T;=K# zX>XC<_Qh|rJ|Hk7-qi{bXjNSLGU7epF;dW-M$;v<+duYwvw~{^xSbV&eVJcF3JdBS zQ~QgC9@P$w=S|O8yQ9WikMHv5&j(NG;uD++5S}+RJ*d4~UsngEvHrpJs*AH7xYvaS=5KT>keuME+^l4g@ixr}TO1RLn>SV>EhK7cFbx`W-Y9H0}DLm+}z!ikR zlZOr9ROE4JKvWM%4g^%7E<6>8+z@OYz*sTRBcv(?i>B@gXA&L;=SbTws<6+tbptNf zub#nfnI0|5OAuKiX9!fleRs72$Cfh?HSTd)u)m(9pgIl>{sD-*fe`(L+eC>SCA94!91y^>bQHTCdS-uFTl%1OVmM)`+_fFC!WCl?IJIXdGeSdqTLJA9 zRu#}x4d`E0`6MN(x$-7H=$Dk0O6JZhMx>pP%n*2+z+(`_S*mQ*LuH`~R#_ zf9DotzNO0sSS4GRq#H5{rqM+pJ1z_^^)Tguwr)TUjbxdKi8h?lf{=m-yyI6 zmnSpz@>xD{G!^XEKBZJS0nWGP=S{jDTVK6mEPzx3pE)yhDRGNl1a6%EDbiLu-mm>5 zX!|TwIW$a83OZ$9q+`Ah+DaG|*jajRls#=`KO8}m&rS%ZAMQ{AU4&&r9eX4yWc;A} zXF#ZyPaTU`;fmo1z*f%h(14@NOb(;KkWm_&9>HA|FiaRyfgZtA8eA66&uaT(aF%Kk z_`pXGO2y4{r&)U?kwW_Z2!GuoUvE}Q+{lAK>DNnRA^8cfLj#gS!hLogCVF2jt<12` z>yLziQGrOpK3R&Rw<>t}9L`z`3J=;-paRCo`EvIB#*2Nu>Cz5zlI$VkVUAzvBG7pM zUbxkp03E1yTm_D$zRO;x+t=6@ae*&*N?`|q0tdB>LInjC`tk5Q$q4p?!#=|DXkj*M zmkdUBK`Mh>S5`{g$c4bYnj3I*0{24`UHj@5Xa}RUm?IGi7f-Hsi2RWh47bne2bbL( zHxGs)YA;Z?%jqX87{L>7e7W*C70^Y?tpS#4>GCgFhuaiA6ZS#acTkD4eXFV2^z=cj zqu@sKBGBC0+|+8yZIPDNR#@U9sM47#)}3cr{C)pAb`R~*E&1>kXxfOaI?wF>#*3FP z&HJ}tZm%r@j~W|!=JxcN)``yxd~coyEc^;1fDyn5U<5D%7y*m`MgSv#5x@vw1TX>^ a0gM1f03(1AzzARjFaj6>jKH4_f&T$kqsMaq literal 0 HcmV?d00001 diff --git a/src/Templates/working/content/p_vosdiapplication/Standard SDI.prg b/src/Templates/working/content/p_vosdiapplication/Standard SDI.prg index e9912c77b6..5c7c11cdbc 100644 --- a/src/Templates/working/content/p_vosdiapplication/Standard SDI.prg +++ b/src/Templates/working/content/p_vosdiapplication/Standard SDI.prg @@ -8,15 +8,15 @@ class StandardSDIWindow inherit DataWindow protect oStdMenu as Menu -METHOD DoOpenFile(cFileName, lReadOnly) +METHOD DoOpenFile(cFileName, lReadOnly) LOCAL oTB AS TextBox IF (Len(cFileName) > 3) .AND. (Upper(Right(cFileName, 4)) == ".DBF") IF (SELF:Menu != oStdMenu) SELF:Menu := oStdMenu SELF:ToolBar:PressItem(IDM_StandardSDIMenu_View_Form_ID, #MenuItemID) - ENDIF - + ENDIF + SELF:Use(DBServer{cFileName, , lReadOnly}) SELF:Caption := "Browse Database: " + cFileName ELSE @@ -27,28 +27,28 @@ METHOD DoOpenFile(cFileName, lReadOnly) ENDIF RETURN SELF -METHOD Drop(oDragEvent) +METHOD Drop(oDragEvent) IF File(oDragEvent:FileName(1)) SELF:DoOpenFile(oDragEvent:FileName(1)) ENDIF RETURN SELF -METHOD FileClose() +METHOD FileClose() SELF:Use() -RETURN SELF +RETURN SELF -METHOD FileExit() +METHOD FileExit() SELF:EndWindow() -RETURN SELF +RETURN SELF -METHOD FileOpen() +METHOD FileOpen() LOCAL oOD AS OpenDialog LOCAL oTB AS TextBox LOCAL retval AS SHORT - IF(oAttachedServer == NULL_OBJECT) + IF(oAttachedServer == NULL_OBJECT) (oOD := OpenDialog{SELF, "*.dbf"}):Show() - + IF !Empty(oOD:FileName) SELF:DoOpenFile(oOD:FileName, oOD:ReadOnly) ENDIF @@ -68,24 +68,24 @@ METHOD FileOpen() ENDIF RETURN SELF -METHOD FilePrint() +METHOD FilePrint() SELF:Print(oPrinter) -RETURN SELF +RETURN SELF -METHOD FilePrinterSetup() +METHOD FilePrinterSetup() oPrinter:Setup() - + RETURN SELF -CONSTRUCTOR(oOwnerApp) +CONSTRUCTOR(oOwnerApp) SetDeleted(TRUE) SUPER(oOwnerApp) - + SELF:EnableDragDropClient() - + SELF:Icon := Icon{ResourceID{IDI_STANDARDICON, _GetInst()}} SELF:Menu := EmptySDIMenu{SELF} oStdMenu := StandardSDIMenu{SELF} @@ -97,22 +97,22 @@ CONSTRUCTOR(oOwnerApp) SELF:Size := Dimension{850,650} oPrinter := PrintingDevice{} - - RETURN SELF + + RETURN -method ViewForm() +method ViewForm() self:ToolBar:UnPressItem(IDM_StandardSDIMenu_View_Table_ID) self:ToolBar:PressItem(IDM_StandardSDIMenu_View_Form_ID) - - return super:ViewForm() -method ViewTable() + return super:ViewForm() + +method ViewTable() self:ToolBar:UnPressItem(IDM_StandardSDIMenu_View_Form_ID) self:ToolBar:PressItem(IDM_StandardSDIMenu_View_Table_ID) - + return super:ViewTable() - + END CLASS diff --git a/src/Templates/working/content/p_vosdiapplication/XSharp.VOSDIApplication.xsproj b/src/Templates/working/content/p_vosdiapplication/XSharp.VOSDIApplication.xsproj index f1a31b807a..a021554004 100644 --- a/src/Templates/working/content/p_vosdiapplication/XSharp.VOSDIApplication.xsproj +++ b/src/Templates/working/content/p_vosdiapplication/XSharp.VOSDIApplication.xsproj @@ -27,11 +27,13 @@ true False False - net8.0 + net46 + TargetFrameworkOverride + Company.Namespace1 - + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_vosdiapplication/XSharp.ico b/src/Templates/working/content/p_vosdiapplication/XSharp.ico new file mode 100644 index 0000000000000000000000000000000000000000..dd1707e251c47b5348cb85b0abfbb1e40bfb30d9 GIT binary patch literal 9662 zcmeHNc~n)$88=DyrtL}Flb)vMw6-RSS|h8XN!%0Miq?&~MdNY9sENiUVKu?ss1c3E zeTxYKqT&`6ji`i8MdE@x2r3}&-FM%@;@zgdZ+Q3m-UT#CZTk;+KIY!}X1@8&x6L;f zn>2X}|9pL$Hld${mzp$r9<2|^7c?65RFkIojh`258_(a2u_lewsDnlyX!LAd2E|MM0Qiv)ST7 zD-E(*>3K#)Ma2tP`>98*Z@1fjXBUL2b!3n{t94#wWo6)hV-L{H^LCr9K(yHukXjEZ zHbE!_F5iamS65g6)nT{ac#Mo1$Qa#_j33$$-7g``SfAB6tLl);?quL=c2PW^n3(uX zed~ai4pN;CC#$NiVU;FwI$aEWl2eZPzo<{f5AB2BWRmRCic)3Vv02jiW3yzPCgM4x zC|h=jc3N8zt=948bp$~e0iFc^VK?*7%9|#SmNtfulszeHPm)Ay5V>qNKeLSgiP-8 z<(Oa}HKu(FPg1VtX38|b(&b{X_uusSPojnXMj^JiZVp~QCbvy`L-kMU#fbbsw4bDc zRM}~F5Pn+!eSKYE|B(6|4hPHJl>qE5wdkOiSaiEuiVA4PcDz4Dw%#w-YWHZ%z}%nc z^PfZuJkNphNWMj|sNpAO%YI2c8T8MI_A&6#1f{g%9=8GXcpLkD0shh)_)AHzWhKSx zim+Y^VTbNHMYn6t=5`NIujidn$hVLKsO|kEFq>rne;DFGBR@Y~n5A?`=|}!!?4fO9 zh_*F;pUYTU2mSSr`(mkiK>N z^t`lxH|1_oAs>&icMvx%2rtEq2BOxC|4}^iSo6Eh>Fkbms>mNM+`TM!+B1m9fo_Mk ziEpq^&u^9NHc@k7pX6^im$c-#2q`MCnSq_}A=pPt-?2${AfJ*v#Mp7G)!N!-u?%#% zTr&|bvxuCcIM|8vr>v~(599-Szsqi)>9E=QqwhI0&PTmtdF$L_Mlke{jeqac5~j@ zL;H9i#=C&=M`oOldbgwI!8|%|*@pbjWnlNRLHp!T?aIAt^0@n z)3JND6=kK2e2o)w>-BTF+`nkd-J91Ly+1z+ubJm`I-iFP1d@5*Qm*zn z@Rp+M-`#4{jz>LM8rs!M_k=(0wU^c6s|8-V_ry>7pYv)PoDa=8(9TL}aczDzWA=PsIV{w`cw*~113!)VxL;R;my?=Y%d^?O zf=(9c`PYoKp?Bn>Vf=hTjz4)TOYu+csrn%ndVSbY4hs*^hJ*)dW5e3WF+t6>NdIP9 z*6u_ZIi_CSJ6)Bm>Vd>*^OP|L#>1oQDF<0)mzK1esa-bGADUflR5TL!&v!%Ro;wS~NSub{)Uyylzc|Lz8F{oA9pqif@pqw7{`S97yiRc-AzxgmYm*N;69r}e3> z$Spi8hrZuIg6?avV-G_>!^Zf^=|@u}s^MsCeRO1PJe$`&kW+NW)+`FxiDD4TdOx+% z9a=r)z1BvX*DXLL+PnBee&!%Xw$_KUp+4Y`Av}m7mb*Jyp46|6G#Gwk=pTCtiF-v} zp0`1AijD^LfAWhhY+jEbPIEf>vMA&#qR3z$qo4S(onAJ0QP|7eZUNfdZh`8~*qJ*1 z{S9F?_d6_>me{X_@R!{#R6iNgQ;7_2p}skytxS3+I}Dr}q_#&qcSfyo@y=zvKCNSe z;wzWg@y%;NpP`<9heZ;0%C|k*@jmJ&+A@8j!CMsCl^xr(MoruNnM%2cpT~B4ycuT$ z@6SN@o2hODel2ZXyoCCaQNDbyyN^6{yuUgGG5q?%S7rZQy_ql0<(SMR3eM#^*lGW$ zLG@TdVfR zcYmC@quqBstspx?j&9$=>t2F2wKby#O2=-Ulme6cXy!en-^wuX=$NVHSfFd1aSSpI zx^ey-)u5b;3N9J_w6}Y=i!|ct^*WwoA7ukNcd^brT2FxPKSdo(cy-@#x7wAQOc~>} z3CCy2X8c1Bzs<3FVy9=+MeI_>Np|7n*TCrG&NDvj>+KuarPJx0^3uLC;x`ibPwz_5 zE}l+TE@x(_g2ke7U$WVnHna!eUq-m7wm+S)O^&7eIOOQ~={YfGrc8cCn9dgG%K?cG z>r>hbY{C*Rr`EB-+Ob1X-}rH&+^O4O4sxd6Pc7x8hrG5L`Z(ns`-?B-eB_-;|eLH#G326_guauIj1-17VvJuYZ*{9}7{5yrmeLwWzTkO8I+-nc(#tmh& zTK$nzMBt0HI)OfB`~Jn~Cw@eLn}_vgw|&S<|9n&J86b+2>cfwkGnL?;{t5>>JK*l-=^Ofncd%MBAoMFfgXfkLG$AsYF(J>*rAzg@appmfg9l-G!oKl;GH_$73#_fxxL_7sDcx+ISC><&jha!+(+J?EEI z6erR-OZC_JqX*^K4lTX%O%!}}Q}`&^iu*3f$6hbqb?X2%_7SO?-frrN9yW@Bkb~v1sxpNVX zqqTDJogubkYYk_twroHTo{M!J@-}#_IB(6EA)E)_$ur?L^bdJOG}lsIu3pXhM)IQU zZzT8&zU%XEA8;|pD`q*B7R#St!*Uwq#62OWBu~mII;Z9o=P@F^CUVOtf;{au&e?4< zCTUw|gloxjBWwNA9ZPg?--dqTr7oM#Xde70$Gooo4&HR^0iTdWh2qmp)K7dt6qo9A z%q_-D!59&~#J^LME$DkSC&UIY%V68!d!g7X)sfZs8;69ybx4&})s&N6HpCL<--M0~ zo~yEoc=${wMw!?2e20A^Fy;=%dif%~qrU_c;W@s(XMFD)3pv+-&+8sQ@1O#lkN={1 zH8nNOAuk1c`WAEn{&x=T3i>-Cbm<4$4?gE%pJ%bB1(;Xo8true True False - net8.0 + net8.0 + TargetFrameworkOverride + Company.Namespace1 - + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_webmap/XSharp.WebMap.xsproj b/src/Templates/working/content/p_webmap/XSharp.WebMap.xsproj index 1b28a01c81..c71130cb70 100644 --- a/src/Templates/working/content/p_webmap/XSharp.WebMap.xsproj +++ b/src/Templates/working/content/p_webmap/XSharp.WebMap.xsproj @@ -1,9 +1,11 @@ - net8.0 + net46 + TargetFrameworkOverride enable enable + Company.Namespace1 diff --git a/src/Templates/working/content/p_webroute/XSharp.WebRoute.xsproj b/src/Templates/working/content/p_webroute/XSharp.WebRoute.xsproj index a2e0737710..f7e21136a0 100644 --- a/src/Templates/working/content/p_webroute/XSharp.WebRoute.xsproj +++ b/src/Templates/working/content/p_webroute/XSharp.WebRoute.xsproj @@ -2,9 +2,11 @@ - net8.0 + net46 + TargetFrameworkOverride enable enable + Company.Namespace1 diff --git a/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json b/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json index cdba3d5201..6183b035a5 100644 --- a/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json +++ b/src/Templates/working/content/p_windowsformsapplication/.template.config/template.json @@ -7,7 +7,7 @@ ], "Identity": "XSharp.WindowsFormsApplication.SDK", "Name": "Windows Forms Application (SDK)", - "Description": "A SDK Style project for creating an application with a Windows Forms user interface.", + "description": "A SDK Style project for creating an application with a Windows Forms user interface.", "SourceName": "XSharp.WindowsFormsApplication", "ShortName": "xswindowsformsapplication", "Tags": { @@ -16,35 +16,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "WindowsFormsApplication", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "WindowsFormsApplication", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_windowsformsapplication/XSharp.WindowsFormsApplication.xsproj b/src/Templates/working/content/p_windowsformsapplication/XSharp.WindowsFormsApplication.xsproj index 31e4323f4e..283abb6217 100644 --- a/src/Templates/working/content/p_windowsformsapplication/XSharp.WindowsFormsApplication.xsproj +++ b/src/Templates/working/content/p_windowsformsapplication/XSharp.WindowsFormsApplication.xsproj @@ -6,6 +6,8 @@ Core True True - net8.0 + net46 + TargetFrameworkOverride + Company.Namespace1 \ No newline at end of file diff --git a/src/Templates/working/content/p_wpfapplication/.template.config/template.json b/src/Templates/working/content/p_wpfapplication/.template.config/template.json index 784d76d9db..8d99019940 100644 --- a/src/Templates/working/content/p_wpfapplication/.template.config/template.json +++ b/src/Templates/working/content/p_wpfapplication/.template.config/template.json @@ -7,7 +7,7 @@ ], "Identity": "XSharp.WPFApplication.SDK", "Name": "WPF Application (SDK)", - "Description": "SDK Style Windows Presentation Foundation client application.", + "description": "SDK Style Windows Presentation Foundation client application.", "SourceName": "XSharp.WPFApplication", "ShortName": "xswpfapplication", "Tags": { @@ -16,35 +16,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "WpfApplication", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "WpfApplication", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_wpfapplication/XSharp.WPFApplication.xsproj b/src/Templates/working/content/p_wpfapplication/XSharp.WPFApplication.xsproj index 0c96a357ac..2f584092c6 100644 --- a/src/Templates/working/content/p_wpfapplication/XSharp.WPFApplication.xsproj +++ b/src/Templates/working/content/p_wpfapplication/XSharp.WPFApplication.xsproj @@ -9,6 +9,8 @@ Core True True - net8.0 + net46 + TargetFrameworkOverride + Company.Namespace1 \ No newline at end of file diff --git a/src/Templates/working/content/p_xppconsole/.template.config/template.json b/src/Templates/working/content/p_xppconsole/.template.config/template.json index cf78a14fb8..64b7134f3c 100644 --- a/src/Templates/working/content/p_xppconsole/.template.config/template.json +++ b/src/Templates/working/content/p_xppconsole/.template.config/template.json @@ -8,7 +8,7 @@ ], "Identity": "XSharp.XPPConsole.SDK", "Name": "Xbase\u002B\u002B Console Application (SDK)", - "Description": "A SDK Style project for creating a X# command-line application in the Xbase\u002B\u002B Dialect.", + "description": "A SDK Style project for creating a X# command-line application in the Xbase\u002B\u002B Dialect.", "SourceName": "XSharp.XPPConsole", "ShortName": "xsxppconsole", "Tags": { @@ -17,35 +17,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "ConsoleApplication", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "ConsoleApplication", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_xppconsole/XSharp.XPPConsole.xsproj b/src/Templates/working/content/p_xppconsole/XSharp.XPPConsole.xsproj index 45fdb5c4ea..9e0caf5777 100644 --- a/src/Templates/working/content/p_xppconsole/XSharp.XPPConsole.xsproj +++ b/src/Templates/working/content/p_xppconsole/XSharp.XPPConsole.xsproj @@ -23,11 +23,13 @@ true true False - net8.0 - - + net46 + TargetFrameworkOverride + Company.Namespace1 + + - + \ No newline at end of file diff --git a/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json b/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json index d5b90f30bc..d9b99d26c9 100644 --- a/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json +++ b/src/Templates/working/content/p_xunitclasslibrary/.template.config/template.json @@ -7,7 +7,7 @@ ], "Identity": "XSharp.Test.XUnitClassLibrary.SDK", "Name": "Class Library with XUnit Testing (SDK)", - "Description": "A SDK Style project for creating a X# class library (.dll) with XUnit Testing", + "description": "A SDK Style project for creating a X# class library (.dll) with XUnit Testing", "SourceName": "XSharp.Test.XUnitClassLibrary", "ShortName": "xsxunitclasslibrary", "Tags": { @@ -16,35 +16,43 @@ "icon": "template.png", "is-icon-path": "true" }, - "PreferNameDirectory": true, - "DefaultName": "XUnitTestClassLibrary", - "Symbols": { - "TargetNetFramework": { - "Type": "parameter", - "Description": "Target .NET version", - "Datatype": "choice", - "Choices": [ + "preferNameDirectory": true, + "defaultName": "XUnitTestClassLibrary", + "symbols": { + "TargetFrameworkOverride": { + "type": "parameter", + "description": "Overrides the target framework", + "replaces": "TargetFrameworkOverride", + "datatype": "string", + "defaultvalue": "", + "displayName": "Target framework override" + }, + "Framework": { + "type": "parameter", + "description": "Target .NET version", + "datatype": "choice", + "choices": [ { - "Choice": "net8.0", - "Description": "Target .NET 8" + "choice": "net8.0", + "description": "Target .NET 8" }, { - "Choice": "net9.0", - "Description": "Target .NET 9" + "choice": "net9.0", + "description": "Target .NET 9" }, { - "Choice": "net10.0", - "Description": "Target .NET 10" + "choice": "net10.0", + "description": "Target .NET 10" } ], - "Replaces": "net8.0", - "DefaultValue": "net8.0" + "replaces": "net8.0", + "defaultvalue": "net8.0" }, "DefaultNamespace": { - "Type": "parameter", - "Datatype": "string", - "Replaces": "Company.Namespace1", - "DefaultValue": "Company.Namespace1" + "type": "parameter", + "datatype": "string", + "replaces": "Company.Namespace1", + "defaultvalue": "Company.Namespace1" } } } diff --git a/src/Templates/working/content/p_xunitclasslibrary/XSharp.Test.XUnitClassLibrary.xsproj b/src/Templates/working/content/p_xunitclasslibrary/XSharp.Test.XUnitClassLibrary.xsproj index 5155f066c9..0fc5fddf7f 100644 --- a/src/Templates/working/content/p_xunitclasslibrary/XSharp.Test.XUnitClassLibrary.xsproj +++ b/src/Templates/working/content/p_xunitclasslibrary/XSharp.Test.XUnitClassLibrary.xsproj @@ -6,6 +6,8 @@ Core True True - net8.0 + net46 + TargetFrameworkOverride + Company.Namespace1 \ No newline at end of file From e3a54c5cf7e8c33979370e89294b83f39ae3ab27 Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 18:18:44 +0100 Subject: [PATCH 13/17] [docs] Spanish shanges --- docs/Help/Topics/VersionHistory.xml | 8 +++---- .../Topics/Bring-Your-Own-Runtime-BYOR.xml | 3 ++- .../Topics/Known-Issues-in-XSharp-3.xml | 6 ++--- docs/Help_Spanish/Topics/The-X-Runtime.xml | 22 +++++++++---------- docs/Help_Spanish/Topics/dialect_Vulcan.xml | 11 +++++++++- docs/serial10.txt | 2 ++ 6 files changed, 31 insertions(+), 21 deletions(-) create mode 100644 docs/serial10.txt diff --git a/docs/Help/Topics/VersionHistory.xml b/docs/Help/Topics/VersionHistory.xml index 69f3210c29..0f3110c4c0 100644 --- a/docs/Help/Topics/VersionHistory.xml +++ b/docs/Help/Topics/VersionHistory.xml @@ -1,6 +1,6 @@  - + Version History Changes @@ -19,13 +19,13 @@ Breaking changes Compiler -
  • The compiler no longer supports "Bring Your Own Runtime". If you want to compile in the VO or Vulcan dialect you will HAVE to include references to XSharp.Core and XShar\p.RT.
    That does not mean that you can't link your program against the Vulcan runtime DLLs, but we no longer map our Xbase types to the types in these DLLs. So USUAL will not be mapped to Vulcan.__Usual. You can still use the types, functions and classes on these DLLs, but they will no longer be treated specially. If you want to call a function from the Vulcan Runtime yuou will have to use the syntax for static methods
  • +
  • The compiler no longer supports "Bring Your Own Runtime". If you want to compile in the VO or Vulcan dialect you will HAVE to include references to XSharp.Core and XSharp.RT.
    That does not mean that you can't link your program against the Vulcan runtime DLLs, but we no longer map our Xbase types to the types in these DLLs. So USUAL will not be mapped to Vulcan.__Usual. You can still use the types, functions and classes on these DLLs, but they will no longer be treated specially. If you want to call a function from the Vulcan Runtime yuou will have to use the syntax for static methods
  • Runtime -
  • The signature for several functions and methods in the X# Runtime has been changed. We have used the new IN keyword for many that use parameters defined AS USUAL. The new IN USUAL tells the compiler to pass the variable by reference, which should make the code slightly faster. It also tells the compiler that the parameter will not be changed by the code in the function / method
  • +
  • The signature for several functions and methods in the XSharp Runtime has been changed. We have used the new IN keyword for many that use parameters defined AS USUAL. The new IN USUAL tells the compiler to pass the variable by reference, which should make the code slightly faster. It also tells the compiler that the parameter will not be changed by the code in the function / method
  • We have also moved several functions and types between Runtime DLLs, because they were not in the best possible location.
  • -
  • X# 3 comes with runtime DLLs for both .net 46 and .net 8. Not all VOSDK Dlls have been ported to .Net 8 because they contain code that does not work in a AnyCPU environment.
  • +
  • X# 3 comes with runtime DLLs for both .net 46 and .net 8. Not all VOSDK Dlls have been ported to .Net 8 because they contain code that does not work in an AnyCPU environment.
  • Compiler
    New Features
    diff --git a/docs/Help_Spanish/Topics/Bring-Your-Own-Runtime-BYOR.xml b/docs/Help_Spanish/Topics/Bring-Your-Own-Runtime-BYOR.xml index 64d1cd3779..60ab8b2cd1 100644 --- a/docs/Help_Spanish/Topics/Bring-Your-Own-Runtime-BYOR.xml +++ b/docs/Help_Spanish/Topics/Bring-Your-Own-Runtime-BYOR.xml @@ -1,11 +1,12 @@  - + Bring Your Own Runtime (BYOR)
    Bring Your Own Runtime (BYOR)
    XSharp 3 no longer suppport "Bring Your Own Runtime". To compile in a dialect other than Core you need to include a reference to the X# Runtime. + You can still include references to the Vulcan Runtime DLLs in your project but the types and functions in these assemblies are treated like any other .Net assembly.
    diff --git a/docs/Help_Spanish/Topics/Known-Issues-in-XSharp-3.xml b/docs/Help_Spanish/Topics/Known-Issues-in-XSharp-3.xml index 9aeeb0e72b..2e29241439 100644 --- a/docs/Help_Spanish/Topics/Known-Issues-in-XSharp-3.xml +++ b/docs/Help_Spanish/Topics/Known-Issues-in-XSharp-3.xml @@ -1,6 +1,6 @@  - + Known Issues in XSharp 3
    @@ -8,9 +8,7 @@
    Known issues -
  • Adding a new item to a SDK style project may generate errors during compilation, when the item will be automatically included by a build script rule
  • -
  • Excluding an item from a SDK style project does not work. You will have to manually add an item to the project file to exclude it in the form of:
    <Compile Remove="YourFileName.prg" />
  • -
  • Renaming an item in a SDK project also sometimes fails.
  • +
  • Renaming an item in a SDK project also sometimes fails.
  • There is no dialog yet in Visual Studio to declare GLOBAL USINGs at the project file level
  • Projects that are Multi-Targeting (that have a TargetFrameworks property are supported, but only one Framework is built when opened inside Visual Studio. The project system renames the node to XTargetFrameworks, and adds a TargetFramework property with the active framework. When saving this is reversed and the last selected active target framework is stored in the project file as ActiveTargetFramework, so it can be restored the next time that the project is opened.
  • We have occasionally seen that switching a single targeting project from one version to another may cause Visual Studio to hang.
  • diff --git a/docs/Help_Spanish/Topics/The-X-Runtime.xml b/docs/Help_Spanish/Topics/The-X-Runtime.xml index 7efcf94fd6..08c1a284a4 100644 --- a/docs/Help_Spanish/Topics/The-X-Runtime.xml +++ b/docs/Help_Spanish/Topics/The-X-Runtime.xml @@ -1,6 +1,6 @@  - + The X# Runtime
    @@ -52,7 +52,7 @@ X# Core
    - 4.6 + 4.6 / 8.0
    - 4.6 + 4.6 / 8.0
    - 4.6 + 4.6 / 8.0
    - 4.6 + 4.6 / 8.0
    - 4.6 + 4.6 / 8.0
    - 4.6 + 4.6 / 8.0
    - 4.6 + 4.6 / 8.0
    - 4.6 + 4.6 / 8.0
    - 4.6 + 4.6 / 8.0
    - 4.6 + 4.6 / 8.0
    + + + +
    + Please note that in XSharp 3 the Vulcan dialect is only supported with the XSharp Runtime DLLs.
    Support for "Bring Your Own Runtime" is no longer available
    Also the compiler no longer automatically reads the setting for the location for the Vulcan Include files from the registry.
    If you use these files you need to make sure that the location where the files are stored is included in your project settings.
    +
    + The compiler and runtime have the following "special" behavior when compiling for the "Vulcan" dialect: Compiler diff --git a/docs/serial10.txt b/docs/serial10.txt new file mode 100644 index 0000000000..48fdd13aea --- /dev/null +++ b/docs/serial10.txt @@ -0,0 +1,2 @@ +Your Help+Manual Professional maintenance codes(s): +BPFFOT-Y4FZQA-HMPP \ No newline at end of file From 9f462d21f7e01723269243fda5df06ab240eb7b3 Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 18:19:20 +0100 Subject: [PATCH 14/17] [Runtime] Small changes --- .../MacroCompiler.Example.Next.xsproj | 1 + .../SQL_Classes_SDK/XSharp.VO.SQLClasses.Next.xsproj | 1 + src/Runtime/XSharp.VFP/XSharp.VFP.Next.xsproj | 10 ---------- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Runtime/MacroCompiler.Example/MacroCompiler.Example.Next.xsproj b/src/Runtime/MacroCompiler.Example/MacroCompiler.Example.Next.xsproj index 357e18b54e..370749971b 100644 --- a/src/Runtime/MacroCompiler.Example/MacroCompiler.Example.Next.xsproj +++ b/src/Runtime/MacroCompiler.Example/MacroCompiler.Example.Next.xsproj @@ -16,6 +16,7 @@ true False net8.0 + {c3bc651e-9d08-43e1-bbb2-90bf5232a4df} diff --git a/src/Runtime/VOSdkTyped/Source/VOSdk/SQL_Classes_SDK/XSharp.VO.SQLClasses.Next.xsproj b/src/Runtime/VOSdkTyped/Source/VOSdk/SQL_Classes_SDK/XSharp.VO.SQLClasses.Next.xsproj index 546c130c4b..9ac8c1295b 100644 --- a/src/Runtime/VOSdkTyped/Source/VOSdk/SQL_Classes_SDK/XSharp.VO.SQLClasses.Next.xsproj +++ b/src/Runtime/VOSdkTyped/Source/VOSdk/SQL_Classes_SDK/XSharp.VO.SQLClasses.Next.xsproj @@ -37,6 +37,7 @@ XSharp.Data True + {9cea0df2-04fb-499e-9976-5c9cf7c0e689} XSharp.VOSystemClasses diff --git a/src/Runtime/XSharp.VFP/XSharp.VFP.Next.xsproj b/src/Runtime/XSharp.VFP/XSharp.VFP.Next.xsproj index 8de764ad0f..1a1afb3055 100644 --- a/src/Runtime/XSharp.VFP/XSharp.VFP.Next.xsproj +++ b/src/Runtime/XSharp.VFP/XSharp.VFP.Next.xsproj @@ -26,16 +26,6 @@ 10.0.2 - - - AssertDialog.prg - - - - - AssertDialog.prg - - From 4dab22782cc47236d94e9af48e60ad8b884a5fea Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 18:19:38 +0100 Subject: [PATCH 15/17] Solution Changes --- src/Runtime.Next.sln | 104 ------------------------------------ src/RuntimeNet8.slnx | 4 +- src/Tools.sln | 24 +++++++++ src/VSIntegration2022.sln | 107 ++++++++++++++++---------------------- 4 files changed, 72 insertions(+), 167 deletions(-) delete mode 100644 src/Runtime.Next.sln diff --git a/src/Runtime.Next.sln b/src/Runtime.Next.sln deleted file mode 100644 index 1d396b3052..0000000000 --- a/src/Runtime.Next.sln +++ /dev/null @@ -1,104 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.4.33213.308 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{1C0880F5-74CF-4618-9856-D89B3FCB6DA3}" - ProjectSection(SolutionItems) = preProject - Docs\Console.Xml = Docs\Console.Xml - Docs\CoreComments.Xml = Docs\CoreComments.Xml - Docs\gui.xml = Docs\gui.xml - Docs\Internet.xml = Docs\Internet.xml - Docs\rdd.xml = Docs\rdd.xml - Docs\Report.Xml = Docs\Report.Xml - Docs\RTComments.Xml = Docs\RTComments.Xml - Runtime\Runtime.Targets = Runtime\Runtime.Targets - Runtime\RuntimeFunctionsAndClasses.xlsx = Runtime\RuntimeFunctionsAndClasses.xlsx - Runtime\Docs\RuntimeSpecsV1.docx = Runtime\Docs\RuntimeSpecsV1.docx - Runtime\Docs\RuntimeSpecsV2.docx = Runtime\Docs\RuntimeSpecsV2.docx - Docs\Sql.Xml = Docs\Sql.Xml - Docs\System.Xml = Docs\System.Xml - Docs\VFPDocs.xml = Docs\VFPDocs.xml - Docs\VfpRuntimeDocs.xml = Docs\VfpRuntimeDocs.xml - Docs\VoFunctionDocs.xml = Docs\VoFunctionDocs.xml - Docs\VOSDK.Xml = Docs\VOSDK.Xml - Docs\XsRuntimeClasses.xml = Docs\XsRuntimeClasses.xml - EndProjectSection -EndProject -Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "XSharp.Core.Next", "Runtime\XSharp.Core\XSharp.Core.Next.xsproj", "{AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}" -EndProject -Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "XSharp.RT.Next", "Runtime\XSharp.RT\XSharp.RT.Next.xsproj", "{6F486043-1338-4502-9D41-1B3099C5278D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{0E600EC1-23D2-48D5-8301-0F4BF1C1D250}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - Common\BuildNumber.h = Common\BuildNumber.h - Common\CommonAssemblyInfo.cs = Common\CommonAssemblyInfo.cs - Common\commonAssemblyInfo.prg = Common\commonAssemblyInfo.prg - Common\Constants.cs = Common\Constants.cs - Common\constants.prg = Common\constants.prg - Common\CustomDefs.xh = Common\CustomDefs.xh - Common\dbcmd.xh = Common\dbcmd.xh - Common\FoxProCmd.xh = Common\FoxProCmd.xh - Common\FoxProSet.xh = Common\FoxProSet.xh - Common\FoxProSql.xh = Common\FoxProSql.xh - Common\GuidStrings.cs = Common\GuidStrings.cs - Common\memvar.xh = Common\memvar.xh - Common\NativeResourceDefines.xh = Common\NativeResourceDefines.xh - Runtime\README.md = Runtime\README.md - Common\README.md = Common\README.md - Runtime\Runtime.Targets = Runtime\Runtime.Targets - Runtime\VOSDK\Source\SharedSource\SDKAssemblyinfo.prg = Runtime\VOSDK\Source\SharedSource\SDKAssemblyinfo.prg - Common\set.xh = Common\set.xh - Common\version.xh = Common\version.xh - Common\VFPProperties.xh = Common\VFPProperties.xh - Runtime\VOSDK\Source\VOSDK\VOSDK.Targets = Runtime\VOSDK\Source\VOSDK\VOSDK.Targets - Common\XbasePPCmd.xh = Common\XbasePPCmd.xh - Runtime\XmlDoc.Targets = Runtime\XmlDoc.Targets - Common\XSharp.snk = Common\XSharp.snk - Common\XSharpConstants.cs = Common\XSharpConstants.cs - Common\XSharpDefs.xh = Common\XSharpDefs.xh - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x86 = Debug|x86 - Documentation|Any CPU = Documentation|Any CPU - Documentation|x86 = Documentation|x86 - Release|Any CPU = Release|Any CPU - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Debug|x86.ActiveCfg = Debug|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Debug|x86.Build.0 = Debug|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Documentation|Any CPU.Build.0 = Documentation|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Documentation|x86.ActiveCfg = Documentation|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Documentation|x86.Build.0 = Documentation|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Release|Any CPU.Build.0 = Release|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Release|x86.ActiveCfg = Release|Any CPU - {AB3D876E-6BDF-49D6-A06E-F92FF2D7B322}.Release|x86.Build.0 = Release|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Debug|x86.ActiveCfg = Debug|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Debug|x86.Build.0 = Debug|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Documentation|Any CPU.ActiveCfg = Documentation|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Documentation|Any CPU.Build.0 = Documentation|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Documentation|x86.ActiveCfg = Documentation|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Documentation|x86.Build.0 = Documentation|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Release|Any CPU.Build.0 = Release|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Release|x86.ActiveCfg = Release|Any CPU - {6F486043-1338-4502-9D41-1B3099C5278D}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {EF30CE30-FC9E-4FC7-B9F0-DCA49411ACFC} - EndGlobalSection -EndGlobal diff --git a/src/RuntimeNet8.slnx b/src/RuntimeNet8.slnx index 8aa1ed09b9..119b7690af 100644 --- a/src/RuntimeNet8.slnx +++ b/src/RuntimeNet8.slnx @@ -6,7 +6,7 @@ - + @@ -15,7 +15,7 @@ - + diff --git a/src/Tools.sln b/src/Tools.sln index aa37f00e25..5f364a22e8 100644 --- a/src/Tools.sln +++ b/src/Tools.sln @@ -37,6 +37,8 @@ Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "VFPXPorter", "Tools\VFPXPor EndProject Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "VFPXPorterLib", "Tools\VFPXPorter\Source\VFPXPorterLib\VFPXPorterLib.xsproj", "{71F46150-AAD7-4ED1-8E3F-263698800BA7}" EndProject +Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "XMLExtractor", "XMLExtractor\XMLExtractor.xsproj", "{018FA616-AFC8-4AEE-85C7-8BB0421F10A7}" +EndProject Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "VFPXPorterCmd", "Tools\VFPXPorter\Source\VFPXPorterCmd\VFPXPorterCmd.xsproj", "{8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}" EndProject Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "XSharp.VFP.UI", "Runtime\XSharp.VFP.UI\XSharp.VFP.UI.xsproj", "{7E2CBEF6-9945-42C4-A7DF-F9B8E2E68D44}" @@ -59,6 +61,12 @@ Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "DeployMsBuildSupport", "Too EndProject Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "Fab_VO_Entities", "Tools\VOXporter\Fab_VO_Entities.xsproj", "{73C0DCA6-BFE5-40CB-9240-3DB1C37F5B34}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{07C2787E-EAC7-C090-1BA3-A61EC2A24D84}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "VOXporter", "VOXporter", "{A4EA081E-613C-57B2-6F9D-00712237F07F}" +EndProject +Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "VOXPorter", "Tools\VOXporter\VOXPorter.xsproj", "{939B111B-6EBD-490F-A7F4-CE923D758A3B}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -101,6 +109,10 @@ Global {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Debug|Any CPU.Build.0 = Debug|Any CPU {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Release|Any CPU.ActiveCfg = Release|Any CPU {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Release|Any CPU.Build.0 = Release|Any CPU + {018FA616-AFC8-4AEE-85C7-8BB0421F10A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {018FA616-AFC8-4AEE-85C7-8BB0421F10A7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {018FA616-AFC8-4AEE-85C7-8BB0421F10A7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {018FA616-AFC8-4AEE-85C7-8BB0421F10A7}.Release|Any CPU.Build.0 = Release|Any CPU {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Debug|Any CPU.Build.0 = Debug|Any CPU {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -125,21 +137,33 @@ Global {73C0DCA6-BFE5-40CB-9240-3DB1C37F5B34}.Debug|Any CPU.Build.0 = Debug|Any CPU {73C0DCA6-BFE5-40CB-9240-3DB1C37F5B34}.Release|Any CPU.ActiveCfg = Release|Any CPU {73C0DCA6-BFE5-40CB-9240-3DB1C37F5B34}.Release|Any CPU.Build.0 = Release|Any CPU + {939B111B-6EBD-490F-A7F4-CE923D758A3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {939B111B-6EBD-490F-A7F4-CE923D758A3B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {939B111B-6EBD-490F-A7F4-CE923D758A3B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {939B111B-6EBD-490F-A7F4-CE923D758A3B}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution + {8A49A47C-ADE7-416C-8B28-CD3B401CBC25} = {07C2787E-EAC7-C090-1BA3-A61EC2A24D84} + {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC} = {07C2787E-EAC7-C090-1BA3-A61EC2A24D84} + {5190E508-E052-41D5-8824-EA472241489A} = {07C2787E-EAC7-C090-1BA3-A61EC2A24D84} {9E903F77-F7C7-4440-8508-7A30A4FA43FD} = {15CFBDC7-31AA-4D54-8FBE-08F1F1F6D0BF} {8E45C5BD-C5F7-4C00-8FB2-EC84413626D0} = {15CFBDC7-31AA-4D54-8FBE-08F1F1F6D0BF} {770CC19A-4BF3-4755-A293-39E9B20739D7} = {15CFBDC7-31AA-4D54-8FBE-08F1F1F6D0BF} + {F9579349-9B33-44A3-A615-D091AB45DBB8} = {07C2787E-EAC7-C090-1BA3-A61EC2A24D84} {23BB62E9-A405-416A-B0A5-0E4E178B839F} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {71F46150-AAD7-4ED1-8E3F-263698800BA7} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {018FA616-AFC8-4AEE-85C7-8BB0421F10A7} = {07C2787E-EAC7-C090-1BA3-A61EC2A24D84} {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {7E2CBEF6-9945-42C4-A7DF-F9B8E2E68D44} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {B4F3862C-82BC-407F-8A84-5241F7321F9F} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {421A1A64-A17D-451E-B7E0-DBF3A173B65D} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} {285EE821-AEB0-4014-8E8E-F74CDDA22616} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} + {F6DEA3EA-186C-4868-859A-C2EBBEE0D981} = {07C2787E-EAC7-C090-1BA3-A61EC2A24D84} + {73C0DCA6-BFE5-40CB-9240-3DB1C37F5B34} = {A4EA081E-613C-57B2-6F9D-00712237F07F} + {939B111B-6EBD-490F-A7F4-CE923D758A3B} = {A4EA081E-613C-57B2-6F9D-00712237F07F} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {DA4165FA-4A05-4C65-81EC-8F3AE3D23F53} diff --git a/src/VSIntegration2022.sln b/src/VSIntegration2022.sln index c94d47cdcb..72b4a965e3 100644 --- a/src/VSIntegration2022.sln +++ b/src/VSIntegration2022.sln @@ -1,7 +1,7 @@  Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 18 -VisualStudioVersion = 18.3.11426.168 d18.3 +VisualStudioVersion = 18.3.11426.168 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{ED0EE32E-392F-4848-B0F6-5C13C628A4A9}" ProjectSection(SolutionItems) = preProject @@ -35,16 +35,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ProjectPackage2022", "Visua EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tools", "Tools", "{A6566CA0-CE3D-4F2E-A964-1D6BB3C3A9B1}" EndProject -Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "RegisterProvider", "Tools\RegisterProvider\RegisterProvider.xsproj", "{5190E508-E052-41D5-8824-EA472241489A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VsVersionCheck", "Tools\SetupCheck\VsVersionCheck.csproj", "{B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}" -EndProject Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "XPorter", "Tools\XPorter\XPorter.xsproj", "{8A49A47C-ADE7-416C-8B28-CD3B401CBC25}" EndProject -Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "UDCTester", "Tools\UDCTester\UDCTester.xsproj", "{F9579349-9B33-44A3-A615-D091AB45DBB8}" -EndProject -Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "DeployMsBuildSupport", "Tools\DeployMsBuildSupport\DeployMsBuildSupport.xsproj", "{F6DEA3EA-186C-4868-859A-C2EBBEE0D981}" -EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Vs2022", "Vs2022", "{0D3C69B5-D236-42B3-B70D-2C9ABC9D434C}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Common", "Common", "{9F285506-97D3-486E-B59E-7C30C56B95AE}" @@ -67,6 +59,12 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "CodeDomProvider", "VisualSt EndProject Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "XMLExtractor", "XMLExtractor\XMLExtractor.xsproj", "{018FA616-AFC8-4AEE-85C7-8BB0421F10A7}" EndProject +Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "VFPXPorterCmd", "Tools\VFPXPorter\Source\VFPXPorterCmd\VFPXPorterCmd.xsproj", "{8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}" +EndProject +Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "VFPXPorterLib", "Tools\VFPXPorter\Source\VFPXPorterLib\VFPXPorterLib.xsproj", "{71F46150-AAD7-4ED1-8E3F-263698800BA7}" +EndProject +Project("{AA6C8D78-22FF-423A-9C7C-5F2393824E04}") = "VFPXPorter", "Tools\VFPXPorter\Source\VFPXPorter\VFPXPorter.xsproj", "{23BB62E9-A405-416A-B0A5-0E4E178B839F}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -149,30 +147,6 @@ Global {F4ADEBDB-CD20-4532-B4E3-FE7424F5369D}.Release|arm64.Build.0 = Release|arm64 {F4ADEBDB-CD20-4532-B4E3-FE7424F5369D}.Release|x86.ActiveCfg = Release|x86 {F4ADEBDB-CD20-4532-B4E3-FE7424F5369D}.Release|x86.Build.0 = Release|x86 - {5190E508-E052-41D5-8824-EA472241489A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Debug|arm64.ActiveCfg = Debug|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Debug|arm64.Build.0 = Debug|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Debug|x86.ActiveCfg = Debug|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Debug|x86.Build.0 = Debug|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Release|Any CPU.Build.0 = Release|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Release|arm64.ActiveCfg = Release|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Release|arm64.Build.0 = Release|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Release|x86.ActiveCfg = Release|Any CPU - {5190E508-E052-41D5-8824-EA472241489A}.Release|x86.Build.0 = Release|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Debug|arm64.ActiveCfg = Debug|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Debug|arm64.Build.0 = Debug|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Debug|x86.ActiveCfg = Debug|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Debug|x86.Build.0 = Debug|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Release|Any CPU.Build.0 = Release|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Release|arm64.ActiveCfg = Release|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Release|arm64.Build.0 = Release|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Release|x86.ActiveCfg = Release|Any CPU - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC}.Release|x86.Build.0 = Release|Any CPU {8A49A47C-ADE7-416C-8B28-CD3B401CBC25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8A49A47C-ADE7-416C-8B28-CD3B401CBC25}.Debug|Any CPU.Build.0 = Debug|Any CPU {8A49A47C-ADE7-416C-8B28-CD3B401CBC25}.Debug|arm64.ActiveCfg = Debug|Any CPU @@ -185,30 +159,6 @@ Global {8A49A47C-ADE7-416C-8B28-CD3B401CBC25}.Release|arm64.Build.0 = Release|Any CPU {8A49A47C-ADE7-416C-8B28-CD3B401CBC25}.Release|x86.ActiveCfg = Release|Any CPU {8A49A47C-ADE7-416C-8B28-CD3B401CBC25}.Release|x86.Build.0 = Release|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Debug|arm64.Build.0 = Debug|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Debug|x86.ActiveCfg = Debug|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Debug|x86.Build.0 = Debug|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Release|Any CPU.Build.0 = Release|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Release|arm64.ActiveCfg = Release|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Release|arm64.Build.0 = Release|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Release|x86.ActiveCfg = Release|Any CPU - {F9579349-9B33-44A3-A615-D091AB45DBB8}.Release|x86.Build.0 = Release|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Debug|arm64.ActiveCfg = Debug|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Debug|arm64.Build.0 = Debug|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Debug|x86.ActiveCfg = Debug|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Debug|x86.Build.0 = Debug|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Release|Any CPU.Build.0 = Release|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Release|arm64.ActiveCfg = Release|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Release|arm64.Build.0 = Release|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Release|x86.ActiveCfg = Release|Any CPU - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981}.Release|x86.Build.0 = Release|Any CPU {B837AC3B-9C61-49E4-9F4F-C8AD1FAF21CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {B837AC3B-9C61-49E4-9F4F-C8AD1FAF21CC}.Debug|Any CPU.Build.0 = Debug|Any CPU {B837AC3B-9C61-49E4-9F4F-C8AD1FAF21CC}.Debug|arm64.ActiveCfg = Debug|Any CPU @@ -317,6 +267,42 @@ Global {018FA616-AFC8-4AEE-85C7-8BB0421F10A7}.Release|arm64.Build.0 = Release|Any CPU {018FA616-AFC8-4AEE-85C7-8BB0421F10A7}.Release|x86.ActiveCfg = Release|Any CPU {018FA616-AFC8-4AEE-85C7-8BB0421F10A7}.Release|x86.Build.0 = Release|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Debug|arm64.ActiveCfg = Debug|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Debug|arm64.Build.0 = Debug|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Debug|x86.ActiveCfg = Debug|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Debug|x86.Build.0 = Debug|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Release|Any CPU.Build.0 = Release|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Release|arm64.ActiveCfg = Release|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Release|arm64.Build.0 = Release|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Release|x86.ActiveCfg = Release|Any CPU + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD}.Release|x86.Build.0 = Release|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Debug|arm64.ActiveCfg = Debug|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Debug|arm64.Build.0 = Debug|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Debug|x86.ActiveCfg = Debug|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Debug|x86.Build.0 = Debug|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Release|Any CPU.Build.0 = Release|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Release|arm64.ActiveCfg = Release|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Release|arm64.Build.0 = Release|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Release|x86.ActiveCfg = Release|Any CPU + {71F46150-AAD7-4ED1-8E3F-263698800BA7}.Release|x86.Build.0 = Release|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Debug|Any CPU.Build.0 = Debug|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Debug|arm64.ActiveCfg = Debug|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Debug|arm64.Build.0 = Debug|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Debug|x86.ActiveCfg = Debug|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Debug|x86.Build.0 = Debug|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Release|Any CPU.ActiveCfg = Release|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Release|Any CPU.Build.0 = Release|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Release|arm64.ActiveCfg = Release|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Release|arm64.Build.0 = Release|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Release|x86.ActiveCfg = Release|Any CPU + {23BB62E9-A405-416A-B0A5-0E4E178B839F}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -328,11 +314,7 @@ Global {4484939E-DDA8-4033-8B1C-E8F60A2BAFE1} = {0D3C69B5-D236-42B3-B70D-2C9ABC9D434C} {16272550-75E6-4B9D-91E3-653BD141C756} = {0D3C69B5-D236-42B3-B70D-2C9ABC9D434C} {F4ADEBDB-CD20-4532-B4E3-FE7424F5369D} = {0D3C69B5-D236-42B3-B70D-2C9ABC9D434C} - {5190E508-E052-41D5-8824-EA472241489A} = {A6566CA0-CE3D-4F2E-A964-1D6BB3C3A9B1} - {B9AA5DD9-28D1-445D-8FDD-6195DC479BCC} = {A6566CA0-CE3D-4F2E-A964-1D6BB3C3A9B1} {8A49A47C-ADE7-416C-8B28-CD3B401CBC25} = {A6566CA0-CE3D-4F2E-A964-1D6BB3C3A9B1} - {F9579349-9B33-44A3-A615-D091AB45DBB8} = {A6566CA0-CE3D-4F2E-A964-1D6BB3C3A9B1} - {F6DEA3EA-186C-4868-859A-C2EBBEE0D981} = {A6566CA0-CE3D-4F2E-A964-1D6BB3C3A9B1} {B837AC3B-9C61-49E4-9F4F-C8AD1FAF21CC} = {9F285506-97D3-486E-B59E-7C30C56B95AE} {7619DB88-6286-4EF1-8273-2A08CC8AC70E} = {9F285506-97D3-486E-B59E-7C30C56B95AE} {EED6843B-B727-4F08-AA32-CA0F48FDDE3F} = {9F285506-97D3-486E-B59E-7C30C56B95AE} @@ -342,6 +324,9 @@ Global {939B111B-6EBD-490F-A7F4-CE923D758A3B} = {A6566CA0-CE3D-4F2E-A964-1D6BB3C3A9B1} {7B7D9574-66A7-4719-AA48-C2386D7BF153} = {9F285506-97D3-486E-B59E-7C30C56B95AE} {018FA616-AFC8-4AEE-85C7-8BB0421F10A7} = {9F285506-97D3-486E-B59E-7C30C56B95AE} + {8FFA9199-E4A3-4AC4-9A97-9BA2AC8D13CD} = {A6566CA0-CE3D-4F2E-A964-1D6BB3C3A9B1} + {71F46150-AAD7-4ED1-8E3F-263698800BA7} = {A6566CA0-CE3D-4F2E-A964-1D6BB3C3A9B1} + {23BB62E9-A405-416A-B0A5-0E4E178B839F} = {A6566CA0-CE3D-4F2E-A964-1D6BB3C3A9B1} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6F61AAF2-9C04-4D27-887F-8A475F079D9C} From 7f7521d0357912fc21f63c1bf87ba8922d0365d1 Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 20:54:42 +0100 Subject: [PATCH 16/17] [Nuget] Add xml files to nuget package. Chinese help follows later --- src/Runtime/Nuget/XSPackNuget.prgx | 15 +++++++++++---- src/Runtime/Nuget/XSharp.Core.nuspec.txt | 1 + src/Runtime/Nuget/XSharp.Harbour.nuspec.txt | 1 + src/Runtime/Nuget/XSharp.RT.nuspec.txt | 4 ++++ src/Runtime/Nuget/XSharp.VFP.nuspec.txt | 1 + src/Runtime/Nuget/XSharp.VO.nuspec.txt | 1 + src/Runtime/Nuget/XSharp.VOSDK.nuspec.txt | 5 +++-- src/Runtime/Nuget/XSharp.VOSDKTyped.nuspec.txt | 1 + src/Runtime/Nuget/XSharp.XPP.nuspec.txt | 1 + 9 files changed, 24 insertions(+), 6 deletions(-) diff --git a/src/Runtime/Nuget/XSPackNuget.prgx b/src/Runtime/Nuget/XSPackNuget.prgx index 24c5b57f6e..64e0c12bd3 100644 --- a/src/Runtime/Nuget/XSPackNuget.prgx +++ b/src/Runtime/Nuget/XSPackNuget.prgx @@ -33,6 +33,7 @@ ENDIF // For a Single TFM, this could work VAR SourceFolders := Root + "\Artifacts\" + Build VAR OutputFolder := Root + "\Artifacts\Packages\" + Build +VAR XmlFolder := Root+"\Artifacts\Help" // Parameter for TFM ? IF Args:Count >= 3 @@ -85,6 +86,7 @@ InfoMessage( "Tool : " + Tool ) InfoMessage( "Build : " + Build ) InfoMessage( "Target Framework : " + TFM ) InfoMessage( "Source Folder : " + SourceFolders ) +InfoMessage( "Xml Folder : " + XmlFolder ) InfoMessage( "Output Folder : " + OutputFolder ) InfoMessage( "Version : " + Version ) // Check if Nuget is installed @@ -95,7 +97,7 @@ IF ( ! result ) RETURN ENDIF -CreateNuSpec( TFM, SourceFolders, Tool, Version ) +CreateNuSpec( TFM, SourceFolders, Tool, Version, XmlFolder ) IF !RunNuget( Tool, Version, OutputFolder ) ErrorMessage( "Something went wrong...." ) @@ -142,7 +144,7 @@ FUNCTION CheckNuGet() AS LOGIC END USING RETURN result -PROCEDURE CreateNuSpec( tfm AS STRING, sourceFolders AS STRING, tool AS String, version AS STRING ) +PROCEDURE CreateNuSpec( tfm AS STRING, sourceFolders AS STRING, tool AS String, version AS STRING, xmlFolder AS STRING) VAR source := "XSharp." + tool + ".nuspec.txt" VAR destination := "XSharp." + tool + "." + version +".nuspec" VAR content := "" @@ -156,10 +158,15 @@ PROCEDURE CreateNuSpec( tfm AS STRING, sourceFolders AS STRING, tool AS String, FOR VAR i := 1 TO tfmList:Length VAR tfmItem := tfmList[i] VAR srcFolder := sourceFolder[i] - content += line:Replace( "$SourceFolder", srcFolder ):Replace( "$TFM", tfmItem ) + Environment.NewLine + content += line:Replace( "$SourceFolder", srcFolder ):Replace( "$TFM", tfmItem ) +Environment.NewLine + NEXT + ELSEIF line:Contains( "$XmlFolder" ) + FOR VAR i := 1 TO tfmList:Length + VAR tfmItem := tfmList[i] + content += line:Replace( "$XmlFolder", xmlFolder ):Replace( "$TFM", tfmItem ) +Environment.NewLine NEXT ELSE - content += line:Replace( "$Version", version ) + Environment.NewLine + content += line:Replace( "$Version", version ) +Environment.NewLine ENDIF NEXT File.WriteAllText( destination, content ) diff --git a/src/Runtime/Nuget/XSharp.Core.nuspec.txt b/src/Runtime/Nuget/XSharp.Core.nuspec.txt index 0b7ca747b8..60956764e1 100644 --- a/src/Runtime/Nuget/XSharp.Core.nuspec.txt +++ b/src/Runtime/Nuget/XSharp.Core.nuspec.txt @@ -19,5 +19,6 @@ + \ No newline at end of file diff --git a/src/Runtime/Nuget/XSharp.Harbour.nuspec.txt b/src/Runtime/Nuget/XSharp.Harbour.nuspec.txt index ff06e61137..87922299cf 100644 --- a/src/Runtime/Nuget/XSharp.Harbour.nuspec.txt +++ b/src/Runtime/Nuget/XSharp.Harbour.nuspec.txt @@ -27,5 +27,6 @@ + \ No newline at end of file diff --git a/src/Runtime/Nuget/XSharp.RT.nuspec.txt b/src/Runtime/Nuget/XSharp.RT.nuspec.txt index 8c5a23d26f..0e00b92a59 100644 --- a/src/Runtime/Nuget/XSharp.RT.nuspec.txt +++ b/src/Runtime/Nuget/XSharp.RT.nuspec.txt @@ -31,5 +31,9 @@ + + + + \ No newline at end of file diff --git a/src/Runtime/Nuget/XSharp.VFP.nuspec.txt b/src/Runtime/Nuget/XSharp.VFP.nuspec.txt index f651232b07..2a0cb0bc94 100644 --- a/src/Runtime/Nuget/XSharp.VFP.nuspec.txt +++ b/src/Runtime/Nuget/XSharp.VFP.nuspec.txt @@ -27,6 +27,7 @@ + \ No newline at end of file diff --git a/src/Runtime/Nuget/XSharp.VO.nuspec.txt b/src/Runtime/Nuget/XSharp.VO.nuspec.txt index 1c49f37713..25cbe3125f 100644 --- a/src/Runtime/Nuget/XSharp.VO.nuspec.txt +++ b/src/Runtime/Nuget/XSharp.VO.nuspec.txt @@ -27,5 +27,6 @@ + \ No newline at end of file diff --git a/src/Runtime/Nuget/XSharp.VOSDK.nuspec.txt b/src/Runtime/Nuget/XSharp.VOSDK.nuspec.txt index b4fa894aa0..46f3fc52cd 100644 --- a/src/Runtime/Nuget/XSharp.VOSDK.nuspec.txt +++ b/src/Runtime/Nuget/XSharp.VOSDK.nuspec.txt @@ -24,9 +24,10 @@ - + - + + \ No newline at end of file diff --git a/src/Runtime/Nuget/XSharp.VOSDKTyped.nuspec.txt b/src/Runtime/Nuget/XSharp.VOSDKTyped.nuspec.txt index ef4e430a53..9a67fd3557 100644 --- a/src/Runtime/Nuget/XSharp.VOSDKTyped.nuspec.txt +++ b/src/Runtime/Nuget/XSharp.VOSDKTyped.nuspec.txt @@ -27,5 +27,6 @@ + \ No newline at end of file diff --git a/src/Runtime/Nuget/XSharp.XPP.nuspec.txt b/src/Runtime/Nuget/XSharp.XPP.nuspec.txt index aa2db60f03..bdcefd2963 100644 --- a/src/Runtime/Nuget/XSharp.XPP.nuspec.txt +++ b/src/Runtime/Nuget/XSharp.XPP.nuspec.txt @@ -27,5 +27,6 @@ + \ No newline at end of file From 7dc37dbb798d67810810b2fd5f5f0b6ead2246d1 Mon Sep 17 00:00:00 2001 From: Robert van der Hulst Date: Mon, 9 Feb 2026 21:14:34 +0100 Subject: [PATCH 17/17] [Vsintegration] Seped up loading of projects by suppressing calls to MsBuild --- docs/Help/Topics/Known-Issues-in-XSharp-3.xml | 4 +- .../XSharp.Data/XSharp.Data.Next.xsproj | 2 +- .../Nodes/XSharpSdkProjectNode.cs | 21 +++++++-- .../source.extension.vsixmanifest | 43 ++++++++----------- 4 files changed, 39 insertions(+), 31 deletions(-) diff --git a/docs/Help/Topics/Known-Issues-in-XSharp-3.xml b/docs/Help/Topics/Known-Issues-in-XSharp-3.xml index 2e29241439..72c415eeb6 100644 --- a/docs/Help/Topics/Known-Issues-in-XSharp-3.xml +++ b/docs/Help/Topics/Known-Issues-in-XSharp-3.xml @@ -1,6 +1,6 @@  - + Known Issues in XSharp 3
    @@ -8,7 +8,7 @@
    Known issues -
  • Renaming an item in a SDK project also sometimes fails.
  • +
  • Renaming an item in a SDK project sometimes fails.
  • There is no dialog yet in Visual Studio to declare GLOBAL USINGs at the project file level
  • Projects that are Multi-Targeting (that have a TargetFrameworks property are supported, but only one Framework is built when opened inside Visual Studio. The project system renames the node to XTargetFrameworks, and adds a TargetFramework property with the active framework. When saving this is reversed and the last selected active target framework is stored in the project file as ActiveTargetFramework, so it can be restored the next time that the project is opened.
  • We have occasionally seen that switching a single targeting project from one version to another may cause Visual Studio to hang.
  • diff --git a/src/Runtime/XSharp.Data/XSharp.Data.Next.xsproj b/src/Runtime/XSharp.Data/XSharp.Data.Next.xsproj index a609f52913..0a1db617ce 100644 --- a/src/Runtime/XSharp.Data/XSharp.Data.Next.xsproj +++ b/src/Runtime/XSharp.Data/XSharp.Data.Next.xsproj @@ -29,7 +29,7 @@ XSharp.RT.Next - {d233b3c6-e6f8-478d-9ce5-ef27a594e370} + {504a02d9-74ae-445f-85d7-af2544e06d81} True
    diff --git a/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs b/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs index 0bc5b7f435..dae9193abb 100644 --- a/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs +++ b/src/VisualStudio/ProjectPackage/Nodes/XSharpSdkProjectNode.cs @@ -29,7 +29,7 @@ namespace XSharp.Project { internal class XSharpSdkProjectNode : XSharpProjectNode { - + internal bool SuspendBuild = false; class VirtualBuildProject : MSBuild.Project { public VirtualBuildProject(string fileName) : base(fileName) @@ -358,8 +358,7 @@ private void AddPendingReferences(List newReferences, SdkSubProjectInfo var toDelete = new List(); var toAdd = new List(); - this.Build(MsBuildTarget.ResolveAssemblyReferences); - + //this.Build(MsBuildTarget.ResolveAssemblyReferences); foreach (var reference in sdkReferences) { if (!newReferences.Contains(reference, StringComparer.OrdinalIgnoreCase)) @@ -383,11 +382,14 @@ private void AddPendingReferences(List newReferences, SdkSubProjectInfo node.Dispose(); } // add new nodes + this.SuspendBuild = true; + foreach (var item in toAdd) { var node = new XSharpDependencyNode(this, item); frameworkNode.AddChild(node); } + this.SuspendBuild = false; sdkReferences.Clear(); sdkReferences.AddRange(newReferences); frameworkNode.IsExpanded = isExpanded; @@ -412,7 +414,8 @@ public XSharpDependencyNode(XSharpProjectNode root, string filePath) : base(root, filePath) { // We do not want to store these dependencies in the project file, so we remove them from the BuildProject - root.BuildProject.RemoveItem(this.ItemNode.Item); + if (this.ItemNode != null && this.ItemNode.Item != null) + root.BuildProject.RemoveItem(this.ItemNode.Item); } public override bool EmbedInteropTypes { get => false; set { }} @@ -420,6 +423,16 @@ protected override ImageMoniker GetIconMoniker(bool open) { return KnownMonikers.ReferencePrivate; } + protected override void ResolveAssemblyReference() + { + if (this.ProjectMgr is XSharpSdkProjectNode sdk && !sdk.SuspendBuild) + base.ResolveAssemblyReference(); + } + protected override void BindReferenceData() + { + if (this.ProjectMgr is XSharpSdkProjectNode sdk && !sdk.SuspendBuild) + base.BindReferenceData(); + } override public Guid ItemTypeGuid => VSConstants.GUID_ItemType_VirtualFolder; } diff --git a/src/VisualStudio/ProjectPackage/source.extension.vsixmanifest b/src/VisualStudio/ProjectPackage/source.extension.vsixmanifest index a3c97464e2..3d01645e3a 100644 --- a/src/VisualStudio/ProjectPackage/source.extension.vsixmanifest +++ b/src/VisualStudio/ProjectPackage/source.extension.vsixmanifest @@ -1,8 +1,8 @@  - - XSharp VS Integration for 2022 and later + + XSharp Visual Studio Integration X# Visual Studio Integration. Includes a Project System, Language Service , Debugger Support, Custom Editors etc. http://www.xsharp.eu @@ -13,41 +13,36 @@ Includes a Project System, Language Service , Debugger Support, Custom Editors e XSharp, XBase, FoxPro, Visual Objects, Xbase++, Harbour - - amd64 - - - arm64 - + - - + + - - - - + + + + - - - - + + + - - - + + + + ProjectTemplates ItemTemplates - - - + + +