当前我有Visual Studio 17 V 15.4.2

是否可以为项目设置不同的构建路径?例如代替
C:\Users\[UserName]\source\repos\[MyProject]\[bin|obj]
继续前进
M:\Users\[UserName]\source\repos\[MyProject]\[bin|obj]
请注意,项目本身位于C内部,但临时文件已移至其他位置。我有M驱动器,它是一个16GB的ram磁盘。

使用RAM磁盘的好处:(促使我这样做的原因)

  • 更快的构建时间(无实际IO)
  • SSD不会因重复重建而磨损。
  • 固有地清理
  • 项目(带来以下好处)
  • 共享速度更快,您的项目不会充满不必要的文件,因此您可以轻松地与其他人共享文件夹。 (代码大小通常小于1MB,但构建对象可以超过1GB)
  • 快速备份,出于同样的原因,您的项目文件夹也始终保持清理状态,因此您可以更快地备份项目。 (尤其是当您有许多项目时,例如,您将仅备份100MB而不是10GB)
  • 创建锁定文件的机会较小。 (这会导致构建不同步,错误等),在这种情况下,格式化ramdisk比使用VS设置或重新启动它更容易。

  • 缺点:
  • 您需要更多的RAM,在我的情况下,我有32GB的空间,可以为它保留16GB的空间。
  • 如果您重置VS或计算机,则会丢失已编译的对象,并且必须重建(一次)

  • 但是使用RAM磁盘的好处显然会加重它的缺点。

    好吧,现在我已经合理地说服了您,为什么我要给我提供路径:)

    最佳答案

    可以更改应使用bin-path和obj-path的项目文件(至少对于.NET应用程序而言)。但是您需要在每个项目上手动更改此设置。而且,如果您检查这些更改,可能会给尝试构建的其他人带来问题。

    相反,您可以将bin和obj目录更改为指向虚拟磁盘的符号链接(symbolic link)。这不会影响您的项目和解决方案文件(除了git可能将此链接视为文件,因此您可能希望将这些链接添加到.gitignore中)。

    我创建了两个Powershell脚本来进行管理。我在解决方案文件所在的目录中运行这些文件。请注意,运行这些目录时将删除bin-和obj目录。

    该脚本将删除所有csproj文件所在目录中的bin和obj文件夹,并用符号链接(symbolic link)替换它们:

    $ramDiskDrive = "R:"
    
    # Find all project files...
    $projectFiles = Get-ChildItem -Filter *.csproj -Recurse
    # Get project directories
    $projectDirectories = $projectFiles | ForEach-Object { $_.DirectoryName } | Get-Unique
    
    
    # Create a bin-directory on the RAM-drive
    $projectDirectories | ForEach-Object { New-Item -ItemType Directory -Force -Path "$ramDiskDrive$($_.Substring(2))\bin" }
    
    # Remove existing bin-directories
    $projectDirectories | ForEach-Object { Remove-Item "$($_)\bin" -Force -Recurse }
    
    # Link bin-directories to ramdisk
    $projectDirectories | ForEach-Object { cmd /c mklink /D "$($_)\bin" "$ramDiskDrive$($_.Substring(2))\bin" }
    
    
    # Create a obj-directory on the RAM-drive
    $projectDirectories | ForEach-Object { New-Item -ItemType Directory -Force -Path "$ramDiskDrive$($_.Substring(2))\obj" }
    
    # Remove existing obj-directories
    $projectDirectories | ForEach-Object { Remove-Item "$($_)\obj" -Force -Recurse }
    
    # Link obj-directories to ramdisk
    $projectDirectories | ForEach-Object { cmd /c mklink /D "$($_)\obj" "$ramDiskDrive$($_.Substring(2))\obj" }
    

    该脚本将删除符号链接(symbolic link):
    # Find all project files...
    $projectFiles = Get-ChildItem -Filter *.csproj -Recurse
    # Get project directories
    $projectDirectories = $projectFiles | ForEach-Object { $_.DirectoryName } | Get-Unique
    
    
    # Unlink bin-directories to ramdisk
    $projectDirectories | ForEach-Object { cmd /c rmdir "$($_)\bin"   }
    
    # Unlink obj-directories to ramdisk
    $projectDirectories | ForEach-Object { cmd /c rmdir "$($_)\obj"   }
    

    如果您两次运行相同的脚本,则会收到错误消息,但是可以忽略这些错误消息。

    综上所述,根据我的经验,使用RAM磁盘而不是SSD驱动器没有太大区别。它速度更快,但没有您期望的那么快。

    关于visual-studio - 更改Ram盘的Visual Studio构建路径,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47071194/

    10-12 00:18
    查看更多