在我们当前的环境中,我们有一些共享的公共库(C# 类库 .NET 4.5.1 csproj)项目,它们被 ASP.NET 和控制台应用程序引用。我们正在考虑将 1 个 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 存储库,因为现在 csproj 无法进行项目引用?我们是一个共享团队,所有这些代码都在 TFS 中,因此我所做的任何事情都需要轻松复制给其他人。
如果共享代码不经常更改,我会使用共享 nuget 存储库。通过这种方式,您可以获得使用 nuget 包的所有好处:版本控制、轻松恢复等。您的解决方案可以拥有更少的项目并更快地编译。
但如果共享代码不断更改,则执行打包-推送-恢复过程可能会很痛苦。
还有另一种方法——dnu
有一个名为的方便命令wrap
。它包裹了你现有的.csproj
文件到project.json
然后可以由 aspnet5 项目引用的文件。
你可以这样做:
-
Add a global.json http://docs.asp.net/en/latest/conceptual-overview/understanding-aspnet5-apps.html#the-global-json-file文件位于包含您的项目的某个顶级目录中。在里面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
部分在global.json
.
-
在您的解决方案中,添加一个新的 aspnet 项目并添加对包装项目的引用。只需添加:
"my.project": ""
to dependencies
部分。 Aspnet 应该会自动拾取global.json
文件位于根目录中,并将在其中列出的所有目录中查找项目,包括wrap
目录。
现在你可以开始了 - 你可以使用来自的所有课程my.project
,在调试时进入它们,转到定义等。请注意,在您的解决方案中,您仍然有旧的csproj
.
您可以在这里找到示例代码:https://github.com/heavymetaldev/aspnet5-wrap https://github.com/heavymetaldev/aspnet5-wrap.
我想如果你的项目中有一些自定义的东西,比如条件编译、自定义包含等,这可能会变得有点复杂。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)