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

时间:2015-05-20 16:18:53

标签: .net asp.net-core dnx .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
        ...

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

我们并非专门针对.NET Core dnxcore50。在此阶段,我们很高兴以.NET Framework为目标dnx451。但是,我们绝对试图利用ASP.NET 5的新功能和相关的项目结构。

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

选项1

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

  1. 此方法表示对WindowsService.csproj中代码的任何更改都需要在正在运行的ClassLibrary.csproj中显示重建。这并不奇怪,但意味着我们无法从WebApplication-dnx获得完整的源代码编译好处。

  2. 我们无法轻易定位其他框架,例如WebApplication-dnx。如上所述,现阶段并非具体目标。

  3. 选项2

    如果我们将dnxcore50替换为DNX类库项目^ ClassLibrary.csproj,则选项1中的问题不适用。这种方法似乎更加符合.NET运行时和ASP.NET等相关技术的发展方式。

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

    ^ DNX类库项目在VS 2015 RC中称为.dll。此项目类型以前在CTP中称为Class Library (Package)

    摘要

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

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

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

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

1 个答案:

答案 0 :(得分:22)

看看EntityFramework的作用。

他们针对3个TFM:net45,.NETPortable,Version = v4.5,Profile = Profile7,frameworkAssemblies,他们同时拥有csproj和xproj in the same folder

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

  

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

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

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