Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: Install Dotnet
uses: actions/setup-dotnet@607fce577a46308457984d59e4954e075820f10a
with:
dotnet-version: '9.0.x'
dotnet-version: '10.0.x'

- name: Dotnet Installation Info
run: dotnet --info
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
- name: Install Dotnet
uses: actions/setup-dotnet@607fce577a46308457984d59e4954e075820f10a
with:
dotnet-version: '9.0.x'
dotnet-version: '10.0.x'

- name: Dotnet Installation Info
run: dotnet --info
Expand Down
98 changes: 51 additions & 47 deletions CSharpRepl.Services/CSharpRepl.Services.csproj
Original file line number Diff line number Diff line change
@@ -1,67 +1,71 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<Nullable>enable</Nullable>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Ben.Demystifier" Version="0.4.1" />
<PackageReference Include="ICSharpCode.Decompiler" Version="8.2.0.7535" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.11.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Features" Version="4.11.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="4.11.0" />
<PackageReference Include="Microsoft.Build.Locator" Version="1.7.8" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="9.0.0" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="9.0.0" />
<PackageReference Include="Microsoft.SymbolStore" Version="1.0.555801" />
<PackageReference Include="OpenAI" Version="2.1.0" />
<PackageReference Include="PrettyPrompt" Version="4.1.1" />
<PackageReference Include="Spectre.Console.Cli" Version="0.49.1" />
<PackageReference Include="System.IO.Abstractions" Version="21.1.3" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="9.0.0" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Ben.Demystifier" Version="0.4.1" />
<PackageReference Include="ICSharpCode.Decompiler" Version="9.1.0.7988" />
<PackageReference Include="Microsoft.CodeAnalysis.Analyzers" Version="3.11.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="5.0.0" />
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Features" Version="5.0.0" />
<PackageReference Include="Microsoft.CodeAnalysis.Workspaces.MSBuild" Version="5.0.0" />
<PackageReference Include="Microsoft.Build.Locator" Version="1.11.2" />
<PackageReference Include="Microsoft.Build.Framework" Version="18.0.2" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="Microsoft.Build" Version="18.0.2" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="Microsoft.Build.Tasks.Core" Version="18.0.2" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="Microsoft.Build.Utilities.Core" Version="18.0.2" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="10.0.1" />
<PackageReference Include="Microsoft.Extensions.DependencyModel" Version="10.0.1" />
<PackageReference Include="Microsoft.SymbolStore" Version="1.0.555801" />
<PackageReference Include="OpenAI" Version="2.7.0" />
<PackageReference Include="PrettyPrompt" Version="4.1.1" />
<PackageReference Include="Spectre.Console.Cli" Version="0.53.1" />
<PackageReference Include="System.IO.Abstractions" Version="22.1.0" />
<PackageReference Include="System.Configuration.ConfigurationManager" Version="10.0.1" />
</ItemGroup>

<!--
<!--
Use PrivateAssets for nuget dependencies, so we load the nuget dlls that are
bundled from the host runtime instead.
https://github.com/microsoft/qsharp-compiler/issues/1470
https://github.com/OmniSharp/omnisharp-roslyn/commit/efeafeca33abe1d19659ed8c7ebab1d7c3481188
-->
<ItemGroup>
<PackageReference Include="NuGet.PackageManagement" Version="6.12.1" />
<PackageReference Include="NuGet.Common" Version="6.12.1" PrivateAssets="all" />
<PackageReference Include="NuGet.Commands" Version="6.12.1" PrivateAssets="all" />
<PackageReference Include="NuGet.Credentials" Version="6.12.1" PrivateAssets="all" />
<PackageReference Include="NuGet.Configuration" Version="6.12.1" PrivateAssets="all" />
<PackageReference Include="NuGet.DependencyResolver.Core" Version="6.12.1" PrivateAssets="all" />
<PackageReference Include="NuGet.Frameworks" Version="6.12.1" PrivateAssets="all" />
<PackageReference Include="NuGet.LibraryModel" Version="6.12.1" PrivateAssets="all" />
<PackageReference Include="NuGet.Packaging.Core" Version="6.9.1" PrivateAssets="all" />
<PackageReference Include="NuGet.Packaging" Version="6.12.1" PrivateAssets="all" />
<PackageReference Include="NuGet.ProjectModel" Version="6.12.1" PrivateAssets="all" />
<PackageReference Include="NuGet.Protocol" Version="6.12.1" PrivateAssets="all" />
<PackageReference Include="NuGet.Versioning" Version="6.12.1" PrivateAssets="all" />
<ItemGroup>
<PackageReference Include="NuGet.PackageManagement" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.Common" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.Commands" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.Credentials" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.Configuration" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.DependencyResolver.Core" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.Frameworks" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.LibraryModel" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.Packaging.Core" Version="6.9.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.Packaging" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.ProjectModel" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.Protocol" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
<PackageReference Include="NuGet.Versioning" Version="7.0.1" PrivateAssets="all" ExcludeAssets="runtime" />
</ItemGroup>


<ItemGroup>
<InternalsVisibleTo Include="CSharpRepl.Tests" />
</ItemGroup>
<InternalsVisibleTo Include="CSharpRepl.Tests" />
</ItemGroup>


<ItemGroup>
<EmbeddedResource Include="RuntimeHelper.cs" />
<EmbeddedResource Include="RuntimeHelper.cs" />
</ItemGroup>

<ItemGroup>
<None Update="runtime.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<None Update="runtime.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
</ItemGroup>

</Project>
68 changes: 34 additions & 34 deletions CSharpRepl.Tests/CSharpRepl.Tests.csproj
Original file line number Diff line number Diff line change
@@ -1,41 +1,41 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net9.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net10.0</TargetFramework>
<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<Compile Remove="Data\**" />
</ItemGroup>
<ItemGroup>
<Compile Remove="Data\**" />
</ItemGroup>

<ItemGroup>
<Content Include="Data\**" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>
<ItemGroup>
<Content Include="Data\**" CopyToOutputDirectory="PreserveNewest" />
</ItemGroup>

<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.11.1" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="PrettyPrompt" Version="4.1.1" />
<PackageReference Include="Spectre.Console.Testing" Version="0.49.1" />
<PackageReference Include="System.IO.Abstractions.TestingHelpers" Version="21.1.3" />
<PackageReference Include="xunit" Version="2.9.2" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.8.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.msbuild" Version="6.0.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="18.0.1" />
<PackageReference Include="NSubstitute" Version="5.3.0" />
<PackageReference Include="PrettyPrompt" Version="4.1.1" />
<PackageReference Include="Spectre.Console.Testing" Version="0.54.0" />
<PackageReference Include="System.IO.Abstractions.TestingHelpers" Version="22.1.0" />
<PackageReference Include="xunit" Version="2.9.3" />
<PackageReference Include="xunit.runner.visualstudio" Version="3.1.5">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="6.0.4">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.msbuild" Version="6.0.4">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>

<ItemGroup>
<ProjectReference Include="..\CSharpRepl.Services\CSharpRepl.Services.csproj" />
<ProjectReference Include="..\CSharpRepl\CSharpRepl.csproj" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\CSharpRepl.Services\CSharpRepl.Services.csproj" />
<ProjectReference Include="..\CSharpRepl\CSharpRepl.csproj" />
</ItemGroup>
</Project>
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<OutputType>Exe</OutputType>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="System.Management" Version="6.0.0" />
<PackageReference Include="System.Management" Version="10.0.0" />
</ItemGroup>

</Project>
4 changes: 2 additions & 2 deletions CSharpRepl.Tests/Data/WebApplication1.runtimeconfig.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
{
"runtimeOptions": {
"tfm": "net6.0",
"tfm": "net10.0",
"framework": {
"name": "Microsoft.AspNetCore.App",
"version": "6.0.0"
"version": "10.0.0"
},
"configProperties": {
"System.GC.Server": true,
Expand Down
81 changes: 79 additions & 2 deletions CSharpRepl.Tests/DotNetInstallationLocatorTest.cs
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
using System;
using CSharpRepl.Services.Roslyn.References;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Abstractions.TestingHelpers;
using CSharpRepl.Services.Roslyn.References;
using System.Runtime.InteropServices;
using Xunit;

namespace CSharpRepl.Tests;
Expand Down Expand Up @@ -41,6 +42,82 @@ public void GetSharedFrameworkConfiguration_Net5GlobalInstallation_IsLocated()
);
}

[Fact]
public void GetSharedFrameworkConfiguration_Net10Installation_IsLocated()
{
var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
{ @"/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/data/FrameworkList.xml", string.Empty },
{ @"/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/9.0.0/ref/net9.0/Microsoft.CSharp.dll", string.Empty },
{ @"/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/data/FrameworkList.xml", string.Empty },
{ @"/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.0/ref/net10.0/Microsoft.CSharp.dll", string.Empty },
{ @"/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.1/data/FrameworkList.xml", string.Empty },
{ @"/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.1/ref/net10.0/Microsoft.CSharp.dll", string.Empty },

{ @"/Program Files/dotnet/shared/Microsoft.NETCore.App/9.0.2/Microsoft.CSharp.dll", string.Empty },
{ @"/Program Files/dotnet/shared/Microsoft.NETCore.App/10.0.0/Microsoft.CSharp.dll", string.Empty },
{ @"/Program Files/dotnet/shared/Microsoft.NETCore.App/10.0.1/Microsoft.CSharp.dll", string.Empty }
});

var locator = new DotNetInstallationLocator(
logger: new TestTraceLogger(), io: fileSystem,
dotnetRuntimePath: @"/Program Files/dotnet/",
userProfilePath: @"/Users/bob/"
);

var (refPath, implPath) = locator.FindInstallation("Microsoft.NETCore.App", new Version(10, 0, 1));

Assert.Equal(
CrossPlatform(@"/Program Files/dotnet/packs/Microsoft.NETCore.App.Ref/10.0.1/ref/net10.0"),
CrossPlatform(refPath)
);
Assert.Equal(
CrossPlatform(@"/Program Files/dotnet/shared/Microsoft.NETCore.App/10.0.1"),
CrossPlatform(implPath)
);
}

[Fact]
public void GetSharedFrameworkConfiguration_Net10UsesNuGetWhenNotInstalledGlobally()
{
string platform = OperatingSystem.IsWindows() ? "win"
: OperatingSystem.IsLinux() ? "linux"
: OperatingSystem.IsMacOS() ? "osx"
: null;

var architecture = RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();

var fileSystem = new MockFileSystem(new Dictionary<string, MockFileData>
{
// existing global runtimes but none for net10
{ @"/Program Files/dotnet/shared/Microsoft.NETCore.App/9.0.0/Microsoft.CSharp.dll", string.Empty },

// reference assemblies in .nuget installation
{ @"/Users/bob/.nuget/packages/microsoft.netcore.app.ref/10.0.0/data/FrameworkList.xml", string.Empty },
{ @"/Users/bob/.nuget/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0/Microsoft.CSharp.dll", string.Empty },

// implementation assemblies in .nuget installation
{ @$"/Users/bob/.nuget/packages/microsoft.netcore.app.runtime.{platform}-{architecture}/10.0.0/runtimes/{platform}-{architecture}/lib/net10.0/Microsoft.CSharp.dll", string.Empty },
});

var locator = new DotNetInstallationLocator(
logger: new TestTraceLogger(), io: fileSystem,
dotnetRuntimePath: @"/Program Files/dotnet/",
userProfilePath: @"/Users/bob/"
);

var (refPath, implPath) = locator.FindInstallation("Microsoft.NETCore.App", new Version(10, 0, 0));

Assert.Equal(
CrossPlatform(@"/Users/bob/.nuget/packages/microsoft.netcore.app.ref/10.0.0/ref/net10.0"),
CrossPlatform(refPath)
);
Assert.Equal(
CrossPlatform(@$"/Users/bob/.nuget/packages/microsoft.netcore.app.runtime.{platform}-{architecture}/10.0.0/runtimes/{platform}-{architecture}/lib/net10.0"),
CrossPlatform(implPath)
);
}

[Fact]
public void GetSharedFrameworkConfiguration_NoGlobalNet5ReferenceAssemblies_UsesNuGetInstallation()
{
Expand Down
2 changes: 1 addition & 1 deletion CSharpRepl.Tests/EvaluationTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -185,7 +185,7 @@ public async Task Evaluate_ResolveCorrectRuntimeVersionOfReferencedAssembly()
var (buildExitCode, _) = builder.Build("./Data/DemoSolution/DemoSolution.DemoProject3");
Assert.Equal(0, buildExitCode);

var referenceResult = await services.EvaluateAsync(@"#r ""./Data/DemoSolution/DemoSolution.DemoProject3/bin/Debug/net6.0/DemoSolution.DemoProject3.dll""");
var referenceResult = await services.EvaluateAsync(@"#r ""./Data/DemoSolution/DemoSolution.DemoProject3/bin/Debug/net10.0/DemoSolution.DemoProject3.dll""");
var importResult = await services.EvaluateAsync(@"DemoSolution.DemoProject3.DemoClass3.GetSystemManagementPath()");

Assert.IsType<EvaluationResult.Success>(referenceResult);
Expand Down
Loading