대량 수정 vs 프로젝트의 인용 오류
3960 단어 C#
사고방식: 프로젝트 파일 csproj의 인용 파일 이름과 실제 경로를 일치시키고 상대 경로로 수정합니다.
class Program
{
static void Main(string[] args)
{
modifyCsproj();
}
private static void modifyCsproj()
{
List files = new List();
// dll
DirectoryInfo dirInfo = new DirectoryInfo(@"..\lib");
foreach (var file in dirInfo.GetFiles())
{
files.Add(file.FullName);
}
List csprojs = new List();
//
string path = @"..\Code";
getAllCsProj(path, ref csprojs);
//
foreach (var xmlfile in csprojs)
{
XmlDocument doc = new XmlDocument();
doc.Load(xmlfile);
XmlNamespaceManager nsmgr = new XmlNamespaceManager(doc.NameTable);
nsmgr.AddNamespace("ab", "http://schemas.microsoft.com/developer/msbuild/2003");
XmlNodeList nodes = doc.SelectNodes("//ab:HintPath", nsmgr);
foreach (XmlNode n in nodes)
{
string dllPath = n.InnerText;
if (!dllPath.EndsWith("dll")) continue;
FileInfo dllFile = new FileInfo(dllPath);
foreach (var f in files)
{
FileInfo dllFileNew = new FileInfo(f);
if (dllFile.Name == dllFileNew.Name)
{
//
n.InnerText = GetRelativePath(xmlfile,dllFileNew.FullName);
continue;
}
}
}
doc.Save(xmlfile);
}
}
// csproj
//
private static void getAllCsProj(string path,ref List csprojs)
{
DirectoryInfo dirInfo = new DirectoryInfo(path);
foreach (var file in dirInfo.GetFiles())
{
if (file.FullName.EndsWith(".csproj")) csprojs.Add(file.FullName);
}
foreach (var dir in dirInfo.GetDirectories())
{
getAllCsProj(dir.FullName,ref csprojs);
}
}
// path2 path1
// path1 path2
public static string GetRelativePath(string path1, string path2)
{
string[] path1Array = path1.Split('\\');
string[] path2Array = path2.Split('\\');
//
int s = path1Array.Length >= path2Array.Length ? path2Array.Length : path1Array.Length;
//
int closestRootIndex = -1;
for (int i = 0; i < s; i++)
{
if (path1Array[i] == path2Array[i])
{
closestRootIndex = i;
}
else
{
break;
}
}
// path1 ‘../'
string path1Depth = "";
for (int i = 0; i < path1Array.Length; i++)
{
if (i > closestRootIndex + 1)
{
path1Depth += "../";
}
}
// path2 ‘../'
string path2Depth = "";
for (int i = closestRootIndex + 1; i < path2Array.Length; i++)
{
path2Depth += "/" + path2Array[i];
}
path2Depth = path2Depth.Substring(1);
return path1Depth + path2Depth;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.