You've already forked godot
mirror of
https://github.com/godotengine/godot.git
synced 2025-12-01 16:38:31 +00:00
C#: Support for building with the dotnet CLI
By adding a reference to the 'Microsoft.NETFramework.ReferenceAssemblies' nuget package, we can build projects targeting .NET Framework with the dotnet CLI. By referencing this package we also don't need to install Mono on Linux/macOS or .NET Framework on Windows, as the assemblies are taken from the package.
This commit is contained in:
@@ -17,16 +17,24 @@ namespace GodotTools.Build
|
||||
private static string _msbuildToolsPath = string.Empty;
|
||||
private static string _msbuildUnixPath = string.Empty;
|
||||
|
||||
public static string FindMsBuild()
|
||||
public static (string, BuildTool) FindMsBuild()
|
||||
{
|
||||
var editorSettings = GodotSharpEditor.Instance.GetEditorInterface().GetEditorSettings();
|
||||
var buildTool = (BuildManager.BuildTool)editorSettings.GetSetting("mono/builds/build_tool");
|
||||
var buildTool = (BuildTool)editorSettings.GetSetting("mono/builds/build_tool");
|
||||
|
||||
if (OS.IsWindows)
|
||||
{
|
||||
switch (buildTool)
|
||||
{
|
||||
case BuildManager.BuildTool.MsBuildVs:
|
||||
case BuildTool.DotnetCli:
|
||||
{
|
||||
string dotnetCliPath = OS.PathWhich("dotnet");
|
||||
if (!string.IsNullOrEmpty(dotnetCliPath))
|
||||
return (dotnetCliPath, BuildTool.DotnetCli);
|
||||
GD.PushError("Cannot find dotnet CLI executable. Fallback to MSBuild from Visual Studio.");
|
||||
goto case BuildTool.MsBuildVs;
|
||||
}
|
||||
case BuildTool.MsBuildVs:
|
||||
{
|
||||
if (string.IsNullOrEmpty(_msbuildToolsPath) || !File.Exists(_msbuildToolsPath))
|
||||
{
|
||||
@@ -40,18 +48,18 @@ namespace GodotTools.Build
|
||||
if (!_msbuildToolsPath.EndsWith("\\"))
|
||||
_msbuildToolsPath += "\\";
|
||||
|
||||
return Path.Combine(_msbuildToolsPath, "MSBuild.exe");
|
||||
return (Path.Combine(_msbuildToolsPath, "MSBuild.exe"), BuildTool.MsBuildVs);
|
||||
}
|
||||
case BuildManager.BuildTool.MsBuildMono:
|
||||
case BuildTool.MsBuildMono:
|
||||
{
|
||||
string msbuildPath = Path.Combine(Internal.MonoWindowsInstallRoot, "bin", "msbuild.bat");
|
||||
|
||||
if (!File.Exists(msbuildPath))
|
||||
throw new FileNotFoundException($"Cannot find executable for '{BuildManager.PropNameMSBuildMono}'. Tried with path: {msbuildPath}");
|
||||
|
||||
return msbuildPath;
|
||||
return (msbuildPath, BuildTool.MsBuildMono);
|
||||
}
|
||||
case BuildManager.BuildTool.JetBrainsMsBuild:
|
||||
case BuildTool.JetBrainsMsBuild:
|
||||
{
|
||||
var editorPath = (string)editorSettings.GetSetting(RiderPathManager.EditorPathSettingName);
|
||||
|
||||
@@ -65,7 +73,7 @@ namespace GodotTools.Build
|
||||
if (!File.Exists(msbuildPath))
|
||||
throw new FileNotFoundException($"Cannot find executable for '{BuildManager.PropNameMSBuildJetBrains}'. Tried with path: {msbuildPath}");
|
||||
|
||||
return msbuildPath;
|
||||
return (msbuildPath, BuildTool.JetBrainsMsBuild);
|
||||
}
|
||||
default:
|
||||
throw new IndexOutOfRangeException("Invalid build tool in editor settings");
|
||||
@@ -74,21 +82,32 @@ namespace GodotTools.Build
|
||||
|
||||
if (OS.IsUnixLike)
|
||||
{
|
||||
if (buildTool == BuildManager.BuildTool.MsBuildMono)
|
||||
switch (buildTool)
|
||||
{
|
||||
if (string.IsNullOrEmpty(_msbuildUnixPath) || !File.Exists(_msbuildUnixPath))
|
||||
case BuildTool.DotnetCli:
|
||||
{
|
||||
// Try to search it again if it wasn't found last time or if it was removed from its location
|
||||
_msbuildUnixPath = FindBuildEngineOnUnix("msbuild");
|
||||
string dotnetCliPath = OS.PathWhich("dotnet");
|
||||
if (!string.IsNullOrEmpty(dotnetCliPath))
|
||||
return (dotnetCliPath, BuildTool.DotnetCli);
|
||||
GD.PushError("Cannot find dotnet CLI executable. Fallback to MSBuild from Mono.");
|
||||
goto case BuildTool.MsBuildMono;
|
||||
}
|
||||
case BuildTool.MsBuildMono:
|
||||
{
|
||||
if (string.IsNullOrEmpty(_msbuildUnixPath) || !File.Exists(_msbuildUnixPath))
|
||||
{
|
||||
// Try to search it again if it wasn't found last time or if it was removed from its location
|
||||
_msbuildUnixPath = FindBuildEngineOnUnix("msbuild");
|
||||
}
|
||||
|
||||
if (string.IsNullOrEmpty(_msbuildUnixPath))
|
||||
throw new FileNotFoundException($"Cannot find binary for '{BuildManager.PropNameMSBuildMono}'");
|
||||
if (string.IsNullOrEmpty(_msbuildUnixPath))
|
||||
throw new FileNotFoundException($"Cannot find binary for '{BuildManager.PropNameMSBuildMono}'");
|
||||
|
||||
return _msbuildUnixPath;
|
||||
return (_msbuildUnixPath, BuildTool.MsBuildMono);
|
||||
}
|
||||
default:
|
||||
throw new IndexOutOfRangeException("Invalid build tool in editor settings");
|
||||
}
|
||||
|
||||
throw new IndexOutOfRangeException("Invalid build tool in editor settings");
|
||||
}
|
||||
|
||||
throw new PlatformNotSupportedException();
|
||||
|
||||
Reference in New Issue
Block a user