/>

### RCFProto C# Demo

This section describes how to build and run the RCFProto C# demo server and client, on Windows. You will need the Win32 binary distribution to follow these steps.
The C# demo can be built from the command line, or from the provided Visual Studio solution (.sln) file.

##### Building the C# demo server and client (command line)

- From the root directory of the distribution, cd to the demo directory:
`cd csharp\demo`
- Generate source code for Protocol Buffer messages:
`..\bin\ProtoGen.exe Demo.proto -service_generator_type=GENERIC`
- Build the demo server:
`csc DemoServer.cs Demo.cs DllPathResolver.cs /r:..\bin\RCFProto_NET.dll /r:..\bin\Google.ProtocolBuffers.dll`
- Build the demo client:
`csc DemoClient.cs Demo.cs DllPathResolver.cs /r:..\bin\RCFProto_NET.dll /r:..\bin\Google.ProtocolBuffers.dll`

##### Building the C# demo server and client (Visual Studio)

- From Visual Studio, open `csharp\demo\vs2008\RCFProtoDemo.sln` .
- If you are using a Visual Studio version newer than Visual Studio 2008, you will be prompted to upgrade the solution. Ignore any upgrade errors related to `Demo.cs` (this is a file generated by the solution).
- In the Solution Explorer, right click on the RCFProtoDemo solution and press Build. A pre-build event will run ProtoGen.exe to generate `Demo.cs` (containing source code for Protocol Buffer messages). The demo server and client will be built to the `csharp\demo\vs2008\bin\Debug` directory.

##### Running the C# demo server and client

- Run the demo server:
`DemoServer.exe`
- Run the demo client (in a different command prompt):
`DemoServer.exe`

#### FAQ

- Q: I have built DemoClient.exe and DemoServer.exe from the provided Visual Studio solution. When running either of the executables, the following error is displayed:
  `The type initializer for 'DeltaVSoft.RCFProto.RCFProtoPINVOKE' threw an exception.`
  A: This is most likely caused by the program not being able to load `RCFProto_NET_impl.dll`. If the solution is built from a location within the distribution, it should find `RCFProto_NET_impl.dll` automatically. If the solution is built from a location outside the distribution, you will need to copy `RCFProto_NET_impl.dll`, from either `csharp\bin\x86` or `csharp\bin\x64`, to the location of the executables.