3

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

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

4

1 回答 1

0

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

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

在阅读 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 的值

很想知道这是否适合你!

于 2013-07-10T12:09:10.690 回答