3

Visual Studio でビルド時間の問題を調べているときに、システム モニターを使用すると、.net 参照アセンブリ フォルダーから多くのファイルを読み取っていることがわかります。

.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 に答える