在我们当前的环境中,我们有一些共享的公共库(c# class library .net 4.5.1 csproj)项目,它们被asp.net和控制台应用程序引用。我们正在考虑升级我们的web项目1到ASP。. NET 5开始测试一些即将到来的新变化。
因为我不能做一个项目参考在ASP。. NET 5到旧的cspproj库类型,我必须通过它编译的DLL引用库,并从项目中删除dnxcore50。Json(这对我们来说很好)。然而,我们拥有共享库源代码,并不断在我们的DEV环境中进行更新,以便经常对DLL进行修改和更改。ASP。. NET 5将DLL放在lib目录中,而不使用到csproj目录的路径。
如果你有asp.net &控制台csproj应用程序以及asp.net 5应用程序需要共享一个公共代码库,而不必维护两个代码库?在编译asp.net 5项目之前,您是否会推荐一个构建任务来编译公共库项目并替换lib中的参考DLL,或者为我们的共享库设置一个本地的nuget repo,因为项目引用现在对于csproj来说是不可能的?我们在TFS中是一个共享的团队,所以无论我做什么,都需要很容易地复制给其他人。
如果共享代码不经常更改,我会使用共享的nuget存储库。这样,您就获得了使用nuget包的所有好处:版本控制、易于恢复等。您的解决方案可以包含更少的项目并更快地编译。但是,如果共享代码不断更改,那么执行包-推送-恢复过程可能会很痛苦。
还有另一种方法- dnu
有一个名为wrap
的方便命令。它将你现有的.csproj
文件包装成project.json
文件,然后可以被aspnet5项目引用。
你可以这样做:
-
在包含项目的某个顶级目录中添加
global.json
文件。在projects
部分,列出包含源代码的目录,例如:{ "projects": [ "src", "test" ], "sdk": { "version": "1.0.0-rc1-final" } }
-
在包含
global.json
的同一目录下,为每个现有的.csproj
项目执行dnu wrap
。dnu wrap src/my.project/my.project.csproj
这将创建一个目录
wrap
,其中包含包装.csprojs
的project.json
文件。示例文件如下所示:{ "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
目录也被添加到global.json
的projects
节。 -
在您的解决方案中,添加一个新的aspnet项目,并向包装的项目添加一个引用。只需添加:
"my.project": ""
到
dependencies
节。Aspnet应该自动选择根目录下的global.json
文件,并在所有目录中查找项目,包括wrap
目录。 -
现在您可以使用
my.project
中的所有类,在调试时进入它们,转到定义等。注意,在您的解决方案中,您仍然使用旧的csproj
。
您可以在这里找到示例代码:https://github.com/heavymetaldev/aspnet5-wrap。
我想这可能会变得有点复杂,如果你有一些自定义的东西在你的项目,如条件编译,自定义包含等