@@ -50,22 +50,21 @@ private static void GenerateAnalyzerConfig(IEnumerable<string> cshtmls, string a
50
50
51
51
public IEnumerable < string > GenerateFiles ( IEnumerable < string > cshtmls , IEnumerable < string > references , string workingDirectory )
52
52
{
53
- // TODO: the below command might be too long. It should be written to a temp file and passed to csc via @.
54
-
55
53
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" ) ;
58
58
var outputFolder = Path . Combine ( workingDirectory , name ) ;
59
59
Directory . CreateDirectory ( outputFolder ) ;
60
60
61
61
try
62
62
{
63
- GenerateAnalyzerConfig ( cshtmls , Path . Combine ( sourceGeneratorFolder , analyzerConfig ) ) ;
63
+ GenerateAnalyzerConfig ( cshtmls , analyzerConfig ) ;
64
64
65
65
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 } \" ") ;
67
67
68
- // TODO: quote paths:
69
68
foreach ( var f in Directory . GetFiles ( sourceGeneratorFolder , "*.dll" ) )
70
69
{
71
70
args . Append ( $ "/analyzer:\" { f } \" ") ;
@@ -81,14 +80,24 @@ public IEnumerable<string> GenerateFiles(IEnumerable<string> cshtmls, IEnumerabl
81
80
args . Append ( $ "/reference:\" { f } \" ") ;
82
81
}
83
82
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 } \" ") ;
85
93
86
94
return Directory . GetFiles ( outputFolder , "*.*" , new EnumerationOptions { RecurseSubdirectories = true } ) ;
87
95
}
88
96
finally
89
97
{
90
98
DeleteFile ( analyzerConfig ) ;
91
99
DeleteFile ( dllPath ) ;
100
+ DeleteFile ( cscArgsPath ) ;
92
101
}
93
102
}
94
103
0 commit comments