diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java
index 4a4f9e037ef..f964ebfd1c4 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/CodegenConstants.java
@@ -62,4 +62,10 @@ public class CodegenConstants {
public static final String OPTIONAL_ASSEMBLY_INFO = "optionalAssemblyInfo";
public static final String OPTIONAL_ASSEMBLY_INFO_DESC = "Generate AssemblyInfo.cs (Default: true).";
+ public static final String OPTIONAL_PROJECT_FILE = "optionalProjectFile";
+ public static final String OPTIONAL_PROJECT_FILE_DESC = "Generate {PackageName}.csproj (Default: false).";
+
+ public static final String OPTIONAL_PROJECT_GUID = "packageGuid";
+ public static final String OPTIONAL_PROJECT_GUID_DESC = "The GUID that will be associated with the C# project";
+
}
diff --git a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java
index 23c266e618f..3895e0e462a 100644
--- a/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java
+++ b/modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/CSharpClientCodegen.java
@@ -24,8 +24,10 @@
public class CSharpClientCodegen extends DefaultCodegen implements CodegenConfig {
private static final Logger LOGGER = LoggerFactory.getLogger(CSharpClientCodegen.class);
protected boolean optionalAssemblyInfoFlag = true;
+ protected boolean optionalProjectFileFlag = false;
protected boolean optionalMethodArgumentFlag = true;
protected boolean useDateTimeOffsetFlag = false;
+ protected String packageGuid = "{" + java.util.UUID.randomUUID().toString().toUpperCase() + "}";
protected String packageTitle = "Swagger Library";
protected String packageProductName = "SwaggerLibrary";
protected String packageDescription = "A library generated from a Swagger doc";
@@ -119,6 +121,9 @@ public CSharpClientCodegen() {
CodegenConstants.OPTIONAL_ASSEMBLY_INFO_DESC).defaultValue(Boolean.TRUE.toString()));
cliOptions.add(new CliOption(CodegenConstants.SOURCE_FOLDER, CodegenConstants.SOURCE_FOLDER_DESC).defaultValue(sourceFolder));
cliOptions.add(CliOption.newBoolean(CodegenConstants.USE_DATETIME_OFFSET, CodegenConstants.USE_DATETIME_OFFSET_DESC));
+ cliOptions.add(CliOption.newBoolean(CodegenConstants.OPTIONAL_PROJECT_FILE,
+ CodegenConstants.OPTIONAL_PROJECT_FILE_DESC).defaultValue(Boolean.FALSE.toString()));
+ cliOptions.add(new CliOption(CodegenConstants.OPTIONAL_PROJECT_GUID, CodegenConstants.OPTIONAL_PROJECT_GUID_DESC));
}
@Override
@@ -163,7 +168,19 @@ public void processOpts() {
additionalProperties.put("packageDescription", packageDescription);
additionalProperties.put("packageCompany", packageCompany);
additionalProperties.put("packageCopyright", packageCopyright);
-
+
+ if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_FILE))
+ {
+ setOptionalProjectFileFlag(Boolean.valueOf(
+ additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_FILE).toString()));
+ }
+
+ if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_PROJECT_GUID))
+ {
+ setPackageGuid((String) additionalProperties.get(CodegenConstants.OPTIONAL_PROJECT_GUID));
+ }
+ additionalProperties.put("packageGuid", packageGuid);
+
if (additionalProperties.containsKey(CodegenConstants.OPTIONAL_METHOD_ARGUMENT)) {
setOptionalMethodArgumentFlag(Boolean.valueOf(additionalProperties
.get(CodegenConstants.OPTIONAL_METHOD_ARGUMENT).toString()));
@@ -174,15 +191,28 @@ public void processOpts() {
setOptionalAssemblyInfoFlag(Boolean.valueOf(additionalProperties
.get(CodegenConstants.OPTIONAL_ASSEMBLY_INFO).toString()));
}
-
+
+ String packageFolder = sourceFolder + File.separator + packageName.replace(".", java.io.File.separator);
+ String clientPackageDir = sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator);
+
+ //Compute the relative path to the bin directory where the external assemblies live
+ //This is necessary to properly generate the project file
+ int packageDepth = packageFolder.length() - packageFolder.replace(java.io.File.separator, "").length();
+ String binRelativePath = "..\\";
+ for (int i=0; i < packageDepth; i = i+1)
+ binRelativePath += "..\\";
+ binRelativePath += "bin\\";
+ additionalProperties.put("binRelativePath", binRelativePath);
+
supportingFiles.add(new SupportingFile("Configuration.mustache",
- sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "Configuration.cs"));
+ clientPackageDir, "Configuration.cs"));
supportingFiles.add(new SupportingFile("ApiClient.mustache",
- sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "ApiClient.cs"));
+ clientPackageDir, "ApiClient.cs"));
supportingFiles.add(new SupportingFile("ApiException.mustache",
- sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "ApiException.cs"));
+ clientPackageDir, "ApiException.cs"));
supportingFiles.add(new SupportingFile("ApiResponse.mustache",
- sourceFolder + File.separator + clientPackage.replace(".", java.io.File.separator), "ApiResponse.cs"));
+ clientPackageDir, "ApiResponse.cs"));
+
supportingFiles.add(new SupportingFile("Newtonsoft.Json.dll", "bin", "Newtonsoft.Json.dll"));
supportingFiles.add(new SupportingFile("RestSharp.dll", "bin", "RestSharp.dll"));
supportingFiles.add(new SupportingFile("compile.mustache", "", "compile.bat"));
@@ -191,9 +221,11 @@ public void processOpts() {
supportingFiles.add(new SupportingFile("README.md", "", "README.md"));
if (optionalAssemblyInfoFlag) {
- supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", "src" + File.separator + "Properties", "AssemblyInfo.cs"));
+ supportingFiles.add(new SupportingFile("AssemblyInfo.mustache", packageFolder + File.separator + "Properties", "AssemblyInfo.cs"));
+ }
+ if (optionalProjectFileFlag) {
+ supportingFiles.add(new SupportingFile("Project.mustache", packageFolder, clientPackage + ".csproj"));
}
-
}
@Override
@@ -338,6 +370,10 @@ public void setOptionalAssemblyInfoFlag(boolean flag) {
this.optionalAssemblyInfoFlag = flag;
}
+ public void setOptionalProjectFileFlag(boolean flag) {
+ this.optionalProjectFileFlag = flag;
+ }
+
public void setOptionalMethodArgumentFlag(boolean flag) {
this.optionalMethodArgumentFlag = flag;
}
@@ -350,7 +386,10 @@ public void useDateTimeOffset(boolean flag) {
typeMapping.put("datetime", "DateTime?");
}
-
+ public void setPackageGuid(String packageGuid) {
+ this.packageGuid = packageGuid;
+ }
+
public void setPackageName(String packageName) {
this.packageName = packageName;
}
diff --git a/modules/swagger-codegen/src/main/resources/csharp/Project.mustache b/modules/swagger-codegen/src/main/resources/csharp/Project.mustache
new file mode 100644
index 00000000000..333cb5088ff
--- /dev/null
+++ b/modules/swagger-codegen/src/main/resources/csharp/Project.mustache
@@ -0,0 +1,58 @@
+
+
+
+ Debug
+ AnyCPU
+ {{packageGuid}}
+ Library
+ Properties
+ {{packageTitle}}
+ {{packageTitle}}
+ v4.5
+ 512
+
+
+ true
+ full
+ false
+ bin\Debug\
+ DEBUG;TRACE
+ prompt
+ 4
+
+
+ pdbonly
+ true
+ bin\Release\
+ TRACE
+ prompt
+ 4
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+ {{binRelativePath}}Newtonsoft.Json.dll
+
+
+ {{binRelativePath}}RestSharp.dll
+
+
+
+
+
+
+
+
+
+
+
diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java
index 367977e2b05..7b1695f911f 100644
--- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java
+++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/csharp/CSharpClientOptionsTest.java
@@ -37,6 +37,10 @@ protected void setExpectations() {
times = 1;
clientCodegen.useDateTimeOffset(true);
times = 1;
+ clientCodegen.setOptionalProjectFileFlag(true);
+ times = 1;
+ clientCodegen.setPackageGuid(CSharpClientOptionsProvider.PACKAGE_GUID_VALUE);
+ times = 1;
}};
}
}
diff --git a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java
index 0c2da1f3fa2..eb187848aa6 100644
--- a/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java
+++ b/modules/swagger-codegen/src/test/java/io/swagger/codegen/options/CSharpClientOptionsProvider.java
@@ -10,6 +10,7 @@ public class CSharpClientOptionsProvider implements OptionsProvider {
public static final String PACKAGE_NAME_VALUE = "swagger_client_csharp";
public static final String PACKAGE_VERSION_VALUE = "1.0.0-SNAPSHOT";
public static final String SOURCE_FOLDER_VALUE = "src_csharp";
+ public static final String PACKAGE_GUID_VALUE = "{894EAEBB-649A-498C-A735-10D0BD7B73E0}";
@Override
public String getLanguage() {
@@ -26,6 +27,8 @@ public Map createOptions() {
.put(CodegenConstants.OPTIONAL_ASSEMBLY_INFO, "true")
.put(CodegenConstants.USE_DATETIME_OFFSET, "true")
.put(CodegenConstants.SOURCE_FOLDER, SOURCE_FOLDER_VALUE)
+ .put(CodegenConstants.OPTIONAL_PROJECT_FILE, "true")
+ .put(CodegenConstants.OPTIONAL_PROJECT_GUID, PACKAGE_GUID_VALUE)
.build();
}