diff --git a/Svrnty.CQRS.Grpc.Generators/WriteProtoFileTask.cs b/Svrnty.CQRS.Grpc.Generators/WriteProtoFileTask.cs
index 70788ba..455999b 100644
--- a/Svrnty.CQRS.Grpc.Generators/WriteProtoFileTask.cs
+++ b/Svrnty.CQRS.Grpc.Generators/WriteProtoFileTask.cs
@@ -39,6 +39,16 @@ public class WriteProtoFileTask : Task
[Required]
public string ProtoFileName { get; set; } = string.Empty;
+ ///
+ /// The root namespace of the project (optional, falls back to AssemblyName)
+ ///
+ public string RootNamespace { get; set; } = string.Empty;
+
+ ///
+ /// The assembly name of the project (used for proto namespace if RootNamespace not set)
+ ///
+ public string AssemblyName { get; set; } = string.Empty;
+
public override bool Execute()
{
try
@@ -65,13 +75,20 @@ public class WriteProtoFileTask : Task
// Write a minimal placeholder proto file so Grpc.Tools doesn't fail
// The real content will be generated on the next build
- var placeholderProto = @"syntax = ""proto3"";
+ // Use project's namespace so GrpcGenerator can find the service base types
+ var projectNamespace = !string.IsNullOrEmpty(RootNamespace) ? RootNamespace
+ : !string.IsNullOrEmpty(AssemblyName) ? AssemblyName
+ : "Generated";
+ var grpcNamespace = $"{projectNamespace}.Grpc";
-option csharp_namespace = ""Generated.Grpc"";
+ var placeholderProto = $@"syntax = ""proto3"";
+
+option csharp_namespace = ""{grpcNamespace}"";
package cqrs;
// Placeholder proto file - will be regenerated on next build
+// Using namespace: {grpcNamespace}
";
var placeholderOutputPath = Path.Combine(ProjectDirectory, OutputDirectory);
Directory.CreateDirectory(placeholderOutputPath);
diff --git a/Svrnty.CQRS.Grpc.Generators/build/Svrnty.CQRS.Grpc.Generators.targets b/Svrnty.CQRS.Grpc.Generators/build/Svrnty.CQRS.Grpc.Generators.targets
index e31cc0b..e4584c1 100644
--- a/Svrnty.CQRS.Grpc.Generators/build/Svrnty.CQRS.Grpc.Generators.targets
+++ b/Svrnty.CQRS.Grpc.Generators/build/Svrnty.CQRS.Grpc.Generators.targets
@@ -32,6 +32,8 @@
ProjectDirectory="$(MSBuildProjectDirectory)"
IntermediateOutputPath="$(IntermediateOutputPath)"
OutputDirectory="$(ProtoOutputDirectory)"
- ProtoFileName="$(GeneratedProtoFileName)" />
+ ProtoFileName="$(GeneratedProtoFileName)"
+ RootNamespace="$(RootNamespace)"
+ AssemblyName="$(AssemblyName)" />