我可以在单个解决scheme中共享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的现有解决scheme。 在我们现有的Visual Studio解决scheme中,我们可能有以下项目:
[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的新function和相关的项目结构。
以下是我想到的一些选项,但都有问题。
选项1
当我们用新的ASP.NET 5 DNX项目WebApplication-dnx
replace上面的WebApplication.csproj
项目时,我们仍然可以从这个新的DNX项目和现有的WindowsService.csproj
项目中引用ClassLibrary.csproj
。 但是有一些问题出现:
-
这种方法意味着对
ClassLibrary.csproj
代码的任何更改都需要重新生成,以便在运行的WebApplication-dnx
。 这并不奇怪,但意味着我们没有从WebApplication-dnx
获得完整的编译源代码优势。 -
我们不能容易地瞄准其他框架,例如
dnxcore50
。 如上所述,在这个阶段这不是特别的目标。
选项2
如果我们用DNX类库项目replaceClassLibrary.csproj
^ ClassLibrary-dnx
则选项1中的问题不适用。 这种方法似乎更符合.NET运行时和相关技术(如ASP.NET)的打包方式。
但是我找不到从WindowsService.csproj
引用ClassLibrary-dnx
的方法。 如果这种方法是可行的,我想这个解决scheme与Produce outputs on build
的项目级别选项Produce outputs on build
,然后引用.nupkg
或甚至是在生成过程中生成的.dll
。 但是,我看不到通过工具实现这一点的干净方式。
^ VSX类库项目在VS 2015 RC中称为Class Library (Package)
。 此项目types以前在CTP中称为ASP.NET Class Library
。
概要
根据以上信息,我正在寻找:
-
一些反馈给我的scheme的选项和问题。
-
其他选项的build议我没有想到。
-
也许表明应该采用哪种方法。
看一下EntityFramework的function。
它们的目标是3个TFM:net45,.NETPortable,Version = v4.5,Profile = Profile7,frameworkAssemblies,它们在同一个文件夹中都有csproj和xproj。
基本上,每个项目你有两个项目文件。
但是我找不到从WindowsService.csproj引用ClassLibrary-dnx的方法。
不幸的是,那还不行。 你只能从xproj引用csproj,而不能反其道而行。 你有两个select:(1)有像EF那样的xproj和csproj,或者(2)从csproj引用NuGet包。
如果你想做替代(2),那么你可以将xproj的输出设置为一个文件夹,并将其添加为一个NuGet提要。