美文网首页asp.netC#Asp.net开发
跨项目代码共享(C#)

跨项目代码共享(C#)

作者: BeckJin | 来源:发表于2017-03-25 23:04 被阅读491次

    A:你把xx项目的xx代码发我一份吧,我这边也有那个功能

    B:好的。(ctrl+c、ctrl+v 甩过去)

    A:我这边的逻辑怎么和你不一样?你那边是不是偷偷修改了什么

    B:艹,我怎么知道你那么也有这个逻辑。。。

    A:怪我咯???

    类似这些情况目前在开发团队中或多或少总会存在,开发过程中对于copy代码这件事,可能苦于目前工作量大,开发交付时间紧张,选择一个目前认为高效的方式,不copy能怎样呢?心里当然是知道肯定存在解决方案的。

    我们解决问题的方式是搭建自己的 Nuget Server

    通过 Nuget Server的方式可以帮助我们进行代码统一管理,功能变化的代码版本控制,Server端版本升级时对引用方目前使用的版本进行兼容即可。每个项目公共功能的代码使用只需要一键安装就来了。如果Server端版本升了,引用方根据项目本身的需要,看是否需要升级到新版本。

    1、创建一个项目,用来管理通过 Nuget Server 发布的代码,代码本身通过github管理,理论上每次发布新版本Nuget包都有一个分支代码和该版本对应;

    2、创建类库,我们使用场景是需要同时支持 .Net Framework和 .Net Core 项目的使用(.Net Framework 4.5.2及以上可以使用,.Net Standard 1.5及以上可以使用),而且希望功能性相关代码只维护一份

    尝试1:使用可移植类库来实现,经过一系列的测试,失败了;

    尝试2:使用standard类库来实现,经过一系列的测试,依然失败;

    尝试3:

    》创建两个类库,一个基于.Net Framework 4.5.2,一个基于.Net Standard 1.5;

    》把.Net Standard 1.5的类库中的.csproj 文件复制到.Net Framework 4.5.2的类库中,创建一个与.Net Framework 4.5.2中的.csproj同名的.project.json,彻底删除上一步中创建的Net Standard 1.5类库;

    .project.json 内容如下:

    {

     "frameworks":  {"net452": { } },

     "runtimes": {"win": {}},

     "dependencies": {}  //根据这个类库的依赖项决定

    }

    》添加现有项目(位于.Net Framework 4.5.2的类库下的Netstandard1.5.csproj),移除Netstandard1.5类库无效依赖,最终就达到了两个类库服用一份代码;

    》Build的时候还是会失败的,Properties/AssemblyInfo.cs 对于Netstandard1.5类库来说是没用的,所以把这个文件的生成操作设置成 "无";

    》重新Build,成功了。

    对于尝试1、尝试2如果哪位大神有解决方案,跪求留言指导。

    3、编写功能性代码。在任何一个类库中写都可以,因为本质是一份代码,从哪个类库看都是一样的。完成后自己先做好测试;

    4、在Release模式下Build(build的时候最好把两个类库的程序集名称和默认命名空间都修改成一致,还需要设置生成xml文件,xml文件内包含所有代码的注释,方便调用者使用);

    5、将类库中Release文件夹中的dll和xml拖拽到 NuGet Package Manager 的内容区域,需按规定的目录格式,如果当前Package有依赖其他Package,则需要Edit dependencies

    6、发布到本地 Nuget Server,Publish Url只要内网之间可以访问就行;

    7、引用方在vs中配置本地的 Nuget 源,然后就可以安装/升级/卸载 Nuget Server上的包了。

    相关资料

    1、https://docs.microsoft.com/zh-cn/nuget/

    2、https://github.com/NuGetPackageExplorer/NuGetPackageExplorer

    相关文章

      网友评论

      本文标题:跨项目代码共享(C#)

      本文链接:https://www.haomeiwen.com/subject/ghbcottx.html