我正在尝试使用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的新功能和相关的项目结构。
下面是我想到的一些选项,但两者都有问题。
当我们用新的ASP.NET 5 DNX项目WebApplication.csproj
替换上面的WebApplication-dnx
项目时,我们仍然可以从这个新的DNX项目和现有的{{}引用ClassLibrary.csproj
1}}项目。然而,出现了一些问题:
此方法表示对WindowsService.csproj
中代码的任何更改都需要在正在运行的ClassLibrary.csproj
中显示重建。这并不奇怪,但意味着我们无法从WebApplication-dnx
获得完整的源代码编译好处。
我们无法轻易定位其他框架,例如WebApplication-dnx
。如上所述,现阶段并非具体目标。
如果我们将dnxcore50
替换为DNX类库项目^ ClassLibrary.csproj
,则选项1中的问题不适用。这种方法似乎更加符合.NET运行时和ASP.NET等相关技术的发展方式。
但是我找不到从ClassLibrary-dnx
引用ClassLibrary-dnx
的方法。如果这种方法可行,我想这个解决方案与WindowsService.csproj
的项目级别选项有关,然后引用Produce outputs on build
或甚至是构建期间生成的.nupkg
。但是,我看不到通过工具实现这一目标的简洁方法。
^ DNX类库项目在VS 2015 RC中称为.dll
。此项目类型以前在CTP中称为Class Library (Package)
。
根据以上信息,我正在寻找:
对我的方案选项和问题的一些反馈。
对于我没有想过的其他选项的建议。
或许表明应该采用哪种方法。
答案 0 :(得分:22)
看看EntityFramework的作用。
他们针对3个TFM:net45,.NETPortable,Version = v4.5,Profile = Profile7,frameworkAssemblies,他们同时拥有csproj和xproj in the same folder。
基本上,对于每个项目,您有两个项目文件。
但是我找不到从WindowsService.csproj引用ClassLibrary-dnx的方法。
不幸的是,那是不可能的。你只能从xproj引用csproj,而不是相反。您有两种选择:(1)像EF一样同时使用xproj和csproj,或者(2)从csproj引用NuGet包。
如果你想做替代方案(2),那么你可以将xproj的输出设置为一个文件夹并将其添加为NuGet提要。