在單個解決方案中,在 DNX / ASP.NET 5 項目 (project.json / xproj) 和其他 C# 項目 (csproj) 之間共享程式碼有哪些選擇?
設想
我正在嘗試使用 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 Frameworkdnx451、. 但是,我們絕對是在嘗試利用 ASP.NET 5 的新功能和相關的項目結構。以下是我想到的一些選項,但都有問題。
選項1
當我們用
WebApplication.csproj新的 ASP.NET 5 DNX 項目替換上面的項目時,WebApplication-dnx我們仍然可以ClassLibrary.csproj從這個新的 DNX 項目和現有WindowsService.csproj項目中引用。但是會出現一些問題:
- 這種方法意味著對程式碼的任何更改都
ClassLibrary.csproj需要重新建構才能在執行中可見WebApplication-dnx。這並不奇怪,但意味著我們沒有獲得WebApplication-dnx.- 我們不能輕易針對其他框架,例如
dnxcore50. 如上所述,這不是現階段的具體目標。選項 2
如果我們替換
ClassLibrary.csproj為 DNX 類庫項目^ClassLibrary-dnx,則選項 1 中的問題不適用。這種方法似乎更符合 .NET 執行時和相關技術(如 ASP.NET)的打包方式。但是我找不到
ClassLibrary-dnx從WindowsService.csproj. 如果這種方法可行,我想該解決方案與項目級別選項有關Produce outputs on build,然後引用建構期間生成.nupkg的,甚至可能。.dll但是,我看不到通過工具實現這一目標的干淨方法。^ DNX 類庫項目
Class Library (Package)在 VS 2015 RC 中呼叫。此項目類型以前ASP.NET Class Library在 CTP 中呼叫過。概括
根據上面的資訊,我正在尋找:
- 對我的方案選項和問題的一些回饋。
- 我沒有想到的其他選項的建議。
- 也許表明應該使用哪種方法向前發展。
看看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 提要。