更改Ram磁盘的Visual Studio构建路径

M.k*_*ary 6 build visual-studio visual-studio-2017

目前我有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磁盘的好处显然超重了它的缺点.

好的,既然我说服了你,为什么我想要这个给我路径:)

PEK*_*PEK 3

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

\n\n

相反,您将 bin 和 obj 目录更改为 ramdisk 的符号链接。这不会影响您的项目和解决方案文件(除了 git 可能将此链接视为文件,因此您可能需要将它们添加到 .gitignore 中)。

\n\n

我\xe2\x80\x99创建了两个Powershell脚本来管理它。I\xe2\x80\x99m 在与解决方案文件相同的目录中运行它们。请注意,当您运行这些目录时,bin- 和 obj 目录将被删除。

\n\n

此脚本将删除所有目录中的 bin 和 obj 文件夹,其中这些文件夹是 csproj 文件,并将它们替换为符号链接:

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

该脚本将删除符号链接:

\n\n
# Find all project files...\n$projectFiles = Get-ChildItem -Filter *.csproj -Recurse \n# Get project directories\n$projectDirectories = $projectFiles | ForEach-Object { $_.DirectoryName } | Get-Unique\n\n\n# Unlink bin-directories to ramdisk\n$projectDirectories | ForEach-Object { cmd /c rmdir "$($_)\\bin"   }\n\n# Unlink obj-directories to ramdisk\n$projectDirectories | ForEach-Object { cmd /c rmdir "$($_)\\obj"   }\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

综上所述,根据我的经验,使用 RAM 磁盘而不是 SSD 驱动器没有重大区别。它更快,但没有你想象的那么快。

\n