Skip to content
Merged
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
6 changes: 3 additions & 3 deletions src/sdk/eng/Versions.props
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@
<VersionFeature60>36</VersionFeature60>
<VersionFeature70>20</VersionFeature70>
<!-- This version should be N-1 (ie the currently released version) in the preview branch but N-2 in main so that workloads stay behind the unreleased version -->
<VersionFeature80>30</VersionFeature80>
<VersionFeature90>19</VersionFeature90>
<VersionFeature100>11</VersionFeature100>
<VersionFeature80>31</VersionFeature80>
<VersionFeature90>20</VersionFeature90>
<VersionFeature100>12</VersionFeature100>
<!-- Should be kept in sync with VersionFeature70. It should match the version of Microsoft.NET.ILLink.Tasks
referenced by the same 7.0 SDK that references the 7.0.VersionFeature70 runtime pack. -->
<_NET70ILLinkPackVersion>7.0.100-1.23211.1</_NET70ILLinkPackVersion>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ static Microsoft.DotNet.FileBasedPrograms.VirtualProjectBuilder.GetTempSubpath(s
static Microsoft.DotNet.FileBasedPrograms.VirtualProjectBuilder.GetVirtualProjectPath(string! entryPointFilePath) -> string!
static Microsoft.DotNet.FileBasedPrograms.VirtualProjectBuilder.IsValidEntryPointPath(string! entryPointFilePath, bool requireFileToExist = true) -> bool
static Microsoft.DotNet.FileBasedPrograms.VirtualProjectBuilder.TryGetEntryPointFilePathFromVirtualProjectPath(string! projectPath, out string? entryPointFilePath) -> bool
static Microsoft.DotNet.FileBasedPrograms.VirtualProjectBuilder.WriteProjectFile(System.IO.TextWriter! writer, System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.CSharpDirective!> directives, System.Collections.Generic.IEnumerable<(string! name, string! value)>! defaultProperties, bool isVirtualProject, string? entryPointFilePath = null, string? artifactsPath = null, bool includeRuntimeConfigInformation = true, string? userSecretsId = null, System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.VirtualProjectBuilder.ExplicitProjectItem> explicitProjectItems = default(System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.VirtualProjectBuilder.ExplicitProjectItem>)) -> void
static Microsoft.DotNet.FileBasedPrograms.VirtualProjectBuilder.WriteProjectFile(System.IO.TextWriter! writer, System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.CSharpDirective!> directives, System.Collections.Generic.IEnumerable<(string! name, string! value)>! defaultProperties, bool isVirtualProject, string? entryPointFilePath = null, string? artifactsPath = null, bool useLegacyArtifactsPath = false, bool includeRuntimeConfigInformation = true, string? userSecretsId = null, System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.VirtualProjectBuilder.ExplicitProjectItem> explicitProjectItems = default(System.Collections.Immutable.ImmutableArray<Microsoft.DotNet.FileBasedPrograms.VirtualProjectBuilder.ExplicitProjectItem>)) -> void
static Microsoft.DotNet.Utilities.Extensions.ToHashSet<T>(this System.Collections.Generic.IEnumerable<T>! source, System.Collections.Generic.IEqualityComparer<T>! comparer) -> System.Collections.Generic.HashSet<T>!
static Microsoft.DotNet.Utilities.Sha256Hasher.Hash(string! text) -> string!
static Microsoft.DotNet.Utilities.Sha256Hasher.HashWithNormalizedCasing(string! text) -> string!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ sealed class VirtualProjectBuilder

private (ImmutableArray<CSharpDirective> Original, ImmutableArray<CSharpDirective> Evaluated)? _evaluatedDirectives;

private bool? _useLegacyArtifactsPath;

internal string EntryPointFileFullPath { get; }

internal SourceFile EntryPointSourceFile
Expand Down Expand Up @@ -484,6 +486,7 @@ ImmutableArray<CSharpDirective> DeduplicateSdkDirectives(ImmutableArray<CSharpDi
isVirtualProject: true,
entryPointFilePath: EntryPointFileFullPath,
artifactsPath: ArtifactsPath,
useLegacyArtifactsPath: _useLegacyArtifactsPath == true,
includeRuntimeConfigInformation: RequestedTargets?.Any(static t => t is "Publish" or "Pack") != true);

var projectFileText = projectFileWriter.ToString();
Expand All @@ -500,6 +503,23 @@ ImmutableArray<CSharpDirective> DeduplicateSdkDirectives(ImmutableArray<CSharpDi

lastProject = (projectFileText, project, projectRoot);

// Preserve the legacy artifacts behavior when the .NET SDK imported its artifacts props but selected no layout.
// dotnet CLI has the latest SDK imported but other hosts like MSBuildWorkspace may not.
if (_useLegacyArtifactsPath is null)
{
var defaultArtifactsPathPropsImported = await project.GetPropertyValueAsync("_DefaultArtifactsPathPropsImported").ConfigureAwait(false);
var artifactsPathLocationType = await project.GetPropertyValueAsync("_ArtifactsPathLocationType").ConfigureAwait(false);

_useLegacyArtifactsPath =
string.Equals(defaultArtifactsPathPropsImported, bool.TrueString, StringComparison.OrdinalIgnoreCase) &&
string.IsNullOrEmpty(artifactsPathLocationType);

if (_useLegacyArtifactsPath == true)
{
return await CreateProjectInstanceNoEvaluation(projectCollection, directives, additionalGlobalProperties).ConfigureAwait(false);
}
}

return (project, projectRoot);

IProjectRootElement CreateProjectRootElement(string projectFileText, IProjectCollection projectCollection)
Expand Down Expand Up @@ -592,6 +612,7 @@ internal static void WriteProjectFile(
bool isVirtualProject,
string? entryPointFilePath = null,
string? artifactsPath = null,
bool useLegacyArtifactsPath = false,
bool includeRuntimeConfigInformation = true,
string? userSecretsId = null,
ImmutableArray<ExplicitProjectItem> explicitProjectItems = default)
Expand Down Expand Up @@ -628,14 +649,32 @@ internal static void WriteProjectFile(
Debug.Assert(!string.IsNullOrWhiteSpace(artifactsPath));
Debug.Assert(entryPointFilePath is not null);

// Note that FileBasedAppArtifactsPath needs to be specified before Sdk.props
// Note that the artifacts properties need to be specified before Sdk.props
// (usually it's recommended to specify it in Directory.Build.props
// but importing Sdk.props manually afterwards also works).
writer.WriteLine($"""
writer.WriteLine("""
<Project>

<PropertyGroup>
<FileBasedAppArtifactsPath>{EscapeValue(artifactsPath)}</FileBasedAppArtifactsPath>
""");

if (useLegacyArtifactsPath)
{
writer.WriteLine($"""
<IncludeProjectNameInArtifactsPaths>false</IncludeProjectNameInArtifactsPaths>
<ArtifactsPath>{EscapeValue(artifactsPath)}</ArtifactsPath>
<PublishDir>artifacts/$(AssemblyName)</PublishDir>
<PackageOutputPath>artifacts/$(AssemblyName)</PackageOutputPath>
""");
}
else
{
writer.WriteLine($"""
<FileBasedAppArtifactsPath>{EscapeValue(artifactsPath)}</FileBasedAppArtifactsPath>
""");
}

writer.WriteLine($"""
<AssemblyName>{EscapeValue(Path.GetFileNameWithoutExtension(entryPointFilePath))}</AssemblyName>
<RootNamespace>$(AssemblyName)</RootNamespace>
<FileBasedProgram>true</FileBasedProgram>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "Přepsání cílové architektury",
"symbols/Framework/description": "Cílová architektura pro projekt",
"symbols/Framework/displayName": "Framework",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (jenom Windows)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (jenom Windows)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (jenom Windows)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (jenom Windows)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "Zielframeworküberschreibung",
"symbols/Framework/description": "Das Zielframework für das Projekt.",
"symbols/Framework/displayName": "Framework",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (nur Windows)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (nur Windows)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (nur Windows)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (nur Windows)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,15 @@
{
{
"author": "Microsoft",
"name": "MSTest Test Project",
"description": "A project that contains MSTest tests that can run on .NET on Windows, Linux and MacOS.",
"symbols/TargetFrameworkOverride/description": "Overrides the target framework",
"symbols/TargetFrameworkOverride/displayName": "Target framework override",
"symbols/Framework/description": "The target framework for the project.",
"symbols/Framework/displayName": "Framework",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (Windows only)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (Windows only)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (Windows only)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (Windows only)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "Invalidación de la plataforma de destino",
"symbols/Framework/description": "Marco de destino del proyecto.",
"symbols/Framework/displayName": "Plataforma",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (solo Windows)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (solo Windows)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (solo Windows)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (solo Windows)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "Remplacement du cadre cible",
"symbols/Framework/description": "Le cadre cible du projet.",
"symbols/Framework/displayName": "Framework",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (Windows uniquement)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (Windows uniquement)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (Windows uniquement)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (Windows uniquement)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "Override del framework di destinazione",
"symbols/Framework/description": "Il framework di destinazione per il progetto.",
"symbols/Framework/displayName": "Framework",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (solo Windows)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (solo Windows)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (solo Windows)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (solo Windows)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "ターゲット フレームワークのオーバーライド",
"symbols/Framework/description": "プロジェクトのターゲット フレームワークです。",
"symbols/Framework/displayName": "フレームワーク",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (Windows のみ)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (Windows のみ)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (Windows のみ)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (Windows のみ)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "대상 프레임워크 재정의",
"symbols/Framework/description": "프로젝트에 대한 대상 프레임워크입니다.",
"symbols/Framework/displayName": "프레임워크",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10(Windows만 해당)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11(Windows만 해당)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10(Windows만 해당)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9(Windows만 해당)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "Zastąpienie struktury docelowej",
"symbols/Framework/description": "Platforma docelowa dla tego projektu.",
"symbols/Framework/displayName": "Struktura",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (tylko system Windows)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (tylko system Windows)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (tylko system Windows)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (tylko system Windows)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "Substituição da estrutura de destino",
"symbols/Framework/description": "A estrutura de destino para o projeto.",
"symbols/Framework/displayName": "Estrutura",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (somente Windows)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (somente Windows)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (somente Windows)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (somente Windows)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "Переопределение целевой платформы",
"symbols/Framework/description": "Целевая платформа для проекта.",
"symbols/Framework/displayName": "Платформа",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (только для Windows)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (только для Windows)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (только для Windows)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (только для Windows)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "Hedef çerçeveyi geçersiz kılma",
"symbols/Framework/description": "Projenin hedef çerçevesi.",
"symbols/Framework/displayName": "Çerçeve",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (yalnızca Windows)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (yalnızca Windows)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (yalnızca Windows)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (yalnızca Windows)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@
"symbols/TargetFrameworkOverride/displayName": "目标框架替代",
"symbols/Framework/description": "项目的目标框架。",
"symbols/Framework/displayName": "框架",
"symbols/Framework/choices/net11.0/description": ".NET 10",
"symbols/Framework/choices/net11.0-windows/description": ".NET 10 (仅限 Windows)",
"symbols/Framework/choices/net11.0/description": ".NET 11",
"symbols/Framework/choices/net11.0-windows/description": ".NET 11 (仅限 Windows)",
"symbols/Framework/choices/net10.0/description": ".NET 10",
"symbols/Framework/choices/net10.0-windows/description": ".NET 10 (仅限 Windows)",
"symbols/Framework/choices/net9.0/description": ".NET 9",
"symbols/Framework/choices/net9.0-windows/description": ".NET 9 (仅限 Windows)",
"symbols/Framework/choices/net8.0/description": ".NET 8",
Expand Down
Loading
Loading