【问题标题】:Does the .net Reference Assemblies folder have to be on the system drive?.net Reference Assemblies 文件夹是否必须在系统驱动器上?
【发布时间】:2012-10-30 20:23:29
【问题描述】:

在查看 Visual Studio 中的构建时间问题时,我发现使用 System Monitor 它正在从 .net Reference Assemblies 文件夹中读取大量文件。

.net Reference Assemblies 文件夹位于作为普通驱动器的系统驱动器上;但是我们在每台机器上都有一个 SSD。那我可以把它移到 SSD 上吗?

【问题讨论】:

  • 您可以将这些文件移动到 SSD 并创建一个从原始目录到新目录的连接点(使用 mklink 或类似名称)
  • FWIW 通过将 SSD 设为系统驱动器(如果可能),您可能会看到全面的显着改进。

标签: .net performance assemblies


【解决方案1】:

老实说,我更喜欢 Tim Medora 的方法,因为它更简洁,整体上会给你带来很大的提升。我刚刚在我的工作笔记本电脑中安装了一个 SSD,这真是太棒了。

但是,是的,如果您真的想的话,我认为您可以将参考程序集从系统驱动器中复制出来。我认为它不受 Microsoft 支持,但我认为它会起作用。

在阅读了 ResolveAssemblyReference 是与该参考程序集文件夹最密切相关的任务之后,我在 Microsoft.Common.targets 中进行了一些挖掘。

然后我发现了这个(我专门看的是3.5,x64版本):

<!--
============================================================
                                    GetReferenceAssemblyPaths

Get the paths for the Reference Assemblies for the known versions of the
.NET Framework.

These paths are used by the build process in order to resolve the correct
assemblies from the various directories, and to support multi-targeting
============================================================
-->
<PropertyGroup>
    <GetReferenceAssemblyPathsDependsOn></GetReferenceAssemblyPathsDependsOn>
</PropertyGroup>
<Target
    Name="GetReferenceAssemblyPaths"
    DependsOnTargets="$(GetReferenceAssemblyPathsDependsOn)">

    <!-- Ordering of target framework directories doesn't matter except for assemblies
         that aren't in a redist list; for those, make sure we order 3.5, 3.0, 2.0 -->

    <PropertyGroup Condition=" '$(TargetFrameworkVersion)' == 'v3.0' or '$(TargetFrameworkVersion)' == 'v3.5' ">        
        <TargetFrameworkDirectory>$(WinFXAssemblyDirectory);$(TargetFrameworkDirectory)</TargetFrameworkDirectory>
    </PropertyGroup>

    <PropertyGroup Condition=" '$(TargetFrameworkVersion)' == 'v3.5' ">        
        <TargetFrameworkDirectory>$(Registry:HKEY_LOCAL_MACHINE\Software\Microsoft\.NETFramework\AssemblyFolders\v3.5@All Assemblies In);$(TargetFrameworkDirectory)</TargetFrameworkDirectory>
    </PropertyGroup>

</Target>

注意 TargetFrameworkDirectory 属性的注册表位置 - 果然,它指向该引用程序集文件夹。

我可以看到 3 个选项 - 可能还有其他选项:

  1. 为 .NET 版本更改适当的 .targets 文件并硬编码系统路径
  2. 更改注册表项(这可能会导致严重的副作用)
  3. 尝试在构建时使用 MSBuild 覆盖 TargetFrameworkDirectory 的值

很想知道这是否适合您!

【讨论】:

    猜你喜欢
    • 2018-07-02
    • 1970-01-01
    • 2011-04-07
    • 2020-10-27
    • 2012-06-15
    • 2012-05-30
    • 1970-01-01
    • 2020-10-27
    • 2013-07-09
    相关资源
    最近更新 更多