Quais são minhas opções para compartilhar código entre projetos DNX / ASP.NET 5 (project.json / xproj) e outros projetos C # (csproj) em uma única solução?
Estou experimentando o Visual Studio 2015 RC, procurando especificamente mudar para a nova estrutura do ASP.NET 5, a estrutura do projeto e o novo DNX que executa aplicativos do ASP.NET 5.
Meu empregador tem muitas soluções existentes visando o .NET Framework 4.5.2. Em nossas soluções existentes do Visual Studio, podemos ter os seguintes projetos:
[Solution] Sample.sln
[Folder] src
[Project] ClassLibrary.csproj
[Project] WindowsService.csproj
[Project] WebApplication.csproj
[Folder] test
[Project] ClassLibrary.UnitTests.csproj
...
Neste cenário,ClassLibrary.csproj
é uma biblioteca de classes C # que contém código compartilhado. É uma dependência / referenciada por ambosWindowsService.csproj
eWebApplication.csproj
.
Não estamos tentando segmentar especificamente o .NET Core,dnxcore50
. Nesta fase, estamos felizes em segmentar o .NET Framework,dnx451
. No entanto, estamos absolutamente tentando aproveitar os novos recursos do ASP.NET 5 e a estrutura de projeto associada.
Abaixo estão algumas opções que eu pensei, mas ambas têm problemas.
Opção 1Quando substituímos oWebApplication.csproj
projeto acima com um novo projeto ASP.NET 5 DNXWebApplication-dnx
então ainda podemos fazer referência aoClassLibrary.csproj
deste novo projeto DNX e do projeto existenteWindowsService.csproj
projeto. No entanto, alguns problemas surgem:
Essa abordagem significa qualquer alteração no código emClassLibrary.csproj
precisa de uma reconstrução para ficar visível na execuçãoWebApplication-dnx
. Isso não é surpreendente, mas significa que não obtemos todos os benefícios de compilação da fonte paraWebApplication-dnx
.
Não podemos segmentar facilmente outras estruturas, por exemplo,dnxcore50
. Como acima, esse não é um objetivo específico nesse estágio.
Se substituirmosClassLibrary.csproj
com um projeto de biblioteca de classes DNX ^ClassLibrary-dnx
os problemas na opção 1 não se aplicam. Essa abordagem parece estar mais de acordo com a maneira como o tempo de execução do .NET e as tecnologias associadas, como o ASP.NET, serão empacotadas no futuro.
No entanto, não consigo encontrar uma maneira de fazer referênciaClassLibrary-dnx
deWindowsService.csproj
. Se essa abordagem for viável, imagino que a solução tenha algo a ver com a opção no nível do projeto paraProduce outputs on build
e, em seguida, referenciando o.nupkg
ou talvez até o.dll
que é produzido durante a construção. No entanto, não consigo ver uma maneira limpa de conseguir isso através das ferramentas.
^ Os projetos da biblioteca de classes DNX são chamadosClass Library (Package)
no VS 2015 RC. Esse tipo de projeto foi chamado anteriormenteASP.NET Class Library
nos CTPs.
Com base nas informações acima, estou procurando:
Algum feedback para minhas opções e problemas de cenário.
Sugestões para outras opções em que não pensei.
Talvez uma indicação de qual abordagem deva ser usada no futuro.