diff --git a/servant-csharp.cabal b/servant-csharp.cabal
--- a/servant-csharp.cabal
+++ b/servant-csharp.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                servant-csharp
-version:             0.0.6.1
+version:             0.0.7.0
 synopsis:            Generate servant client library for C#
 description:         Generate servant client library for C#
 homepage:            https://github.com/cutsea110/servant-csharp.git
@@ -39,5 +39,7 @@
                      , servant-foreign >=0.7 && <0.8
                      , text >=1.2 && <1.3
                      , time >=1.5 && <1.6
+                     , uuid >=1.3 && <1.4
+                     , uuid-types >=1.0 && <1.1
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/CS.hs b/src/CS.hs
--- a/src/CS.hs
+++ b/src/CS.hs
@@ -1,4 +1,6 @@
-module CS ( classCsForAPI
+module CS ( genCsForAPI
+
+          , classCsForAPI
           , classCsForAPIWith
           , apiCsForAPI
           , apiCsForAPIWith
@@ -6,6 +8,10 @@
           , enumCsForAPIWith
           , converterCsForAPI
           , converterCsForAPIWith
+          , assemblyInfoCsForAPI
+          , assemblyInfoCsForAPIWith
+          , csprojForAPI
+          , csprojForAPIWith
 
           , GenerateCsConfig(..)
           , def
diff --git a/src/CS/JsonDotNet.hs b/src/CS/JsonDotNet.hs
--- a/src/CS/JsonDotNet.hs
+++ b/src/CS/JsonDotNet.hs
@@ -4,7 +4,9 @@
 {-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
-module CS.JsonDotNet ( classCsForAPI
+module CS.JsonDotNet ( genCsForAPI
+
+                     , classCsForAPI
                      , classCsForAPIWith
                      , apiCsForAPI
                      , apiCsForAPIWith
@@ -12,6 +14,10 @@
                      , enumCsForAPIWith
                      , converterCsForAPI
                      , converterCsForAPIWith
+                     , assemblyInfoCsForAPI
+                     , assemblyInfoCsForAPIWith
+                     , csprojForAPI
+                     , csprojForAPIWith
 
                      , GenerateCsConfig(..)
                      , def
@@ -28,14 +34,24 @@
 import Data.Monoid ((<>))
 import Data.Proxy
 import Data.Text as T (Text, unpack, pack)
+import Data.Time.Clock (UTCTime(..), getCurrentTime)
+import Data.Time.Calendar (toGregorian)
+import Data.UUID.Types (toString)
+import Data.UUID.V4 as UUID (nextRandom)
 import Language.Haskell.Exts
 import Servant.Foreign
+import System.Directory (createDirectoryIfMissing)
 import Text.Heredoc
 
 import CS.Common (CSharp, getEndpoints)
 
 data GenerateCsConfig
     = GenerateCsConfig { namespace :: String
+                       , outdir :: String
+                       , classCsName :: String
+                       , apiCsName :: String
+                       , enumCsName :: String
+                       , converterCsName :: String
                        , classtemplate :: GenerateCsConfig -> IO String
                        , apitemplate ::  forall api.
                                          (HasForeign CSharp Text api,
@@ -44,19 +60,44 @@
                                      -> Proxy api
                                      -> IO String
                        , enumtemplate :: GenerateCsConfig -> IO String
-                       , convtemplate :: GenerateCsConfig -> IO String
+                       , convertertemplate :: GenerateCsConfig -> IO String
+                       , assemblyinfotemplate :: GenerateCsConfig -> IO String
+                       , csprojtemplate :: GenerateCsConfig -> IO String
+                       , guid :: Maybe String
                        , sources :: [FilePath]
                        }
 
 def :: GenerateCsConfig
 def = GenerateCsConfig { namespace = "ServantClientAPI"
+                       , outdir = "gen"
+                       , classCsName = "Classes.cs"
+                       , apiCsName = "API.cs"
+                       , enumCsName = "Enum.cs"
+                       , converterCsName = "JsonConverter.cs"
                        , classtemplate = defClassTemplate
                        , apitemplate = defAPITemplate
                        , enumtemplate = defEnumTemplate
-                       , convtemplate = defConvTemplate
+                       , convertertemplate = defConvTemplate
+                       , assemblyinfotemplate = defAssemblyInfoTemplate
+                       , csprojtemplate = defCsprojTemplate
+                       , guid = Nothing
                        , sources = []
                        }
 
+genCsForAPI :: (HasForeign CSharp Text api,
+             GenerateList Text (Foreign Text api)) =>
+            GenerateCsConfig -> Proxy api -> IO ()
+genCsForAPI conf api = do
+  guid' <- maybe (toString <$> UUID.nextRandom) return $ guid conf
+  let conf' = conf { guid = Just guid' }
+  createDirectoryIfMissing True [heredoc|${outdir conf'}/${namespace conf'}/Properties|]
+  classCsForAPIWith conf' >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}${classCsName conf'}|]
+  apiCsForAPIWith conf' api >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}${apiCsName conf'}|]
+  enumCsForAPIWith conf' >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}${enumCsName conf'}|]
+  converterCsForAPIWith conf' >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}${converterCsName conf'}|]
+  assemblyInfoCsForAPIWith conf' >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}/Properties/AssemblyInfo.cs|]
+  csprojForAPIWith conf' >>= writeFile [heredoc|${outdir conf'}/${namespace conf'}/${namespace conf'}.cs|]
+
 --------------------------------------------------------------------------
 isDatatypeDecl :: Decl -> Bool
 isDatatypeDecl (DataDecl _ DataType _ _ _ [qcon] _) = True
@@ -313,7 +354,7 @@
 converterCsForAPI = converterCsForAPIWith def
 
 converterCsForAPIWith :: GenerateCsConfig -> IO String
-converterCsForAPIWith conf = (convtemplate conf) conf
+converterCsForAPIWith conf = (convertertemplate conf) conf
 
 defClassTemplate :: GenerateCsConfig -> IO String
 defClassTemplate conf = do
@@ -500,3 +541,108 @@
     }
 }
 |]
+
+--------------------------------------------------------------------------
+
+assemblyInfoCsForAPI :: IO String
+assemblyInfoCsForAPI = assemblyInfoCsForAPIWith def
+
+assemblyInfoCsForAPIWith :: GenerateCsConfig -> IO String
+assemblyInfoCsForAPIWith conf = (assemblyinfotemplate conf) conf
+
+defAssemblyInfoTemplate :: GenerateCsConfig -> IO String
+defAssemblyInfoTemplate conf = do
+  (year, _, _) <- fmap (toGregorian . utctDay) getCurrentTime
+  guid <- maybe (toString <$> UUID.nextRandom) return $ guid conf
+  return [heredoc|
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+[assembly: AssemblyTitle("${namespace conf}")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("${namespace conf}")]
+[assembly: AssemblyCopyright("Copyright ©  ${show year}")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+[assembly: ComVisible(false)]
+
+[assembly: Guid("${guid}")]
+
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]
+|]
+
+--------------------------------------------------------------------------
+
+csprojForAPI :: IO String
+csprojForAPI = csprojForAPIWith def
+
+csprojForAPIWith :: GenerateCsConfig -> IO String
+csprojForAPIWith conf = (csprojtemplate conf) conf
+
+defCsprojTemplate :: GenerateCsConfig -> IO String
+defCsprojTemplate conf = do
+  guid <- maybe ((map toUpper . toString) <$> UUID.nextRandom) return $ guid conf
+  return [heredoc|<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{${guid}}</ProjectGuid>
+    <OutputType>Library</OutputType>
+    <AppDesignerFolder>Properties</AppDesignerFolder>
+    <RootNamespace>${namespace conf}</RootNamespace>
+    <AssemblyName>${namespace conf}</AssemblyName>
+    <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="Newtonsoft.Json, Version=4.5.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL" />
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="${apiCsName conf}" />
+    <Compile Include="${converterCsName conf}" />
+    <Compile Include="${classCsName conf}" />
+    <Compile Include="${enumCsName conf}" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+  <!-- To modify your build process, add your task inside one of the targets below and uncomment it. 
+       Other similar extension points exist, see Microsoft.Common.targets.
+  <Target Name="BeforeBuild">
+  </Target>
+  <Target Name="AfterBuild">
+  </Target>
+  -->
+</Project>|]
