在我们当前的环境中,我们有一些共享的公共库(C#类库.NET 4.5.1 csproj)项目,它们都被asp.net和控制台应用程序引用。我们正在考虑将我们的一个Web项目升级到ASP.NET 5,以开始测试一些新的更改。
由于我无法在ASP.NET 5中对旧的csproj库类型进行项目引用,因此我必须通过它编译的DLL引用该库并从project.json中删除dnxcore50(这对我们来说很好)。但是,我们拥有共享库源并不断降低DEV环境中的更新,以便对DLL进行修改和更改。 ASP.NET 5将DLL放在lib目录中,不使用csproj目录的路径。
如果你有asp.net&控制台csproj应用程序以及需要共享公共代码库而无需维护2个代码库的asp.net 5应用程序?您是否会建议编译公共库项目并在编译asp.net 5项目之前替换lib中的引用DLL,或者为我们的共享库设置本地nuget repo,因为项目引用现在对csproj来说是不可能的?我们是TFS中所有这些代码的共享团队,因此我需要为其他人轻松复制。
答案 0 :(得分:2)
如果共享代码没有经常更改,我会使用共享的nuget存储库。通过这种方式,您可以获得使用nuget软件包的所有好处:版本控制,轻松恢复等。您的解决方案可以拥有更少的项目并且编译速度更快。 但是如果共享代码不断变化,那么通过pack-push-restore过程可能会很痛苦。
还有另一种方法 - dnu
有一个名为wrap
的便捷命令。它将您现有的.csproj
文件包装到project.json
文件中,然后由aspnet5项目引用。
您可以这样做:
在包含项目的某个顶级目录中添加global.json
文件。在projects
部分中,列出包含源代码的目录,例如:
{
"projects": [ "src", "test" ],
"sdk": {
"version": "1.0.0-rc1-final"
}
}
在包含global.json
的同一目录中,为每个现有dnu wrap
项目执行.csproj
。
dnu wrap src/my.project/my.project.csproj
这应创建一个包含wrap
文件的目录project.json
,其中包含.csprojs
。示例文件如下所示:
{
"version": "1.0.0-*",
"frameworks": {
"net45": {
"wrappedProject": "../../src/my.project/my.project.csproj",
"bin": {
"assembly": "../../src/my.project/obj/{configuration}/my.project.dll",
"pdb": "../../src/my.project/obj/{configuration}/my.project.pdb"
}
}
}
}
请注意,wrap
目录也会添加到projects
的{{1}}部分。
在您的解决方案中,添加一个新的aspnet项目并添加对包装项目的引用。只需添加:
global.json
到"my.project": ""
部分。 Aspnet应该自动在根目录中获取dependencies
文件,并在其中列出的所有目录中查找项目,包括global.json
目录。
现在你很高兴 - 你可以使用wrap
中的所有类,在调试时进入它们,转到定义等等。请注意,在你的解决方案中,你仍然拥有旧版{ {1}}。
您可以在此处找到示例代码:https://github.com/heavymetaldev/aspnet5-wrap。
如果您的项目中有一些自定义内容,例如条件编译,自定义包含等,我认为这可能会有点复杂。