在单个解决方案中,我在DNX/ASP.NET 5项目(project.json/xproj)和其他C#项目(csproj)之间共享代码有哪些选择?

Mat*_*oks 46 .net .net-core dnx asp.net-core

脚本

我正在尝试使用Visual Studio 2015 RC,特别是要切换到新的ASP.NET 5框架,项目结构和运行ASP.NET 5应用程序的新DNX.

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

[Solution] Sample.sln
    [Folder] src
        [Project] ClassLibrary.csproj
        [Project] WindowsService.csproj
        [Project] WebApplication.csproj
    [Folder] test
        [Project] ClassLibrary.UnitTests.csproj
        ...
Run Code Online (Sandbox Code Playgroud)

在这种情况下,ClassLibrary.csproj是一个包含共享代码的C#类库.这是一个依赖/双方所引用WindowsService.csprojWebApplication.csproj.

我们没有特别努力的目标.NET的核心,dnxcore50.在这个阶段,我们很高兴以.NET Framework为目标dnx451.但是,我们绝对试图利用ASP.NET 5的新功能和相关的项目结构.

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

选项1

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

  1. 这种方法意味着对ClassLibrary.csproj需要重建的代码的任何更改都在运行中可见WebApplication-dnx.这并不奇怪,但意味着我们无法获得完整的源代码编译优势WebApplication-dnx.

  2. 我们不能轻易地针对其他框架,例如dnxcore50.如上所述,这不是现阶段的具体目标.

选项2

如果我们ClassLibrary.csproj用DNX类库项目替换^ ClassLibrary-dnx那么选项1中的问题不适用.这种方法似乎更加符合.NET运行时和ASP.NET等相关技术的前进方式.

不过,我不能找到一种方法来引用ClassLibrary-dnxWindowsService.csproj.如果这种方法是可行的,我想这个解决方案与项目级别选项有关Produce outputs on build,然后引用.nupkg或者甚至.dll可以在构建期间生成.但是,我看不到通过工具实现这一目标的简洁方法.

^ VSX Class Library (Package)RC 中调用DNX类库项目.此项目类型以前ASP.NET Class Library在CTP中调用.

摘要

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

  1. 一些反馈到我的方案选项和问题.

  2. 对于我没有想到的其他选项的建议.

  3. 也许表明应采用哪种方法向前发展.

Vic*_*aci 22

看看EntityFramework的作用.

它们针对3个TFM:net45,.NETPortable,Version = v4.5,Profile = Profile7,frameworkAssemblies,它们在同一个文件夹中同时包含csproj和xproj .

基本上,对于每个项目,您有两个项目文件.

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

不幸的是,那是不可能的.你只能从xproj引用csproj,而不是相反.您有两种选择:(1)像EF一样同时使用xproj和csproj,或者(2)从csproj引用NuGet包.

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

  • @MichaC你的猜测大多是正确的; 我们是一个非常顽固的团队.;)实际上,阻碍我们的主要因素是TestDriven.NET支持. (3认同)