@@ -25,8 +25,10 @@ public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig
25
25
@ SuppressWarnings ({ "unused" , "hiding" })
26
26
private static final Logger LOGGER = LoggerFactory .getLogger (CSharpClientCodegen .class );
27
27
protected boolean optionalAssemblyInfoFlag = true ;
28
+ protected boolean optionalProjectFileFlag = false ;
28
29
protected boolean optionalMethodArgumentFlag = true ;
29
30
protected boolean useDateTimeOffsetFlag = false ;
31
+ protected String packageGuid = "{" + java .util .UUID .randomUUID ().toString ().toUpperCase () + "}" ;
30
32
protected String packageTitle = "Swagger Library" ;
31
33
protected String packageProductName = "SwaggerLibrary" ;
32
34
protected String packageDescription = "A library generated from a Swagger doc" ;
@@ -120,6 +122,9 @@ public CSharpClientCodegen() {
120
122
CodegenConstants .OPTIONAL_ASSEMBLY_INFO_DESC ).defaultValue (Boolean .TRUE .toString ()));
121
123
cliOptions .add (new CliOption (CodegenConstants .SOURCE_FOLDER , CodegenConstants .SOURCE_FOLDER_DESC ).defaultValue (sourceFolder ));
122
124
cliOptions .add (CliOption .newBoolean (CodegenConstants .USE_DATETIME_OFFSET , CodegenConstants .USE_DATETIME_OFFSET_DESC ));
125
+ cliOptions .add (CliOption .newBoolean (CodegenConstants .OPTIONAL_PROJECT_FILE ,
126
+ CodegenConstants .OPTIONAL_PROJECT_FILE_DESC ).defaultValue (Boolean .FALSE .toString ()));
127
+ cliOptions .add (new CliOption (CodegenConstants .OPTIONAL_PROJECT_GUID , CodegenConstants .OPTIONAL_PROJECT_GUID_DESC ));
123
128
}
124
129
125
130
@ Override
@@ -164,7 +169,19 @@ public void processOpts() {
164
169
additionalProperties .put ("packageDescription" , packageDescription );
165
170
additionalProperties .put ("packageCompany" , packageCompany );
166
171
additionalProperties .put ("packageCopyright" , packageCopyright );
167
-
172
+
173
+ if (additionalProperties .containsKey (CodegenConstants .OPTIONAL_PROJECT_FILE ))
174
+ {
175
+ setOptionalProjectFileFlag (Boolean .valueOf (
176
+ additionalProperties .get (CodegenConstants .OPTIONAL_PROJECT_FILE ).toString ()));
177
+ }
178
+
179
+ if (additionalProperties .containsKey (CodegenConstants .OPTIONAL_PROJECT_GUID ))
180
+ {
181
+ setPackageGuid ((String ) additionalProperties .get (CodegenConstants .OPTIONAL_PROJECT_GUID ));
182
+ }
183
+ additionalProperties .put ("packageGuid" , packageGuid );
184
+
168
185
if (additionalProperties .containsKey (CodegenConstants .OPTIONAL_METHOD_ARGUMENT )) {
169
186
setOptionalMethodArgumentFlag (Boolean .valueOf (additionalProperties
170
187
.get (CodegenConstants .OPTIONAL_METHOD_ARGUMENT ).toString ()));
@@ -175,15 +192,28 @@ public void processOpts() {
175
192
setOptionalAssemblyInfoFlag (Boolean .valueOf (additionalProperties
176
193
.get (CodegenConstants .OPTIONAL_ASSEMBLY_INFO ).toString ()));
177
194
}
178
-
195
+
196
+ String packageFolder = sourceFolder + File .separator + packageName .replace ("." , java .io .File .separator );
197
+ String clientPackageDir = sourceFolder + File .separator + clientPackage .replace ("." , java .io .File .separator );
198
+
199
+ //Compute the relative path to the bin directory where the external assemblies live
200
+ //This is necessary to properly generate the project file
201
+ int packageDepth = packageFolder .length () - packageFolder .replace (java .io .File .separator , "" ).length ();
202
+ String binRelativePath = "..\\ " ;
203
+ for (int i =0 ; i < packageDepth ; i = i +1 )
204
+ binRelativePath += "..\\ " ;
205
+ binRelativePath += "bin\\ " ;
206
+ additionalProperties .put ("binRelativePath" , binRelativePath );
207
+
179
208
supportingFiles .add (new SupportingFile ("Configuration.mustache" ,
180
- sourceFolder + File . separator + clientPackage . replace ( "." , java . io . File . separator ) , "Configuration.cs" ));
209
+ clientPackageDir , "Configuration.cs" ));
181
210
supportingFiles .add (new SupportingFile ("ApiClient.mustache" ,
182
- sourceFolder + File . separator + clientPackage . replace ( "." , java . io . File . separator ) , "ApiClient.cs" ));
211
+ clientPackageDir , "ApiClient.cs" ));
183
212
supportingFiles .add (new SupportingFile ("ApiException.mustache" ,
184
- sourceFolder + File . separator + clientPackage . replace ( "." , java . io . File . separator ) , "ApiException.cs" ));
213
+ clientPackageDir , "ApiException.cs" ));
185
214
supportingFiles .add (new SupportingFile ("ApiResponse.mustache" ,
186
- sourceFolder + File .separator + clientPackage .replace ("." , java .io .File .separator ), "ApiResponse.cs" ));
215
+ clientPackageDir , "ApiResponse.cs" ));
216
+
187
217
supportingFiles .add (new SupportingFile ("Newtonsoft.Json.dll" , "bin" , "Newtonsoft.Json.dll" ));
188
218
supportingFiles .add (new SupportingFile ("RestSharp.dll" , "bin" , "RestSharp.dll" ));
189
219
supportingFiles .add (new SupportingFile ("compile.mustache" , "" , "compile.bat" ));
@@ -192,9 +222,11 @@ public void processOpts() {
192
222
supportingFiles .add (new SupportingFile ("README.md" , "" , "README.md" ));
193
223
194
224
if (optionalAssemblyInfoFlag ) {
195
- supportingFiles .add (new SupportingFile ("AssemblyInfo.mustache" , "src" + File .separator + "Properties" , "AssemblyInfo.cs" ));
225
+ supportingFiles .add (new SupportingFile ("AssemblyInfo.mustache" , packageFolder + File .separator + "Properties" , "AssemblyInfo.cs" ));
226
+ }
227
+ if (optionalProjectFileFlag ) {
228
+ supportingFiles .add (new SupportingFile ("Project.mustache" , packageFolder , clientPackage + ".csproj" ));
196
229
}
197
-
198
230
}
199
231
200
232
@ Override
@@ -339,6 +371,10 @@ public void setOptionalAssemblyInfoFlag(boolean flag) {
339
371
this .optionalAssemblyInfoFlag = flag ;
340
372
}
341
373
374
+ public void setOptionalProjectFileFlag (boolean flag ) {
375
+ this .optionalProjectFileFlag = flag ;
376
+ }
377
+
342
378
public void setOptionalMethodArgumentFlag (boolean flag ) {
343
379
this .optionalMethodArgumentFlag = flag ;
344
380
}
@@ -351,7 +387,10 @@ public void useDateTimeOffset(boolean flag) {
351
387
typeMapping .put ("datetime" , "DateTime?" );
352
388
}
353
389
354
-
390
+ public void setPackageGuid (String packageGuid ) {
391
+ this .packageGuid = packageGuid ;
392
+ }
393
+
355
394
public void setPackageName (String packageName ) {
356
395
this .packageName = packageName ;
357
396
}
0 commit comments