Problems calling external C# application from makefile

David Cowan <[email protected]>
Newsgroups gmane.comp.gnu.utils
Organization Newshosting.com - Highest quality at a great price! www.newshosting.com
Message-ID <[email protected]>
I have a small C# application that I want to call from a makefile.  The 
application runs correctly when run from a batch file, and when run from 
a Windows XP command line.
However, when attempting to call the application from within a makefile 
- the application fails.

Now - this is probably down to something I'm doing somewhere in either 
the makefile or the C# app - but I'm damned if I can spot it.

I've tried running "make -n > test.bat" and running the .bat file by 
hand - and it works fine.   Running the C# app directly from the 
makefile fails.

The C# code is fairly simple... it just uses class serialization to load 
an XML file.


> static public bool LoadConfigFile(string inFilename, ref InputConfigurations outConfig)
>         {
>             XmlSerializer s = null;
>             TextReader r = null;
> 
>             try
>             {
>                 s = new XmlSerializer(typeof(InputConfigurations));
>             }
>             catch( Exception e )
>             {
>                 Console.WriteLine(e.Message + "\n" + e.Source + "\n" + e.ToString());
>                 Console.WriteLine( "Error -- unable to create serialization for '" + outConfig.ToString() + "'" );
> 
>                 return false;
>             }
> 
>             try {
>                 r = new StreamReader(inFilename);
>                 outConfig = (InputConfigurations)s.Deserialize(r);
>                 r.Close();
>             }
>             catch( Exception e )
>             {
>                 Console.WriteLine(e.Message + "\n" + e.Source + "\n" + e.ToString());
>                 Console.WriteLine("Error -- unable to serialize input file '" + inFilename + "'");
> 
>                 if (r != null)
>                     r.Close();
> 
>                 return false;
>             }
> 
>             return true;
>         }


Nothing particularly special - it all just works fine outside of make.

However - running the C# exe from within make results in the following 
error...


> Item has already been added. Key in dictionary: 'path'  Key being added: 'path'
> mscorlib
> System.ArgumentException: Item has already been added. Key in dictionary: 'path'  Key being added: 'path'
>    at System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
>    at System.Collections.Hashtable.Add(Object key, Object value)
>    at System.Collections.Specialized.StringDictionary.Add(String key, String value)
>    at System.CodeDom.Compiler.Executor.ExecWaitWithCaptureUnimpersonated(SafeUserTokenHandle userToken, String cmd, Stri
> ng currentDir, TempFileCollection tempFiles, String& outputName, String& errorName, String trueCmdLine)
>    at System.CodeDom.Compiler.Executor.ExecWaitWithCapture(SafeUserTokenHandle userToken, String cmd, String currentDir,
>  TempFileCollection tempFiles, String& outputName, String& errorName, String trueCmdLine)
>    at Microsoft.CSharp.CSharpCodeGenerator.Compile(CompilerParameters options, String compilerDirectory, String compiler
> Exe, String arguments, String& outputFile, Int32& nativeReturnValue, String trueArgs)
>    at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames)
>    at Microsoft.CSharp.CSharpCodeGenerator.FromSourceBatch(CompilerParameters options, String[] sources)
>    at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromSourceBatch(Compiler
> Parameters options, String[] sources)
>    at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromSource(CompilerParameters options, String[] sources)
>    at System.Xml.Serialization.Compiler.Compile(Assembly parent, String ns, XmlSerializerCompilerParameters xmlParameter
> s, Evidence evidence)
>    at System.Xml.Serialization.TempAssembly.GenerateAssembly(XmlMapping[] xmlMappings, Type[] types, String defaultNames
> pace, Evidence evidence, XmlSerializerCompilerParameters parameters, Assembly assembly, Hashtable assemblies)
>    at System.Xml.Serialization.TempAssembly..ctor(XmlMapping[] xmlMappings, Type[] types, String defaultNamespace, Strin
> g location, Evidence evidence)
>    at System.Xml.Serialization.XmlSerializer.GenerateTempAssembly(XmlMapping xmlMapping, Type type, String defaultNamesp
> ace)
>    at System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultNamespace)
>    at System.Xml.Serialization.XmlSerializer..ctor(Type type)
>    at genVCProj.InputConfigurations.LoadConfigFile(String inFilename, InputConfigurations& outConfig)
> Error -- unable to create serialization for 'genVCProj.InputConfigurations'
> make: error: *** [genvcproj] Error -1




I'm running make 3.80, and I'm using Windows XP (SP2).  I'm running from 
an XP DOS Cmdline.

Is there any difference in the executable environment set up by make?

Thanks in advance.

Dave
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.