refactor(srp): unify engine managed assembly discovery

This commit is contained in:
2026-04-19 05:17:42 +08:00
parent 5fa209ab5d
commit 11a03a4b46
11 changed files with 458 additions and 71 deletions

View File

@@ -11,6 +11,7 @@
#include <fstream>
#include <memory>
#include <string>
#include <utility>
namespace XCEngine::Editor::Scripting {
namespace {
@@ -54,10 +55,30 @@ TEST_F(EditorScriptAssemblyBuilderTest, RebuildsProjectScriptAssembliesIntoLibra
EditorScriptAssemblyBuilder::RebuildProjectAssemblies(m_projectRoot.string());
ASSERT_TRUE(result.succeeded) << result.message;
EXPECT_TRUE(std::filesystem::exists(m_projectRoot / "Library" / "ScriptAssemblies" / "XCEngine.ScriptCore.dll"));
EXPECT_TRUE(std::filesystem::exists(m_projectRoot / "Library" / "ScriptAssemblies" / "XCEngine.RenderPipelines.Universal.dll"));
EXPECT_TRUE(std::filesystem::exists(m_projectRoot / "Library" / "ScriptAssemblies" / "GameScripts.dll"));
EXPECT_TRUE(std::filesystem::exists(m_projectRoot / "Library" / "ScriptAssemblies" / "mscorlib.dll"));
const std::filesystem::path assemblyDirectory =
m_projectRoot / "Library" / "ScriptAssemblies";
EXPECT_TRUE(std::filesystem::exists(assemblyDirectory / "XCEngine.ScriptCore.dll"));
EXPECT_TRUE(std::filesystem::exists(assemblyDirectory / "GameScripts.dll"));
EXPECT_TRUE(std::filesystem::exists(assemblyDirectory / "mscorlib.dll"));
EXPECT_TRUE(std::filesystem::exists(
XCEngine::Scripting::MonoScriptRuntime::GetEngineAssemblyManifestPath(
assemblyDirectory)));
XCEngine::Scripting::MonoScriptRuntime::Settings settings;
settings.assemblyDirectory = assemblyDirectory;
settings.coreAssemblyPath = assemblyDirectory / "XCEngine.ScriptCore.dll";
settings.appAssemblyPath = assemblyDirectory / "GameScripts.dll";
std::string engineAssemblyError;
ASSERT_TRUE(
XCEngine::Scripting::MonoScriptRuntime::DiscoverEngineAssemblies(
settings,
&engineAssemblyError))
<< engineAssemblyError;
ASSERT_FALSE(settings.engineAssemblies.empty());
for (const auto& assembly : settings.engineAssemblies) {
EXPECT_TRUE(std::filesystem::exists(assembly.path))
<< assembly.path.string();
}
}
#ifdef XCENGINE_ENABLE_MONO_SCRIPTING
@@ -80,12 +101,13 @@ TEST_F(EditorScriptAssemblyBuilderTest, RebuildFailsWhileLoadedAssemblyIsStillHe
settings.assemblyDirectory = m_projectRoot / "Library" / "ScriptAssemblies";
settings.corlibDirectory = settings.assemblyDirectory;
settings.coreAssemblyPath = settings.assemblyDirectory / "XCEngine.ScriptCore.dll";
settings.engineAssemblies.push_back(
XCEngine::Scripting::MonoScriptRuntime::ManagedAssemblyDescriptor{
"XCEngine.RenderPipelines.Universal",
settings.assemblyDirectory /
"XCEngine.RenderPipelines.Universal.dll"});
settings.appAssemblyPath = settings.assemblyDirectory / "GameScripts.dll";
std::string engineAssemblyError;
ASSERT_TRUE(
XCEngine::Scripting::MonoScriptRuntime::DiscoverEngineAssemblies(
settings,
&engineAssemblyError))
<< engineAssemblyError;
auto runtime = std::make_unique<XCEngine::Scripting::MonoScriptRuntime>(settings);
ASSERT_TRUE(runtime->Initialize()) << runtime->GetLastError();