public static void setAssemblyVersionInProperties(
      String destDir, String version, String svnRevision) throws IOException {
    if (!destDir.endsWith(File.separator)) destDir += File.separator;

    String filename = destDir + "Properties" + File.separator + "AssemblyInfo.cs";
    List<String> assemblyInfoContents = TextFile.readAllLines(filename + ".template");
    List<String> outputLines = replaceAssemblyVersion(assemblyInfoContents, version, svnRevision);
    TextFile.writeAllLines(filename, outputLines);
  }
  public static void build(String destDir, List<String> cSharpProjectFiles) throws IOException {
    if (!destDir.endsWith(File.separator)) destDir += File.separator;

    // Generate "normal" VS2012 .NET project
    List<String> templateContents = TextFile.readAllLines(destDir + "Hl7.Fhir.csproj.template");
    List<String> itemGroup = buildItemGroupContents(cSharpProjectFiles);
    List<String> outputLines = replaceTemplateVar(templateContents, "@@@MODELFILES@@@", itemGroup);
    TextFile.writeAllLines(destDir + "Hl7.Fhir.csproj", outputLines);

    // Generate Portable40 project (profile 147)
    templateContents = TextFile.readAllLines(destDir + "Hl7.Fhir.Portable40.csproj.template");
    outputLines = replaceTemplateVar(templateContents, "@@@MODELFILES@@@", itemGroup);
    TextFile.writeAllLines(destDir + "Hl7.Fhir.Portable40.csproj", outputLines);

    // Generate Portable45 project (profile 78)
    templateContents = TextFile.readAllLines(destDir + "Hl7.Fhir.Portable45.csproj.template");
    outputLines = replaceTemplateVar(templateContents, "@@@MODELFILES@@@", itemGroup);
    TextFile.writeAllLines(destDir + "Hl7.Fhir.Portable45.csproj", outputLines);
  }