Dot-Net

在單個解決方案中,在 DNX / ASP.NET 5 項目 (project.json / xproj) 和其他 C# 項目 (csproj) 之間共享程式碼有哪些選擇?

  • May 20, 2015

設想

我正在嘗試使用 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. 也許表明應該使用哪種方法向前發展。

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

引用自:https://stackoverflow.com/questions/30355208