@@ -50,22 +50,21 @@ private static void GenerateAnalyzerConfig(IEnumerable<string> cshtmls, string a
5050
5151 public IEnumerable < string > GenerateFiles ( IEnumerable < string > cshtmls , IEnumerable < string > references , string workingDirectory )
5252 {
53- // TODO: the below command might be too long. It should be written to a temp file and passed to csc via @.
54-
5553 var name = Guid . NewGuid ( ) . ToString ( "N" ) . ToUpper ( ) ;
56- var analyzerConfig = Path . Combine ( Path . GetTempPath ( ) , name + ".txt" ) ;
57- var dllPath = Path . Combine ( Path . GetTempPath ( ) , name + ".dll" ) ;
54+ var tempPath = Path . GetTempPath ( ) ;
55+ var analyzerConfig = Path . Combine ( tempPath , name + ".txt" ) ;
56+ var dllPath = Path . Combine ( tempPath , name + ".dll" ) ;
57+ var cscArgsPath = Path . Combine ( tempPath , name + ".rsp" ) ;
5858 var outputFolder = Path . Combine ( workingDirectory , name ) ;
5959 Directory . CreateDirectory ( outputFolder ) ;
6060
6161 try
6262 {
63- GenerateAnalyzerConfig ( cshtmls , Path . Combine ( sourceGeneratorFolder , analyzerConfig ) ) ;
63+ GenerateAnalyzerConfig ( cshtmls , analyzerConfig ) ;
6464
6565 var args = new StringBuilder ( ) ;
66- args . Append ( $ "\" { cscPath } \" /target:exe /generatedfilesout:\" { outputFolder } \" /out:\" { dllPath } \" /analyzerconfig:\" { analyzerConfig } \" ") ;
66+ args . Append ( $ "/target:exe /generatedfilesout:\" { outputFolder } \" /out:\" { dllPath } \" /analyzerconfig:\" { analyzerConfig } \" ") ;
6767
68- // TODO: quote paths:
6968 foreach ( var f in Directory . GetFiles ( sourceGeneratorFolder , "*.dll" ) )
7069 {
7170 args . Append ( $ "/analyzer:\" { f } \" ") ;
@@ -81,14 +80,24 @@ public IEnumerable<string> GenerateFiles(IEnumerable<string> cshtmls, IEnumerabl
8180 args . Append ( $ "/reference:\" { f } \" ") ;
8281 }
8382
84- dotNet . Exec ( args . ToString ( ) ) ;
83+ var argsString = args . ToString ( ) ;
84+
85+ progressMonitor . RazorCscArgs ( argsString ) ;
86+
87+ using ( var sw = new StreamWriter ( cscArgsPath ) )
88+ {
89+ sw . Write ( argsString ) ;
90+ }
91+
92+ dotNet . Exec ( $ "\" { cscPath } \" /noconfig @\" { cscArgsPath } \" ") ;
8593
8694 return Directory . GetFiles ( outputFolder , "*.*" , new EnumerationOptions { RecurseSubdirectories = true } ) ;
8795 }
8896 finally
8997 {
9098 DeleteFile ( analyzerConfig ) ;
9199 DeleteFile ( dllPath ) ;
100+ DeleteFile ( cscArgsPath ) ;
92101 }
93102 }
94103
0 commit comments