前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Shared Project使用笔记

Shared Project使用笔记

作者头像
JusterZhu
发布2023-06-23 10:18:40
1080
发布2023-06-23 10:18:40
举报
文章被收录于专栏:JusterZhuJusterZhu

1.概要

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

1.1什么是Shared Project?

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

1.2如何使用?

1.2.1创建项目

找到项目模板

1.2.2使用

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

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

代码语言:javascript
复制
    public class Class1
    {
        public int Calculation(int i,int j) 
        {
            return i + j;
        }
    }

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

2.详细内容

2.1解读

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

  • 普通类库的有一个弊端就是在大家误操作的时候会出现类库与类库之间项目引用变成了“循环引用”,而Shared Project只能被别人引用。
  • 将不受平台、框架限制的通用代码可以放到Shared Project。

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

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

2.2使用注意

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

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

代码:

代码语言:javascript
复制
        [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);
            }
        }

错误:

代码语言:javascript
复制
严重性 代码  说明  项目  文件  行   禁止显示状态
错误  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视为不同的对象。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JusterZhu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.概要
    • 1.1什么是Shared Project?
      • 1.2如何使用?
        • 1.2.1创建项目
      • 1.2.2使用
      • 2.详细内容
        • 2.1解读
          • 2.2使用注意
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档