我正在使用以下脚本在此处回答的脚本,以使用PowerShell脚本在解决方案内创建一个解决方案文件夹。
Function AddFolderToSolution($folderName, $solutionFile)
{
$solutionFolderGuid = "{2150E333-8FDC-42A3-9474-1A3956D46DE8}"
$content = [System.IO.File]::ReadLines($solutionFile)
$lines = New-Object System.Collections.Generic.List[string]
$lines.AddRange($content)
$index = $lines.IndexOf("Global")
$guid = [System.Guid]::NewGuid().ToString().ToUpper()
$txt = "Project(`"$solutionFolderGuid`") = `"$folderName`", `"$folderName`", `"$guid`""
$lines.Insert($index, $txt)
$lines.Insert($index+1, "EndProject")
[System.IO.File]::WriteAllLines($solutionFile, $lines)
}
AddFolderToSolution "NewFolder10" "D:Solution1.sln"
现在,我想将几个文件复制到解决方案文件夹(NewFolder10)中。我该如何使用PowerShell?
解决方案文件夹不是物理文件夹,您要将文件放到解决方案文件夹的文件中应该存在,您只应该添加对这些文件的引用到您的解决方案文件。
应将这些解决方案项目作为解决方案文件中的ProjectSection(SolutionItems) = preProject
的孩子,具有此格式relative path to file = relative path to file
。
例如,我想您想添加一个名为 SolutionItems
的解决方案文件夹,然后将file1.txt和file2.txt放在该解决方案文件夹中。然后,如果这些文件存在于解决方案文件旁边的 SomeFolder
之类的物理文件夹中,则应将此文本添加到解决方案文件中:
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionItems", "B73A0302-952E-42D6-925D-ABCB95684477"
ProjectSection(SolutionItems) = preProject
..SomeFolderfile1.txt = ..SomeFolderfile1.txt
..SomeFolderfile2.txt = ..SomeFolderfile2.txt
EndProjectSection
EndProject
示例
这是一种将文件从目录复制到解决方案附近名为SolutionItems
文件夹的文件夹。然后添加一个解决方案文件夹命名 SolutionItems
(与物理文件夹相同的名称仅为清晰),并将这些复制的文件添加为解决方案项目:
Function AddFolderToSolution($folderPath, $solutionFile)
{
$solutionPath = Split-Path -Parent -Path $solutionFile
$folderName = "SolutionItems"
$destination = Join-Path $solutionPath $folderName
$solutionFolderGuid = "{2150E333-8FDC-42A3-9474-1A3956D46DE8}"
$content = [System.IO.File]::ReadLines($solutionFile)
$lines = New-Object System.Collections.Generic.List[string]
$lines.AddRange($content)
$index = $lines.IndexOf("Global")
$guid = [System.Guid]::NewGuid().ToString().ToUpper()
$range = New-Object System.Collections.Generic.List[string]
$range.Add(
"Project(`"$solutionFolderGuid`") = `"$folderName`", `"$folderName`", `"$guid`"")
$range.Add("`tProjectSection(SolutionItems) = preProject")
New-Item -Path $destination -ItemType Directory -Force
Get-ChildItem -Path $folderPath -File | Copy-Item -Destination $destination -Force
Get-ChildItem -Path $destination -File| ForEach-Object {
$itemName = Split-Path -Leaf -Path $_.FullName
$range.Add("`t`t..$folderName$itemName = ..$folderName$itemName")
}
$range.Add("`tEndProjectSection")
$range.Add("EndProject")
$lines.InsertRange($index, $range)
[System.IO.File]::WriteAllLines($solutionFile, $lines)
}
这是用法:
AddFolderToSolution "d:somefolder" "d:mysolutionSolution1.sln"
通过在上面的示例上运行,它将将文件从d:somefolder
复制到解决方案文件附近名为SolutionItems
的文件夹。然后,使用相同名称SolutionItems
添加A 解决方案文件夹,并将这些文件添加为解决方案项目。
自动将文件夹添加到解决方案中,您可以创建一个CSPROJ。我从一个Nodejs开始,然后将所有文件删除。这是我的csproj文件:
<Project Sdk="Microsoft.VisualStudio.JavaScript.Sdk/0.5.74-alpha">
</Project>
然后,它打开了它在其中的目录,并自动加载其下面的所有文件夹。
我将其作为潜在的简单解决方案,对于最终在这里搜索答案的人们。