Shared Project使用笔记

1.概要

本文主要分享如何Shared Project使用,和避坑。

1.1什么是Shared Project?

说简单一点就是微软提供的一个代码共享项目模板,从 Visual Studio 2015 起,共享项目 (Shared Project) 作为新的一种项目类型被添加到项目模板列表中,它带来的好处主要是使多个不同类型、不同平台的项目之间可以共享代码或资源这样我们就不用去重复写代码,或者在特殊情况下就不用将一个类直接拷贝到另外一个类库下。

1.2如何使用?

1.2.1创建项目

找到项目模板

a307b2e09f898af5d2629264c0c5f231.png

1.2.2使用

创建完成之后,库的图标和常规的C#库不一样是两个菱形。

4b581b774228f25caee1e11550b3f28e.png

接着创建一个类,代码如下:

public class Class1
    {
        public int Calculation(int i,int j) 
        {
            return i + j;
        }
    }

然后在需要share的项目上添加引用,接着正常通过类名正常访问该方法即可

749158181ab3ac32010a74d8ba5902d7.png

95697bb3960a6ac2873941e7081ffcd6.png

88814af695cd88e80d23c456d5f8f7e1.png

2.详细内容

2.1解读

Shared Project当然还有其他的使用场景这里就介绍基本用,看完以上操作之后大家可能会认为创建一个普通的类库好像也能实现,实际上也差不多。

  • 普通类库的有一个弊端就是在大家误操作的时候会出现类库与类库之间项目引用变成了“循环引用”,而Shared Project只能被别人引用。

  • 将不受平台、框架限制的通用代码可以放到Shared Project。

可能更多的会在设计上考虑在Shared Project中放些通用的代码,以Prism举例:

311fa673afeb7e8a1a82cc121ee07666.png

Prism的设计是将xxx.Container(容器)放到了Shared Project中,这样在兼容Wpf和Forms上就不用重复写Container相关的代码了,举一反三那么如果要兼容MAUI和Avalonia实现同样的框架设计那么拿来直接用即可。

2.2使用注意

最近在研究用DDD写服务端,出现一个场景。当拆分多个服务的时候每个细分服务都会使用HttpResponseDTO,那么这个时候我不想使用类库造成“引用混乱”自然是想到使用Shared Project。

7559e73b53764ed7ae8b283866c20b1e.png

结果我在使用的时候出现了一个问题,在写web api层的时候会用HttpResponseDTO,在Application层也会用到我同时在这两层同时引用了Shared Project里的HttpResponseDTO这个时候就出现了一个冲突这个问题查了一早上。项目结构如下:

098302df2058f80142a40ab93b8a7f02.png

代码:

[HttpPost]
        public async Task<HttpResponseDTO<bool>> Upload(UplaodVersionDTO version, HttpRequest request)
        {
            try
            {
                //.....
                //这句代码报错,从Application层引用的实现逻辑。
                return await _upgradeService.Upload(version, file.Item1, file.Item2);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, ex.Message);
                return HttpResponseDTO<bool>.InnerException(false, ex.Message);
            }
        }

错误:

严重性 代码  说明  项目  文件  行   禁止显示状态
错误  CS0029  无法将类型“xxx.Domain.Shared.DataTransferObjects.HttpResponse<bool> [AService.Application, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]”
隐式转换为“xxx.Domain.Shared.DataTransferObjects.HttpResponse<bool> [AService.Api, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]”   
AService.Api

怎么样想都没有想明白为什么会出现这种问题,当我把web api层的Shared Project引用移除之后就正常了。原来VS会将不同层的引用的Shared Project视为不同的对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值