我可以在单个解决scheme中共享DNX / ASP.NET 5项目(project.json / xproj)和其他C#项目(csproj)之间的代码吗?

脚本

我正在尝试使用Visual Studio 2015 RC,专门研究切换到新的ASP.NET 5框架,项目结构和运行ASP.NET 5应用程序的新DNX。

我的雇主有许多针对.NET Framework 4.5.2的现有解决scheme。 在我们现有的Visual Studio解决scheme中,我们可能有以下项目:

[Solution] Sample.sln [Folder] src [Project] ClassLibrary.csproj [Project] WindowsService.csproj [Project] WebApplication.csproj [Folder] test [Project] ClassLibrary.UnitTests.csproj ... 

在这种情况下, ClassLibrary.csproj是包含共享代码的C#类库。 它是WindowsService.csprojWebApplication.csproj的/依赖项。

我们并不是专门针对.NET Core, dnxcore50 。 在这个阶段,我们很高兴针对.NET Framework, dnx451 。 但是,我们绝对要试图利用ASP.NET 5的新function和相关的项目结构。

以下是我想到的一些选项,但都有问题。

选项1

当我们用新的ASP.NET 5 DNX项目WebApplication-dnxreplace上面的WebApplication.csproj项目时,我们仍然可以从这个新的DNX项目和现有的WindowsService.csproj项目中引用ClassLibrary.csproj 。 但是有一些问题出现:

  1. 这种方法意味着对ClassLibrary.csproj代码的任何更改都需要重新生成,以便在运行的WebApplication-dnx 。 这并不奇怪,但意味着我们没有从WebApplication-dnx获得完整的编译源代码优势。

  2. 我们不能容易地瞄准其他框架,例如dnxcore50 。 如上所述,在这个阶段这不是特别的目标。

选项2

如果我们用DNX类库项目replaceClassLibrary.csproj ^ ClassLibrary-dnx则选项1中的问题不适用。 这种方法似乎更符合.NET运行时和相关技术(如ASP.NET)的打包方式。

但是我找不到从WindowsService.csproj引用ClassLibrary-dnx的方法。 如果这种方法是可行的,我想这个解决scheme与Produce outputs on build的项目级别选项Produce outputs on build ,然后引用.nupkg或甚至是在生成过程中生成的.dll 。 但是,我看不到通过工具实现这一点的干净方式。

^ VSX类库项目在VS 2015 RC中称为Class Library (Package) 。 此项目types以前在CTP中称为ASP.NET Class Library

概要

根据以上信息,我正在寻找:

  1. 一些反馈给我的scheme的选项和问题。

  2. 其他选项的build议我没有想到。

  3. 也许表明应该采用哪种方法。

看一下EntityFramework的function。

它们的目标是3个TFM:net45,.NETPortable,Version = v4.5,Profile = Profile7,frameworkAssemblies,它们在同一个文件夹中都有csproj和xproj。

基本上,每个项目你有两个项目文件。

但是我找不到从WindowsService.csproj引用ClassLibrary-dnx的方法。

不幸的是,那还不行。 你只能从xproj引用csproj,而不能反其道而行。 你有两个select:(1)有像EF那样的xproj和csproj,或者(2)从csproj引用NuGet包。

如果你想做替代(2),那么你可以将xproj的输出设置为一个文件夹,并将其添加为一个NuGet提要。