46

设想

我正在尝试使用 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.csproj和引用的依赖项WebApplication.csproj

我们并不是专门针对 .NET Core 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但是,我看不到通过工具实现这一目标的干净方法。

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

概括

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

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

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

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

4

1 回答 1

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 提要。

于 2015-05-21T15:56:07.323 回答