Skip to main content
 首页 » 编程设计

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

2024年06月20日13qq号

场景

我正在尝试使用 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-dnx 替换上面的 WebApplication.csproj 项目时,我们仍然可以引用 ClassLibrary.csproj 来自这个新的 DNX 项目和现有的 WindowsService.csproj 项目。但是出现了一些问题:

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

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

选项 2

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

但是我找不到从 WindowsService.csproj 引用 ClassLibrary-dnx 的方法。如果这种方法可行,我想该解决方案与在构建时生成输出的项目级别选项有关,然后引用.nupkg,甚至可能是.dll 是在构建过程中生成的。但是,我看不到通过工具实现此目的的干净方法。

^ DNX 类库项目在 VS 2015 RC 中称为类库(包)。此项目类型以前在 CTP 中称为 ASP.NET 类库

摘要

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

  1. 对我的场景选项和问题的一些反馈。

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

  3. 也许可以表明今后应该使用哪种方法。

请您参考如下方法:

看看什么 EntityFramework做。

他们的目标是 3 个 TFM:net45、.NETPortable、Version=v4.5、Profile=Profile7、frameworkAssemblies,并且他们同时拥有 csproj 和 xproj in the same folder .

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

However I cannot find a way to reference ClassLibrary-dnx from WindowsService.csproj.

不幸的是,这还不可能。您只能从 xproj 引用 csproj,反之则不然。您有两种选择:(1) 像 EF 一样同时拥有 xproj 和 csproj,或者 (2) 从 csproj 引用 NuGet 包。

如果您想要执行替代方案 (2),则可以将 xproj 的输出设置到一个文件夹并将其添加为 NuGet feed。