diff --git a/sources/assets/Stride.Core.Assets/Package.cs b/sources/assets/Stride.Core.Assets/Package.cs index f738fd27b9..e68763ec34 100644 --- a/sources/assets/Stride.Core.Assets/Package.cs +++ b/sources/assets/Stride.Core.Assets/Package.cs @@ -598,7 +598,7 @@ internal static Package LoadRaw(ILogger log, string filePath) public static PackageContainer LoadProject(ILogger log, string filePath) { - if (Path.GetExtension(filePath).ToLowerInvariant() == ".csproj") + if (Path.GetExtension(filePath).ToLowerInvariant() == ".csproj" || Path.GetExtension(filePath).ToLowerInvariant() == ".fsproj") { var projectPath = filePath; var packagePath = Path.ChangeExtension(filePath, Package.PackageFileExtension); diff --git a/sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs b/sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs index 6470ae73f3..7a8fbd5351 100644 --- a/sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs +++ b/sources/assets/Stride.Core.Assets/PackageSession.Dependencies.cs @@ -258,7 +258,8 @@ private async Task PreLoadPackageDependencies(ILogger log, SolutionProject proje switch (projectDependency.Type) { case DependencyType.Project: - if (Path.GetExtension(projectDependency.MSBuildProject).ToLowerInvariant() == ".csproj") + var fileExtension = Path.GetExtension(projectDependency.MSBuildProject).ToLowerInvariant(); + if (fileExtension == ".csproj" || fileExtension == ".fsproj") file = UPath.Combine(project.FullPath.GetFullDirectory(), (UFile)projectDependency.MSBuildProject); break; case DependencyType.Package: diff --git a/sources/assets/Stride.Core.Assets/PackageSession.cs b/sources/assets/Stride.Core.Assets/PackageSession.cs index cfe97a649a..0011dce831 100644 --- a/sources/assets/Stride.Core.Assets/PackageSession.cs +++ b/sources/assets/Stride.Core.Assets/PackageSession.cs @@ -815,7 +815,7 @@ public static void Load(string filePath, PackageSessionResult sessionResult, Pac // Note: using ToList() because upgrade from old package system might change Projects list foreach (var vsProject in solution.Projects.ToList()) { - if (vsProject.TypeGuid == VisualStudio.KnownProjectTypeGuid.CSharp || vsProject.TypeGuid == VisualStudio.KnownProjectTypeGuid.CSharpNewSystem) + if (vsProject.TypeGuid == VisualStudio.KnownProjectTypeGuid.CSharp || vsProject.TypeGuid == VisualStudio.KnownProjectTypeGuid.CSharpNewSystem || vsProject.TypeGuid == VisualStudio.KnownProjectTypeGuid.FSharpNewSystem) { var project = (SolutionProject)session.LoadProject(sessionResult, vsProject.FullPath, loadParameters); project.VSProject = vsProject; diff --git a/sources/assets/Stride.Core.Assets/PackageSessionPublicHelper.cs b/sources/assets/Stride.Core.Assets/PackageSessionPublicHelper.cs index 5d36c9cba5..2f043a1b04 100644 --- a/sources/assets/Stride.Core.Assets/PackageSessionPublicHelper.cs +++ b/sources/assets/Stride.Core.Assets/PackageSessionPublicHelper.cs @@ -81,12 +81,14 @@ private static void ApplyDotNetSdkEnvironmentVariables(string dotNetSdkPath) const string MSBUILD_EXE_PATH = nameof(MSBUILD_EXE_PATH); const string MSBuildExtensionsPath = nameof(MSBuildExtensionsPath); const string MSBuildSDKsPath = nameof(MSBuildSDKsPath); + const string DOTNET_HOST_PATH = nameof(DOTNET_HOST_PATH); var variables = new Dictionary { [MSBUILD_EXE_PATH] = dotNetSdkPath + "MSBuild.dll", [MSBuildExtensionsPath] = dotNetSdkPath, - [MSBuildSDKsPath] = dotNetSdkPath + "Sdks" + [MSBuildSDKsPath] = dotNetSdkPath + "Sdks", + [DOTNET_HOST_PATH] = dotNetSdkPath + "../../dotnet.exe" }; foreach (var kvp in variables) diff --git a/sources/core/Stride.Core.Design/VisualStudio/KnownProjectTypeGuid.cs b/sources/core/Stride.Core.Design/VisualStudio/KnownProjectTypeGuid.cs index 4aa7d883c2..901d9d6ef4 100644 --- a/sources/core/Stride.Core.Design/VisualStudio/KnownProjectTypeGuid.cs +++ b/sources/core/Stride.Core.Design/VisualStudio/KnownProjectTypeGuid.cs @@ -38,5 +38,6 @@ public static class KnownProjectTypeGuid public static readonly Guid Setup = new Guid("54435603-DBB4-11D2-8724-00A0C9A8B90C"); public static readonly Guid WebProject = new Guid("E24C65DC-7377-472B-9ABA-BC803B73C61A"); public static readonly Guid CSharpNewSystem = new Guid("9A19103F-16F7-4668-BE54-9A1E7A4F7556"); + public static readonly Guid FSharpNewSystem = new Guid("6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705"); } } diff --git a/sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs b/sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs index f80631c26e..212b96e2d9 100644 --- a/sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs +++ b/sources/editor/Stride.Assets.Presentation/AssetEditors/ProjectWatcher.cs @@ -208,6 +208,9 @@ private async Task FileChangeTransformation(FileEvent e) if (string.Equals(trackedAssembly.LoadedAssembly.Path, changedFile, StringComparison.OrdinalIgnoreCase)) return new AssemblyChangedEvent(trackedAssembly.LoadedAssembly, AssemblyChangeType.Binary, changedFile, trackedAssembly.Project); + if (trackedAssembly.Project == null) + continue; + var needProjectReload = string.Equals(trackedAssembly.Project.FilePath, changedFile, StringComparison.OrdinalIgnoreCase); // Also check for .cs file changes (DefaultItems auto import *.cs, with some excludes such as obj subfolder) @@ -311,10 +314,11 @@ private async Task TrackPackage(PackageViewModel package) directoryWatcher.Track(loadedAssembly.ProjectReference.Location); var trackedAssembly = new TrackedAssembly { Package = package, LoadedAssembly = loadedAssembly }; - + // Track project source code - if (await UpdateProject(trackedAssembly)) - trackedAssemblies.Add(trackedAssembly); + if (trackedAssembly.LoadedAssembly.ProjectReference.Location.GetFileExtension().Equals("csproj", StringComparison.InvariantCultureIgnoreCase)) + await UpdateProject(trackedAssembly); + trackedAssemblies.Add(trackedAssembly); } // TODO: Detect changes to loaded assemblies? diff --git a/sources/editor/Stride.GameStudio/DebuggingViewModel.cs b/sources/editor/Stride.GameStudio/DebuggingViewModel.cs index b016e0990d..5ce6803420 100644 --- a/sources/editor/Stride.GameStudio/DebuggingViewModel.cs +++ b/sources/editor/Stride.GameStudio/DebuggingViewModel.cs @@ -168,14 +168,14 @@ private async void PullAssemblyChanges([NotNull] ProjectWatcher projectWatcher) if (!trackAssemblyChanges || assemblyChange == null) continue; - // Ignore Binary changes - if (assemblyChange.ChangeType == AssemblyChangeType.Binary) + if (assemblyChange.Project != null && assemblyChange.ChangeType == AssemblyChangeType.Binary) continue; var shouldNotify = !assemblyChangesPending; modifiedAssemblies[assemblyChange.Assembly] = new ModifiedAssembly { LoadedAssembly = assemblyChange.Assembly, + LoadedAssemblyPath = assemblyChange.Assembly.Path, ChangeType = assemblyChange.ChangeType, Project = assemblyChange.Project }; diff --git a/sources/editor/Stride.GameStudio/Stride.GameStudio.csproj b/sources/editor/Stride.GameStudio/Stride.GameStudio.csproj index b06b4f68a5..b66cd1d97b 100644 --- a/sources/editor/Stride.GameStudio/Stride.GameStudio.csproj +++ b/sources/editor/Stride.GameStudio/Stride.GameStudio.csproj @@ -17,6 +17,7 @@ true --auto-module-initializer true + false true true true