diff --git a/src/ProtoGen.Test/TestPreprocessing.cs b/src/ProtoGen.Test/TestPreprocessing.cs index 81b88a3a68..188f26dd0b 100644 --- a/src/ProtoGen.Test/TestPreprocessing.cs +++ b/src/ProtoGen.Test/TestPreprocessing.cs @@ -567,7 +567,7 @@ message MyMessage { } //Seems the --proto_path or -I option is non-functional for me. Maybe others have luck? - [Test, Ignore("http://code.google.com/p/protobuf/issues/detail?id=40")] + [Test] public void TestProtoFileInDifferentDirectory() { string test = new StackFrame(false).GetMethod().Name; diff --git a/src/ProtoGen/ProgramPreprocess.cs b/src/ProtoGen/ProgramPreprocess.cs index 011035eb46..110bdff034 100644 --- a/src/ProtoGen/ProgramPreprocess.cs +++ b/src/ProtoGen/ProgramPreprocess.cs @@ -84,6 +84,15 @@ namespace Google.ProtocolBuffers.ProtoGen return 0; } + string pathRoot = Environment.CurrentDirectory; + foreach(string arg in args) + { + if (arg.StartsWith("--proto_path=", StringComparison.InvariantCultureIgnoreCase)) + { + pathRoot = arg.Substring(13); + } + } + foreach (string arg in args) { if (arg.StartsWith(ProtocDirectoryArg)) @@ -95,7 +104,7 @@ namespace Google.ProtocolBuffers.ProtoGen { protocArgs.Add(arg); } - else if (File.Exists(arg) && + else if ((File.Exists(arg) || File.Exists(Path.Combine(pathRoot, arg))) && StringComparer.OrdinalIgnoreCase.Equals(".proto", Path.GetExtension(arg))) { if (tempFile == null) @@ -105,7 +114,13 @@ namespace Google.ProtocolBuffers.ProtoGen protocArgs.Add(String.Format("--descriptor_set_out={0}", tempFile)); protoGenArgs.Add(tempFile); } - protocArgs.Add(arg); + string patharg = arg; + if (!File.Exists(patharg)) + { + patharg = Path.Combine(pathRoot, arg); + } + + protocArgs.Add(patharg); } else {