Skip to content

Commit 8a94707

Browse files
committed
Use ProjectReference items in inbox src projects
There are numerous benefits in using ProjectReferences consistently in all libraries: 1. An upfront "libs" build isn't required anymore and sfx libraries can now directly be built from a fresh clone (with dotnet build or inside VS). I.e. `dotnet.cmd pack src/libraries/System.Text.Json/src/` is now possible from a fresh clone. 2. Because of 1), we can now add a solution file for the whole sfx that can directly be opened and worked with from a fresh clone. 3. The overall root build is faster. Without this change, the build order was sfx-ref -> (sfx-src & sfx-gen) so the shared framework reference projects first had to be built and only then the sfx src and gen projects could be built. Now with this change, everything gets built in parallel. 4. Using P2Ps means that we now follow the common and well supported msbuild and SDK path instead of repo customization. The downside of doing this is that the dependency graph gets bigger, meaning that more projects get incrementally built when doing a "dotnet build". This is nothing new and the SDK team recommends to pass the "--no-dependencies" flag to "dotnet build" if incrementally (no-op) building the additional dependency nodes is noticeable. This is less of a concern inside VS as that has a "fast up-to-date check" feature that doesn't even attempt to build projects that didn't change. For VS, really the only noticeable change is that the solution explorer now lists more projects and that when opening a solution, more projects need to be evaluated. But, that should be fast enough when using an up-to-date version of VS. - A few observations that make the change more involved: There's a NuGet client bug that requires a few workarounds: NuGet/Home#10368 Because of that, direct package refs to System.Numerics.Vectors and in a few cases to System.Memory are required. We should fix the NuGet tooling issue to eventually get rid of the workarounds introduced with this commit. There was already a PR in NuGet.Client open but it was closed because of staleness. - System.Data.Common.csproj is a weird project as it references CoreLib and reference assemblies. I had to disable transitive project references in order for type universes to not clash and explicitly set CompileUsingReferenceAssemblies=true as that gets set to false when the library explicitly references CoreLib.
1 parent 2691fc8 commit 8a94707

File tree

104 files changed

+860
-837
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

104 files changed

+860
-837
lines changed

eng/Versions.props

+1
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@
119119
<SystemDrawingCommonVersion>8.0.0</SystemDrawingCommonVersion>
120120
<SystemIOFileSystemAccessControlVersion>5.0.0</SystemIOFileSystemAccessControlVersion>
121121
<SystemMemoryVersion>4.5.5</SystemMemoryVersion>
122+
<SystemNumericsVectorsVersion>4.5.0</SystemNumericsVectorsVersion>
122123
<SystemReflectionMetadataVersion>9.0.0-rc.1.24410.5</SystemReflectionMetadataVersion>
123124
<SystemReflectionMetadataLoadContextVersion>9.0.0-rc.1.24410.5</SystemReflectionMetadataLoadContextVersion>
124125
<SystemSecurityAccessControlVersion>6.0.0</SystemSecurityAccessControlVersion>

eng/generators.targets

+5-1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
'$(DisableImplicitFrameworkReferences)' == 'true' and
2828
(
2929
'@(Reference->AnyHaveMetadataValue('Identity', 'System.Runtime.InteropServices'))' == 'true' or
30+
'@(ProjectReference->AnyHaveMetadataValue('Filename', 'System.Runtime.InteropServices'))' == 'true' or
3031
'@(ProjectReference->AnyHaveMetadataValue('Identity', '$(CoreLibProject)'))' == 'true'
3132
)
3233
)
@@ -39,7 +40,10 @@
3940
'$(MSBuildProjectExtension)' == '.csproj' and
4041
(
4142
'$(DisableImplicitFrameworkReferences)' == 'true' and
42-
'@(Reference->AnyHaveMetadataValue('Identity', 'System.Runtime.InteropServices'))' == 'true'
43+
(
44+
'@(Reference->AnyHaveMetadataValue('Identity', 'System.Runtime.InteropServices'))' == 'true' or
45+
'@(ProjectReference->AnyHaveMetadataValue('Filename', 'System.Runtime.InteropServices'))' == 'true'
46+
)
4347
)" />
4448
</ItemGroup>
4549

eng/resolveContract.targets

+3-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@
3939
<!-- Allow P2Ps that target a source project to build against the corresponding ref project. -->
4040
<Target Name="AnnotateTargetPathWithTargetPlatformMonikerWithReferenceAssembly"
4141
Condition="'$(AnnotateTargetPathWithContract)' == 'true'"
42-
DependsOnTargets="ResolveProjectReferences"
43-
AfterTargets="GetTargetPathWithTargetPlatformMoniker">
42+
DependsOnTargets="ResolveProjectReferences;GetTargetPathWithTargetPlatformMoniker"
43+
BeforeTargets="GetTargetPath">
4444
<ItemGroup>
4545
<TargetPathWithTargetPlatformMoniker ReferenceAssembly="@(ResolvedMatchingContract)" />
4646
</ItemGroup>
@@ -119,6 +119,7 @@
119119
<PropertyGroup>
120120
<!-- Let GenFacades use roslyn from the toolset package as it loads sources which might require newer language features. -->
121121
<GenFacadesUseRoslynToolsetPackagePath>true</GenFacadesUseRoslynToolsetPackagePath>
122+
<GenFacadesReferencePathItemName>ReferencePathWithRefAssemblies</GenFacadesReferencePathItemName>
122123
</PropertyGroup>
123124

124125
<!-- ##### GenAPI settings ##### -->

eng/targetingpacks.targets

-20
Original file line numberDiff line numberDiff line change
@@ -89,26 +89,6 @@
8989
Condition="'$(UseLocalAppHostPack)' == 'true' and '@(KnownAppHostPack->AnyHaveMetadataValue('TargetFramework', '$(NetCoreAppCurrent)'))' != 'true'" />
9090
</ItemGroup>
9191

92-
<!-- Simple name references will be resolved from the targeting pack folders and should never be copied to the output. -->
93-
<ItemGroup>
94-
<Reference Update="@(Reference)">
95-
<Private Condition="'%(Reference.Extension)' != '.dll'">false</Private>
96-
</Reference>
97-
</ItemGroup>
98-
99-
<!-- Add the resolved targeting pack to the assembly search path. -->
100-
<Target Name="UseTargetingPackForAssemblySearchPaths"
101-
BeforeTargets="ResolveAssemblyReferences;
102-
DesignTimeResolveAssemblyReferences"
103-
Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp' and
104-
'$(TargetFrameworkVersion)' == 'v$(NetCoreAppCurrentVersion)' and
105-
'$(DisableImplicitFrameworkReferences)' == 'true'">
106-
<PropertyGroup>
107-
<AssemblySearchPaths>$(AssemblySearchPaths);$(MicrosoftNetCoreAppRefPackRefDir.TrimEnd('/\'))</AssemblySearchPaths>
108-
<DesignTimeAssemblySearchPaths>$(DesignTimeAssemblySearchPaths);$(MicrosoftNetCoreAppRefPackRefDir.TrimEnd('/\'))</DesignTimeAssemblySearchPaths>
109-
</PropertyGroup>
110-
</Target>
111-
11292
<!--
11393
SDK tries to download the ILCompiler runtime packs.
11494
TODO: Remove this target when a 9.0.100 SDK is consumed that respects EnableRuntimePackDownload for the ILCompiler.

src/libraries/Directory.Build.targets

+7
Original file line numberDiff line numberDiff line change
@@ -228,4 +228,11 @@
228228
</ItemGroup>
229229
</When>
230230
</Choose>
231+
232+
<!-- Required to work around https://github.com/NuGet/Home/issues/10368. -->
233+
<ItemGroup Condition="('$(IsTestProject)' == 'true' or '$(IsTestSupportProject)' == 'true') and '$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
234+
<PackageReference Include="System.Memory" Version="$(SystemMemoryVersion)" PrivateAssets="all" Condition="'@(PackageReference->AnyHaveMetadataValue('Identity', 'System.Memory'))' != 'true'" />
235+
<PackageReference Include="System.Numerics.Vectors" Version="$(SystemNumericsVectorsVersion)" PrivateAssets="all" Condition="'@(PackageReference->AnyHaveMetadataValue('Identity', 'System.Numerics.Vectors'))' != 'true'" />
236+
</ItemGroup>
237+
231238
</Project>

src/libraries/Microsoft.CSharp/src/Microsoft.CSharp.csproj

+16-14
Original file line numberDiff line numberDiff line change
@@ -238,23 +238,25 @@
238238
<Compile Include="Microsoft\CSharp\RuntimeBinder\ComInterop\VariantArgBuilder.cs" />
239239
<Compile Include="Microsoft\CSharp\RuntimeBinder\ComInterop\VariantArray.cs" />
240240
<Compile Include="Microsoft\CSharp\RuntimeBinder\ComInterop\VariantBuilder.cs" />
241-
242-
<Reference Include="System.Reflection.Emit" />
243-
<Reference Include="System.Reflection.Emit.ILGeneration" />
244-
<Reference Include="System.Reflection.Emit.Lightweight" />
245-
<Reference Include="System.Reflection.Primitives" />
246241
</ItemGroup>
247242

248243
<ItemGroup>
249-
<Reference Include="System.Collections" />
250-
<Reference Include="System.Collections.Concurrent" />
251-
<Reference Include="System.Linq" />
252-
<Reference Include="System.Linq.Expressions" />
253-
<Reference Include="System.Memory" />
254-
<Reference Include="System.ObjectModel" />
255-
<Reference Include="System.Runtime" />
256-
<Reference Include="System.Runtime.InteropServices" />
257-
<Reference Include="System.Threading" />
244+
<ProjectReference Include="$(LibrariesProjectRoot)System.Collections\src\System.Collections.csproj" />
245+
<ProjectReference Include="$(LibrariesProjectRoot)System.Collections.Concurrent\src\System.Collections.Concurrent.csproj" />
246+
<ProjectReference Include="$(LibrariesProjectRoot)System.Linq\src\System.Linq.csproj" />
247+
<ProjectReference Include="$(LibrariesProjectRoot)System.Linq.Expressions\src\System.Linq.Expressions.csproj" />
248+
<ProjectReference Include="$(LibrariesProjectRoot)System.Memory\src\System.Memory.csproj" />
249+
<ProjectReference Include="$(LibrariesProjectRoot)System.ObjectModel\src\System.ObjectModel.csproj" />
250+
<ProjectReference Include="$(LibrariesProjectRoot)System.Runtime\src\System.Runtime.csproj" />
251+
<ProjectReference Include="$(LibrariesProjectRoot)System.Runtime.InteropServices\src\System.Runtime.InteropServices.csproj" />
252+
<ProjectReference Include="$(LibrariesProjectRoot)System.Threading\src\System.Threading.csproj" />
253+
</ItemGroup>
254+
255+
<ItemGroup Condition="'$(EnableComBinder)'=='true'">
256+
<ProjectReference Include="$(LibrariesProjectRoot)System.Reflection.Emit\src\System.Reflection.Emit.csproj" />
257+
<ProjectReference Include="$(LibrariesProjectRoot)System.Reflection.Emit.ILGeneration\src\System.Reflection.Emit.ILGeneration.csproj" />
258+
<ProjectReference Include="$(LibrariesProjectRoot)System.Reflection.Emit.Lightweight\src\System.Reflection.Emit.Lightweight.csproj" />
259+
<ProjectReference Include="$(LibrariesProjectRoot)System.Reflection.Primitives\src\System.Reflection.Primitives.csproj" />
258260
</ItemGroup>
259261

260262
</Project>

src/libraries/Microsoft.Extensions.Configuration.Json/src/Microsoft.Extensions.Configuration.Json.csproj

+5
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,9 @@
2121
<ProjectReference Include="$(LibrariesProjectRoot)System.Text.Json\src\System.Text.Json.csproj" />
2222
</ItemGroup>
2323

24+
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
25+
<!-- Required to workaround https://github.com/NuGet/Home/issues/10368. -->
26+
<PackageReference Include="System.Numerics.Vectors" Version="$(SystemNumericsVectorsVersion)" PrivateAssets="all" />
27+
</ItemGroup>
28+
2429
</Project>

src/libraries/Microsoft.Extensions.Configuration.UserSecrets/src/Microsoft.Extensions.Configuration.UserSecrets.csproj

+5
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
Link="Common\System\ThrowHelper.cs" />
1717
</ItemGroup>
1818

19+
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
20+
<!-- Required to workaround https://github.com/NuGet/Home/issues/10368. -->
21+
<PackageReference Include="System.Numerics.Vectors" Version="$(SystemNumericsVectorsVersion)" PrivateAssets="all" />
22+
</ItemGroup>
23+
1924
<ItemGroup>
2025
<Content Include="buildTransitive\$(MSBuildProjectName).*"
2126
PackagePath="buildTransitive\netstandard2.0\;

src/libraries/Microsoft.Extensions.DependencyModel/src/Microsoft.Extensions.DependencyModel.csproj

+2
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ By default, the dependency manifest contains information about the application's
3838
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
3939
<PackageReference Include="System.Buffers" Version="$(SystemBuffersVersion)" />
4040
<PackageReference Include="System.Memory" Version="$(SystemMemoryVersion)" />
41+
<!-- Required to workaround https://github.com/NuGet/Home/issues/10368. -->
42+
<PackageReference Include="System.Numerics.Vectors" Version="$(SystemNumericsVectorsVersion)" PrivateAssets="all" />
4143
</ItemGroup>
4244

4345
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'">

src/libraries/Microsoft.Extensions.Hosting.WindowsServices/src/Microsoft.Extensions.Hosting.WindowsServices.csproj

+5
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@
3131
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Extensions.Logging.EventLog\src\Microsoft.Extensions.Logging.EventLog.csproj" />
3232
</ItemGroup>
3333

34+
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
35+
<!-- Required to workaround https://github.com/NuGet/Home/issues/10368. -->
36+
<PackageReference Include="System.Numerics.Vectors" Version="$(SystemNumericsVectorsVersion)" PrivateAssets="all" />
37+
</ItemGroup>
38+
3439
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETFramework'">
3540
<ProjectReference Include="$(LibrariesProjectRoot)System.ServiceProcess.ServiceController\src\System.ServiceProcess.ServiceController.csproj" />
3641
</ItemGroup>

src/libraries/Microsoft.Extensions.Hosting/src/Microsoft.Extensions.Hosting.csproj

+5
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@
5454
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Bcl.AsyncInterfaces\src\Microsoft.Bcl.AsyncInterfaces.csproj" />
5555
</ItemGroup>
5656

57+
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
58+
<!-- Required to workaround https://github.com/NuGet/Home/issues/10368. -->
59+
<PackageReference Include="System.Numerics.Vectors" Version="$(SystemNumericsVectorsVersion)" PrivateAssets="all" />
60+
</ItemGroup>
61+
5762
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'">
5863
<Reference Include="System.Runtime" />
5964
</ItemGroup>

src/libraries/Microsoft.Extensions.Logging.Console/src/Microsoft.Extensions.Logging.Console.csproj

+4-1
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,11 @@
5555
</ItemGroup>
5656

5757
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
58-
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Bcl.AsyncInterfaces\src\Microsoft.Bcl.AsyncInterfaces.csproj" />
5958
<PackageReference Include="System.Buffers" Version="$(SystemBuffersVersion)" />
59+
<!-- Required to workaround https://github.com/NuGet/Home/issues/10368. -->
60+
<PackageReference Include="System.Numerics.Vectors" Version="$(SystemNumericsVectorsVersion)" PrivateAssets="all" />
61+
62+
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Bcl.AsyncInterfaces\src\Microsoft.Bcl.AsyncInterfaces.csproj" />
6063
</ItemGroup>
6164

6265
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETFramework'">

src/libraries/Microsoft.Extensions.Logging.EventSource/src/Microsoft.Extensions.Logging.EventSource.csproj

+4-1
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,11 @@
4040

4141
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
4242
<PackageReference Include="System.Memory" Version="$(SystemMemoryVersion)" />
43-
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Bcl.AsyncInterfaces\src\Microsoft.Bcl.AsyncInterfaces.csproj" />
43+
<!-- Required to workaround https://github.com/NuGet/Home/issues/10368. -->
44+
<PackageReference Include="System.Numerics.Vectors" Version="$(SystemNumericsVectorsVersion)" PrivateAssets="all" />
4445
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="$(SystemRuntimeCompilerServicesUnsafeVersion)" />
46+
47+
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Bcl.AsyncInterfaces\src\Microsoft.Bcl.AsyncInterfaces.csproj" />
4548
</ItemGroup>
4649

4750
</Project>

src/libraries/Microsoft.VisualBasic.Core/src/Microsoft.VisualBasic.Core.vbproj

+27-21
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,40 @@
11
<Project Sdk="Microsoft.NET.Sdk">
2+
23
<PropertyGroup>
4+
<TargetFrameworks>$(NetCoreAppCurrent)-windows;$(NetCoreAppCurrent)</TargetFrameworks>
35
<NoVbRuntimeReference>true</NoVbRuntimeReference>
46
<VBRuntime>None</VBRuntime>
57
<OptionStrict>On</OptionStrict>
68
<OptionExplicit>On</OptionExplicit>
79
<OptionInfer>Off</OptionInfer>
810
<MyType>Empty</MyType>
911
<OptionCompare>Binary</OptionCompare>
10-
<WarningsNotAsErrors>42025</WarningsNotAsErrors>
12+
<WarningsNotAsErrors>$(WarningsNotAsErrors),42025</WarningsNotAsErrors>
1113
<DefineConstants>$(DefineConstants),LATEBINDING=True</DefineConstants>
1214
<NoWarn>$(NoWarn),CA1052,CA1510,CA1810,CA1822,CA2200</NoWarn>
1315
<!-- Avoid unused fields warnings in Unix build -->
1416
<AssemblyName>Microsoft.VisualBasic.Core</AssemblyName>
1517
<RemoveIntegerChecks>false</RemoveIntegerChecks>
1618
<RootNamespace />
17-
<TargetFrameworks>$(NetCoreAppCurrent);$(NetCoreAppCurrent)-windows</TargetFrameworks>
1819
<Nullable>disable</Nullable>
1920
<UseCompilerGeneratedDocXmlFile>false</UseCompilerGeneratedDocXmlFile>
2021
</PropertyGroup>
22+
2123
<!-- DesignTimeBuild requires all the TargetFramework Derived Properties to not be present in the first property group. -->
2224
<PropertyGroup>
2325
<TargetPlatformIdentifier>$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)'))</TargetPlatformIdentifier>
2426
<ILLinkDescriptorsXml Condition="'$(TargetPlatformIdentifier)' == 'windows'">$(MSBuildProjectDirectory)\ILLink\ILLink.Descriptors.Windows.xml</ILLinkDescriptorsXml>
2527
<DefineConstants Condition="'$(TargetPlatformIdentifier)' == 'windows'">$(DefineConstants),TARGET_WINDOWS=True</DefineConstants>
2628
<NoWarn Condition="'$(TargetPlatformIdentifier)' != 'windows'">$(NoWarn);CA1823</NoWarn>
2729
</PropertyGroup>
30+
2831
<ItemGroup Condition="'$(TargetPlatformIdentifier)' == 'windows'">
2932
<Compile Include="Microsoft\VisualBasic\Helpers\NativeMethods.vb" />
3033
<Compile Include="Microsoft\VisualBasic\Helpers\NativeTypes.vb" />
3134
<Compile Include="Microsoft\VisualBasic\Helpers\SafeNativeMethods.vb" />
3235
<Compile Include="Microsoft\VisualBasic\Helpers\UnsafeNativeMethods.vb" />
3336
</ItemGroup>
37+
3438
<ItemGroup>
3539
<Compile Include="Microsoft\VisualBasic\Collection.vb" />
3640
<Compile Include="Microsoft\VisualBasic\ComClassAttribute.vb" />
@@ -100,25 +104,27 @@
100104
<Compile Include="Microsoft\VisualBasic\VBFixedStringAttribute.vb" />
101105
<Compile Include="Microsoft\VisualBasic\VBMath.vb" />
102106
</ItemGroup>
107+
103108
<ItemGroup>
104-
<Reference Include="Microsoft.Win32.Primitives" />
105-
<Reference Include="Microsoft.Win32.Registry" />
106-
<Reference Include="System.Collections" />
107-
<Reference Include="System.Collections.NonGeneric" />
108-
<Reference Include="System.Collections.Specialized" />
109-
<Reference Include="System.ComponentModel.Primitives" />
110-
<Reference Include="System.Diagnostics.Process" />
111-
<Reference Include="System.IO.FileSystem.DriveInfo" />
112-
<Reference Include="System.Linq" />
113-
<Reference Include="System.Linq.Expressions" />
114-
<Reference Include="System.ObjectModel" />
115-
<Reference Include="System.Reflection.Emit.ILGeneration" />
116-
<Reference Include="System.Reflection.Emit.Lightweight" />
117-
<Reference Include="System.Reflection.Primitives" />
118-
<Reference Include="System.Runtime" />
119-
<Reference Include="System.Runtime.InteropServices" />
120-
<Reference Include="System.Text.RegularExpressions" />
121-
<Reference Include="System.Threading" />
122-
<Reference Include="System.Threading.Thread" />
109+
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Win32.Primitives\src\Microsoft.Win32.Primitives.csproj" />
110+
<ProjectReference Include="$(LibrariesProjectRoot)Microsoft.Win32.Registry\src\Microsoft.Win32.Registry.csproj" />
111+
<ProjectReference Include="$(LibrariesProjectRoot)System.Collections.NonGeneric\src\System.Collections.NonGeneric.csproj" />
112+
<ProjectReference Include="$(LibrariesProjectRoot)System.Collections.Specialized\src\System.Collections.Specialized.csproj" />
113+
<ProjectReference Include="$(LibrariesProjectRoot)System.Collections\src\System.Collections.csproj" />
114+
<ProjectReference Include="$(LibrariesProjectRoot)System.ComponentModel.Primitives\src\System.ComponentModel.Primitives.csproj" />
115+
<ProjectReference Include="$(LibrariesProjectRoot)System.Diagnostics.Process\src\System.Diagnostics.Process.csproj" />
116+
<ProjectReference Include="$(LibrariesProjectRoot)System.IO.FileSystem.DriveInfo\src\System.IO.FileSystem.DriveInfo.csproj" />
117+
<ProjectReference Include="$(LibrariesProjectRoot)System.Linq.Expressions\src\System.Linq.Expressions.csproj" />
118+
<ProjectReference Include="$(LibrariesProjectRoot)System.Linq\src\System.Linq.csproj" />
119+
<ProjectReference Include="$(LibrariesProjectRoot)System.ObjectModel\src\System.ObjectModel.csproj" />
120+
<ProjectReference Include="$(LibrariesProjectRoot)System.Reflection.Emit.ILGeneration\src\System.Reflection.Emit.ILGeneration.csproj" />
121+
<ProjectReference Include="$(LibrariesProjectRoot)System.Reflection.Emit.Lightweight\src\System.Reflection.Emit.Lightweight.csproj" />
122+
<ProjectReference Include="$(LibrariesProjectRoot)System.Reflection.Primitives\src\System.Reflection.Primitives.csproj" />
123+
<ProjectReference Include="$(LibrariesProjectRoot)System.Runtime.InteropServices\src\System.Runtime.InteropServices.csproj" />
124+
<ProjectReference Include="$(LibrariesProjectRoot)System.Runtime\src\System.Runtime.csproj" />
125+
<ProjectReference Include="$(LibrariesProjectRoot)System.Text.RegularExpressions\src\System.Text.RegularExpressions.csproj" />
126+
<ProjectReference Include="$(LibrariesProjectRoot)System.Threading.Thread\src\System.Threading.Thread.csproj" />
127+
<ProjectReference Include="$(LibrariesProjectRoot)System.Threading\src\System.Threading.csproj" />
123128
</ItemGroup>
129+
124130
</Project>

src/libraries/Microsoft.VisualBasic.Core/src/Microsoft/VisualBasic/Strings.vb

+3-3
Original file line numberDiff line numberDiff line change
@@ -732,19 +732,19 @@ EmptyFindString:
732732
While Start < ExpressionLength
733733
If Replacements = Count Then
734734
'We've made all the replacements the caller wanted so append the remaining string
735-
Builder.Append(Expression.Substring(Start))
735+
Builder.Append(Expression.AsSpan(Start))
736736
Exit While
737737
End If
738738

739739
FindLocation = Comparer.IndexOf(Expression, Find, Start, CompareFlags)
740740
If FindLocation < 0 Then
741741
'We didn't find the Find string append the rest of the string
742-
Builder.Append(Expression.Substring(Start))
742+
Builder.Append(Expression.AsSpan(Start))
743743
Exit While
744744
Else
745745
'Append to our string builder everything up to the found string, then
746746
'append the replacement
747-
Builder.Append(Expression.Substring(Start, FindLocation - Start))
747+
Builder.Append(Expression.AsSpan(Start, FindLocation - Start))
748748
Builder.Append(Replacement)
749749
Replacements += 1
750750

0 commit comments

Comments
 (0)