首页 > 系统相关 >PowerShell实战系列:按需更改.net解决方案中的项目名称

PowerShell实战系列:按需更改.net解决方案中的项目名称

时间:2023-05-31 23:14:58浏览次数:61  
标签:解决方案 Company 项目名称 名称 Product1 csproj net PowerShell

一、需求

    产品在生命周期中可能会更改名称,比如产品从Product1升级为Product2,为了使产品代码与之同步,产品源码项目名称需要改动,通常一个产品由包含很多项目,手动更改有很大的工作量,且未来该工作仍可能重复(产品继续升级,带来改名需求)。

    对于大量且重复的工作,编写脚本可有效满足此类场景需求,本文选择使用PowerShell解决上述需求的问题。

二、问题分析

    通过案例,分析需求含有哪些具体问题,创建解决方案:Product1,并创建5个项目,项目结构如下:

    本着以终为始的原则,希望最终看到的效果:

1、拆解子问题:

(1)文件目录名称需要改动,将旧文件目录名称改为新文件目录名称

(2)解决方案名称需要改变,将旧解决方案名称改为新解决方案名称

(3)解决方案的项目文件*.csproj需要改动,将旧项目名称改为新项目名称

(4)*.sln文件内容需要改动,旧项目名称要改为新项目名称

(5)*.csproj中的文件内容需要改动,因为项目间的引用使用旧项目名称,需要将旧项目名称要改为新项目名称

2、问题1-3,涉及文件夹、文件名称更改:

(1)Product1.sln改为Product2.sln

(2)Company.Product1.Web改为Company.Product1.Web

(3)Company.Product1.Web.csproj改为Company.Product2.Web.csproj

3、问题4-5,文件名称改完后,涉及文件内容更改:

(1)Product2.sln中旧项目名称Company.Product1.Web.csproj改为Company.Product2.Web.csproj

(2)Company.Product2.Web.csproj中旧项目名称Company.Product1.Core改为Company.Product2.Core

三、解决方案

1、针对问题1-3,解决思路:

    通过PowerShell遍历解决方案目录,并递归,将匹配名称的文件夹、文件过滤出来,通过正则匹配,用新名称替换掉旧名称。

2、针对问题4-5,解决思路:

    通过PowerShell遍历解决方案目录,并递归,将匹配名称的解决方案文件(*.sln)、项目文件(*.csproj)读取出文件内容,通过正则匹配,用新名称替换掉旧名称,将更改后的内容重新写入到对应的解决方案文件(*.sln)、项目文件(*.csproj)。

3、具体实现代码:

$solutionDir = "D:\Product1" 
$oldName = "Product1"
$newName = "Product2"

$regexOldName="*"+$oldName+"*"

#替换项目文件夹名称
Get-ChildItem -Path $solutionDir -Filter $regexOldName -Recurse | Rename-Item -NewName {$_.Name -replace $oldName,$newName}

#替换项目文件内容中的名称
(Get-ChildItem -Path $solutionDir -Include *.csproj -Recurse).FullName | ForEach-Object {
    $content = [System.IO.File]::ReadAllText($_)
    $content = $content -replace $oldName, $newName
    [System.IO.File]::WriteAllText($_, $content)
}

#替换解决方案文件内容中的名称
(Get-ChildItem -Path $solutionDir -Include *.sln -Recurse).FullName | ForEach-Object {
    $content = [System.IO.File]::ReadAllText($_)
    $content = $content -replace $oldName, $newName
    [System.IO.File]::WriteAllText($_, $content)
}

  

四、总结

    面对大量的、有规律的、重复工作,脚本是一个很好的工具,善用它会带来成倍的工作效率提升。

 

 

标签:解决方案,Company,项目名称,名称,Product1,csproj,net,PowerShell
From: https://www.cnblogs.com/maomu/p/17447332.html

相关文章

  • 使用脚本批量Telnet和Curl测试端口是否连通
    使用脚本批量Telnet测试端口是否连通,使用telnet:telnets.sh:#!/bin/bashcheck_telnet(){forip_portin$(catip_info|grep-v'^#')doCHECK_PORT=$(echo$ip_port|awk-F:'{print$2}')CHECK_IP=$(echo$ip_port|awk-F:'{print$1}')......
  • 开源.NetCore通用工具库Xmtool使用连载 - 发送短信篇
    【Github源码】《上一篇》介绍了Xmtool工具库中的发送邮件类库,今天我们继续为大家介绍其中的发送短信类库。发送短信就像发送邮件一样,在软件系统中使用非常普遍,甚至比发送邮件还要常见,有些甚至是软件标配功能;例如现在的短信验证码登录、通过短信找回密码等等。发送短信需要......
  • yolotv5和resnet152模型预测
    我已经训练完成了yolov5检测和resnet152分类的模型,下面开始对一张图片进行检测分类。首先用yolo算法对猫和狗进行检测,然后将检测到的目标进行裁剪,然后用resnet152对裁剪的图片进行分类。首先我有以下这些训练好的模型 猫狗检测的,猫的分类,狗的分类 我的预测文件my_detect.p......
  • kubernetes(k8s)大白学习02:容器和docker基础、使用、架构学习
    一、什么是容器容器简介简单说:容器(container)就是计算机上的一个沙盒进程,它与计算机上的所有其它进程相隔离。这种隔离是怎么做到的呢?它利用了内核提供的namespace和cgroup这2种技术。这些技术能力在Linux中已经存在了很长时间。而Docker或容器技术致力于将这些功能更......
  • 使用OnePlus 6T(一加6T)刷入 Kali NetHunter的操作总结
    前景概述:看到网上有人用手机进行BadUSB攻击,自己也幻想了一下在手机中使用KaliLinux的场景,看到Kali官方提供的有移动端的设备Nethunter,于是我就筹划这准备刷入这个系统。想要刷入NetHunter,并不是非常简单的事情,但是如果你有刷机基础的话,也可以是很简单的步骤。我是一个小白,一......
  • Vs2022安装.Net4.5程序包
    因为VS2022将不再支持.NET4.5,即使在VisualStudioInstaller中也找不到.NET4.5的选项我们可以在NuGet包中下载.NET4.5的工具包找到程序包管理器控制台Vs2022顶部菜单>视图>其它窗口>程序包管理器控制台将下段代码复制进程序包管理器控制台然后回车Install-PackageMicrosof......
  • 【Netty实战】1~3章学习笔记
    1.Netty总体结构1.1Netty简介​ Netty是一款用于创建高性能网络应用程序的高级框架。它的基于JavaNIO的异步的和事件驱动的实现,保证了高负载下应用程序性能的最大化和可伸缩性。​ 其次,Netty也包含了一组设计模式,将应用程序逻辑从网络层解耦,简化了开发过程,同时也最大限度......
  • Snap算法学习01-02关于net节点、边、权值、标签的读写操作——netinf中cascades层级信
      Model可选值—— 0:exponential,  1:powerlaw,  2:rayleigh"                                      ......
  • 《kubernetes 系列》6. etcd 的租约是怎么一回事?
    楔子etcd的一个典型的应用场景是Leader选举,那么etcd为什么可以用来实现Leader选举?核心特性实现原理又是怎样的?本篇文章就来聊一聊Leader选举背后的技术点之一:租约(Lease),通过解析它的核心原理、性能优化思路,从而对Lease如何关联key、Lease如何高效续期、淘汰、什么......
  • ES transport client底层是netty实现,netty本质上是异步方式,但是netty自身可以使用sync
    EStransportclient底层是netty实现,netty本质上是异步方式,但是netty自身可以使用sync或者await(future超时机制)来实现类似同步调用!因此,EStransportclient可以同步调用也可以异步(不过底层的socket必然是异步实现)。发送端例子对于javaclient的数据发送(这里以bulk为例),写过的人都知......