diff --git a/backend/packagegroups/NuGet.props b/backend/packagegroups/NuGet.props
index a00cf3b7690..1279ebf27a4 100644
--- a/backend/packagegroups/NuGet.props
+++ b/backend/packagegroups/NuGet.props
@@ -28,7 +28,6 @@
-
diff --git a/backend/tests/SharedResources.Tests/Compiler.cs b/backend/src/DataModeling/Converter/Csharp/Compiler.cs
similarity index 83%
rename from backend/tests/SharedResources.Tests/Compiler.cs
rename to backend/src/DataModeling/Converter/Csharp/Compiler.cs
index f316935aabb..da99a6fba70 100644
--- a/backend/tests/SharedResources.Tests/Compiler.cs
+++ b/backend/src/DataModeling/Converter/Csharp/Compiler.cs
@@ -10,7 +10,7 @@
using Microsoft.CodeAnalysis.Emit;
using Microsoft.CodeAnalysis.Text;
-namespace SharedResources.Tests
+namespace Altinn.Studio.DataModeling.Converter.Csharp
{
public static class Compiler
{
@@ -42,13 +42,10 @@ public static Assembly CompileToAssembly(string csharpCode)
errors.AppendLine($"{diagnostic.Id}: {diagnostic.GetMessage()}");
}
- throw new Exception($"Uh dude, you seem to have provoked some compilation errors with your code change. Please fix before merging! {errors}");
- }
- else
- {
- ms.Seek(0, SeekOrigin.Begin);
- assembly = Assembly.Load(ms.ToArray());
+ throw new CsharpGenerationException($"// Compiler // CompileToAssembly // Csharp compilation failed with errors: {errors}");
}
+ ms.Seek(0, SeekOrigin.Begin);
+ assembly = Assembly.Load(ms.ToArray());
}
return assembly;
diff --git a/backend/src/DataModeling/Converter/Csharp/JsonMetadataToCsharpConverter.cs b/backend/src/DataModeling/Converter/Csharp/JsonMetadataToCsharpConverter.cs
index adcd073adfc..6d9fb6b5e59 100644
--- a/backend/src/DataModeling/Converter/Csharp/JsonMetadataToCsharpConverter.cs
+++ b/backend/src/DataModeling/Converter/Csharp/JsonMetadataToCsharpConverter.cs
@@ -1,6 +1,8 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
+using System.Reflection;
using System.Text;
using Altinn.Studio.DataModeling.Converter.Interfaces;
using Altinn.Studio.DataModeling.Metamodel;
@@ -21,6 +23,11 @@ public JsonMetadataToCsharpConverter(CSharpGenerationSettings generationSettings
private string Indent(int level = 1) => new string(' ', level * _generationSettings.IndentSize);
+ public void TryGenerateCsharpClass(string csharpClass)
+ {
+ Compiler.CompileToAssembly(csharpClass);
+ }
+
///
/// Create Model from ServiceMetadata object
///
@@ -28,15 +35,15 @@ public JsonMetadataToCsharpConverter(CSharpGenerationSettings generationSettings
/// The model code in C#
public string CreateModelFromMetadata(ModelMetadata serviceMetadata)
{
- Dictionary classes = new Dictionary();
+ Dictionary classes = new ();
CreateModelFromMetadataRecursive(classes, serviceMetadata.Elements.Values.First(el => el.ParentElement == null), serviceMetadata, serviceMetadata.TargetNamespace);
StringBuilder writer = new StringBuilder()
- .AppendLine("using System;")
.AppendLine("using System.Collections.Generic;")
.AppendLine("using System.ComponentModel.DataAnnotations;")
.AppendLine("using System.Linq;")
+ .AppendLine("using System.Runtime;")
.AppendLine("using System.Text.Json.Serialization;")
.AppendLine("using System.Threading.Tasks;")
.AppendLine("using System.Xml.Serialization;")
diff --git a/backend/src/DataModeling/Converter/Interfaces/IModelMetadataToCsharpConverter.cs b/backend/src/DataModeling/Converter/Interfaces/IModelMetadataToCsharpConverter.cs
index a6a05a48c6e..117ce64a1de 100644
--- a/backend/src/DataModeling/Converter/Interfaces/IModelMetadataToCsharpConverter.cs
+++ b/backend/src/DataModeling/Converter/Interfaces/IModelMetadataToCsharpConverter.cs
@@ -10,5 +10,12 @@ public interface IModelMetadataToCsharpConverter
/// ServiceMetadata object
/// The model code in C#
public string CreateModelFromMetadata(ModelMetadata serviceMetadata);
+
+ ///
+ /// Try to generate csharp class from generated string from metadata
+ ///
+ /// Csharp class as string
+ /// Boolean indicator of successful generation
+ public void TryGenerateCsharpClass(string csharpClass);
}
}
diff --git a/backend/src/DataModeling/DataModeling.csproj b/backend/src/DataModeling/DataModeling.csproj
index 80edb2d0c7b..39246e57532 100644
--- a/backend/src/DataModeling/DataModeling.csproj
+++ b/backend/src/DataModeling/DataModeling.csproj
@@ -25,8 +25,12 @@
+
+
+
+
diff --git a/backend/src/Designer/Designer.csproj b/backend/src/Designer/Designer.csproj
index 1f61df57f6e..7c561280a3f 100644
--- a/backend/src/Designer/Designer.csproj
+++ b/backend/src/Designer/Designer.csproj
@@ -41,7 +41,6 @@
-
diff --git a/backend/src/Designer/Services/Implementation/SchemaModelService.cs b/backend/src/Designer/Services/Implementation/SchemaModelService.cs
index 4ca30bfbf3b..5e4ae682651 100644
--- a/backend/src/Designer/Services/Implementation/SchemaModelService.cs
+++ b/backend/src/Designer/Services/Implementation/SchemaModelService.cs
@@ -10,6 +10,7 @@
using System.Xml.Schema;
using Altinn.App.Core.Models;
using Altinn.Platform.Storage.Interface.Models;
+using Altinn.Studio.DataModeling.Converter.Csharp;
using Altinn.Studio.DataModeling.Converter.Interfaces;
using Altinn.Studio.DataModeling.Converter.Json.Strategy;
using Altinn.Studio.DataModeling.Converter.Metadata;
@@ -285,8 +286,9 @@ private Json.Schema.JsonSchema GenerateJsonSchemaFromXsd(Stream xsdStream)
private async Task UpdateCSharpClasses(AltinnAppGitRepository altinnAppGitRepository, ModelMetadata modelMetadata, string schemaName)
{
- string classes = _modelMetadataToCsharpConverter.CreateModelFromMetadata(modelMetadata);
- await altinnAppGitRepository.SaveCSharpClasses(classes, schemaName);
+ string csharpClasses = _modelMetadataToCsharpConverter.CreateModelFromMetadata(modelMetadata);
+ _modelMetadataToCsharpConverter.TryGenerateCsharpClass(csharpClasses);
+ await altinnAppGitRepository.SaveCSharpClasses(csharpClasses, schemaName);
}
private static async Task UpdateApplicationMetadata(AltinnAppGitRepository altinnAppGitRepository, string schemaName, string typeName)
diff --git a/backend/tests/Designer.Tests/Designer.Tests.csproj b/backend/tests/Designer.Tests/Designer.Tests.csproj
index ac46b6af8fb..97b59ad8229 100644
--- a/backend/tests/Designer.Tests/Designer.Tests.csproj
+++ b/backend/tests/Designer.Tests/Designer.Tests.csproj
@@ -24,7 +24,6 @@
-
all
diff --git a/backend/tests/SharedResources.Tests/SharedResources.Tests.csproj b/backend/tests/SharedResources.Tests/SharedResources.Tests.csproj
index d577bf39e30..a2f703de4be 100644
--- a/backend/tests/SharedResources.Tests/SharedResources.Tests.csproj
+++ b/backend/tests/SharedResources.Tests/SharedResources.Tests.csproj
@@ -36,10 +36,8 @@
-
-