Transpiladores bytecode
O Grasshopper pode pegar um bytecode CLR e transpilá-lo para JVM. Destinado principalmente a aplicativos da web, ele não fornece, por exemplo, implementação JVM de classes do Windows Forms. Parece um pouco datado, no entanto. A web fala sobre ASP.NET 2.0, Visual Studio 2008 e assim por diante. Mencionado pela primeira vez por @alex
XMLVM pode receber bytecode CLR ou JVM como entrada e produzir como saída. Além disso, pode produzir Javascript ou Objective-C. Ainda não há lançamentos, apenas Subversion. "Versão de desenvolvimento experimental que não deve ser usada em um ambiente de produção."
O IKVM vai na direção oposta à que OP deseja. Ele fornece uma implementação de JVM em execução no CLR, um transpiler de bytecode de JVM para CLR e um gerador de stub de método de biblioteca CLR para Java. http://www.ikvm.net/uses.html Mencionado por @Jon Skeet
RPC
Por que não ter CLR e JVM rodando lado a lado e tornar a comunicação o mais simples possível? Não é isso que o OP deseja, mas algumas outras respostas já estão bastante fora do assunto de maneiras diferentes, então vamos abordá-las.
RabbitMQ , tem uma opção gratuita, é um servidor RPC escrito em Erlang com bibliotecas API para C #, Java e muito mais.
jnBridge , a licença pode ser muito cara para alguns usuários em potencial.
gRPC e bibliotecas RPC modernas semelhantes oferecem amplo suporte de linguagem, geração de código para bibliotecas de cliente nessas linguagens, formato de conexão independente de linguagem para dados, recursos avançados como cancelamento de chamada em cascata e assim por diante.
Linguagens de programação
Escreva uma vez, execute em qualquer lugar;)
Haxe , compila para C # / CLR, Java / JVM, Javascript, Flash, Python,… Fornece mecanismos de interoperabilidade para cada uma das linguagens de destino. Pode ser considerado um sucessor do ActionScript3 até certo ponto. Parece material bastante sólido, com pelo menos uma empresa realmente dependendo disso. Muito mais confiável do que Stab, mencionado a seguir.
Stab traz alguns recursos C # e interoperabilidade Java. Não é muito útil, você obtém alguns recursos C #, mas o que interage é o código Java que não os usa. https://softwareengineering.stackexchange.com/a/132080/45826 A linguagem é relativamente obscura, possivelmente abandonada, com poucas chances de se tornar melhor. Mencionado aqui pela primeira vez por @Vns.
Rajada de ar fresco para a plataforma JVM;)
Scala , Kotlin e outras são linguagens razoavelmente boas rodando em cima da JVM que trazem recursos que um programador C # pode perder em Java. Especialmente o Kotlin parece uma alternativa razoável ao C # no mundo da JVM. Scala pode ser uma linguagem um pouco extensa para um programador se sentir confortável em um curto espaço de tempo.
Mono
Essa é certamente uma opção também. Por que transpilar para JVM se o Mono pode executá-lo como está. Mencionado pela primeira vez por @ferhrosa
NOVA YORK - 12 de novembro de 2014 - Na quarta-feira, a Microsoft Corp. reforçou seu compromisso com as experiências de desenvolvedor de plataforma cruzada abrindo o código-fonte da pilha .NET completa do lado do servidor e expandindo o .NET para rodar nas plataformas Linux e Mac OS.
De acordo com este comunicado de imprensa do qual vem a citação, o Visual Studio 2015 adicionará Linux / Mono como uma plataforma compatível.
Este é um blog escrito pelo pessoal do projeto Mono sobre ele, do outro lado: .NET Source Code Integration (novembro de 2014).
.NET Core
Uma versão multiplataforma Windows / Linux de (alguns de) .Net administrada pela Microsoft. 'nuff disse https://github.com/dotnet/core .
Conclusão
Agora seria necessário dar uma chance a essas ferramentas / estruturas e ver quanta fricção existe. O OP deseja escrever em C # para a JVM, o que pode funcionar muito bem usando o Grasshopper.
Fazer isso com o objetivo de misturar bibliotecas C # e Java world em uma única base de código pode não funcionar tão bem.
Fontes
http://blog.pluralsight.com/new-course-making-java-and-c-work-together-jvm-and-net-clr-interop