Skip to content

Commit d49d89e

Browse files
authored
Merge pull request #3348 from dsplaisted/build-publish-tweaks
Unify more build and publish logic
2 parents e00f402 + 213e3b0 commit d49d89e

File tree

12 files changed

+202
-148
lines changed

12 files changed

+202
-148
lines changed

src/Tasks/Common/MetadataKeys.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ internal static class MetadataKeys
6565
public const string NuGetSourceType = "NuGetSourceType";
6666
public const string PathInPackage = "PathInPackage";
6767
public const string PackageDirectory = "PackageDirectory";
68+
public const string Publish = "Publish";
6869

6970
// References
7071
public const string ExternallyResolved = "ExternallyResolved";

src/Tasks/Microsoft.NET.Build.Tasks.UnitTests/Mocks/MockTaskItem.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,10 +58,10 @@ public string GetMetadata(string metadataName)
5858
string metadataValue = null;
5959
if (_metadata.TryGetValue(metadataName, out metadataValue))
6060
{
61-
return metadataValue;
61+
return metadataValue ?? string.Empty;
6262
}
6363

64-
return null;
64+
return string.Empty;
6565
}
6666

6767
public void RemoveMetadata(string metadataName)

src/Tasks/Microsoft.NET.Build.Tasks/DependencyContextBuilder.cs

Lines changed: 0 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ internal class DependencyContextBuilder
2121
private Dictionary<string, List<ReferenceInfo>> _compileReferences;
2222
private Dictionary<string, List<ResolvedFile>> _resolvedNuGetFiles;
2323
private Dictionary<string, SingleProjectInfo> _referenceProjectInfos;
24-
private IEnumerable<string> _excludeFromPublishPackageIds;
2524
private Dictionary<string, List<RuntimePackAssetInfo>> _runtimePackAssets;
2625
private CompilationOptions _compilationOptions;
2726
private string _referenceAssembliesPath;
@@ -160,12 +159,6 @@ public DependencyContextBuilder WithMainProjectInDepsFile(bool includeMainProjec
160159
return this;
161160
}
162161

163-
public DependencyContextBuilder WithExcludeFromPublishAssets(IEnumerable<string> excludeFromPublishPackageIds)
164-
{
165-
_excludeFromPublishPackageIds = excludeFromPublishPackageIds;
166-
return this;
167-
}
168-
169162
public DependencyContextBuilder WithRuntimePackAssets(IEnumerable<RuntimePackAssetInfo> runtimePackAssets)
170163
{
171164
_runtimePackAssets = new Dictionary<string, List<RuntimePackAssetInfo>>();
@@ -748,50 +741,6 @@ private void CalculateExcludedLibraries()
748741
{
749742
_dependencyLibraries[packageToExcludeFromRuntime].ExcludeFromRuntime = true;
750743
}
751-
752-
if (_excludeFromPublishPackageIds != null && _excludeFromPublishPackageIds.Any())
753-
{
754-
// Include transitive dependencies of all top-level dependencies which are not
755-
// excluded from publish
756-
757-
Dictionary<string, DependencyLibrary> includedDependencies = new Dictionary<string, DependencyLibrary>(StringComparer.OrdinalIgnoreCase);
758-
759-
HashSet<string> excludeFromPublishPackageIds = new HashSet<string>(_excludeFromPublishPackageIds);
760-
761-
Stack<string> dependenciesToWalk = new Stack<string>(
762-
_mainProjectDependencies.Except(_excludeFromPublishPackageIds, StringComparer.OrdinalIgnoreCase));
763-
764-
while (dependenciesToWalk.Any())
765-
{
766-
var dependencyName = dependenciesToWalk.Pop();
767-
if (!includedDependencies.ContainsKey(dependencyName))
768-
{
769-
// There may not be a library in the assets file if a referenced project has
770-
// PrivateAssets="all" for a package reference, and there is a package in the graph
771-
// that depends on the same packge.
772-
if (_dependencyLibraries.TryGetValue(dependencyName, out var dependencyLibrary))
773-
{
774-
includedDependencies.Add(dependencyName, dependencyLibrary);
775-
foreach (var newDependency in _libraryDependencies[dependencyName])
776-
{
777-
dependenciesToWalk.Push(newDependency.Name);
778-
}
779-
}
780-
}
781-
}
782-
783-
foreach (var dependencyLibrary in _dependencyLibraries.Values)
784-
{
785-
// Libraries explicitly marked as exclude from publish should be excluded from
786-
// publish even if there are other transitive dependencies to them
787-
if (!includedDependencies.ContainsKey(dependencyLibrary.Name) ||
788-
excludeFromPublishPackageIds.Contains(dependencyLibrary.Name))
789-
{
790-
dependencyLibrary.ExcludeFromCompilation = true;
791-
dependencyLibrary.ExcludeFromRuntime = true;
792-
}
793-
}
794-
}
795744
}
796745

797746
private string GetReferenceLibraryName(ReferenceInfo reference)

src/Tasks/Microsoft.NET.Build.Tasks/GenerateDepsFile.cs

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,6 @@ public class GenerateDepsFile : TaskBase
5252
[Required]
5353
public bool IncludeMainProject { get; set; }
5454

55-
5655
public ITaskItem[] ReferencePaths { get; set; } = Array.Empty<ITaskItem>();
5756

5857
public ITaskItem[] ReferenceDependencyPaths { get; set; } = Array.Empty<ITaskItem>();
@@ -61,15 +60,10 @@ public class GenerateDepsFile : TaskBase
6160

6261
public ITaskItem[] ReferenceAssemblies { get; set; } = Array.Empty<ITaskItem>();
6362

64-
[Required]
65-
public ITaskItem[] FilesToSkip { get; set; }
66-
6763
public ITaskItem[] RuntimePackAssets { get; set; } = Array.Empty<ITaskItem>();
6864

6965
public ITaskItem CompilerOptions { get; set; }
7066

71-
public ITaskItem[] ExcludeFromPublishPackageReferences { get; set; }
72-
7367
public ITaskItem[] RuntimeStorePackages { get; set; }
7468

7569
[Required]
@@ -138,8 +132,6 @@ private void WriteDepsFile(string depsFilePath)
138132
ReferenceDependencyPaths,
139133
ReferenceSatellitePaths);
140134

141-
IEnumerable<string> excludeFromPublishAssets = PackageReferenceConverter.GetPackageIds(ExcludeFromPublishPackageReferences);
142-
143135
IEnumerable<RuntimePackAssetInfo> runtimePackAssets =
144136
IsSelfContained ? RuntimePackAssets.Select(item => RuntimePackAssetInfo.FromItem(item)) : Enumerable.Empty<RuntimePackAssetInfo>();
145137

@@ -159,7 +151,6 @@ private void WriteDepsFile(string depsFilePath)
159151
.WithDirectReferences(directReferences)
160152
.WithDependencyReferences(dependencyReferences)
161153
.WithReferenceProjectInfos(referenceProjects)
162-
.WithExcludeFromPublishAssets(excludeFromPublishAssets)
163154
.WithRuntimePackAssets(runtimePackAssets)
164155
.WithCompilationOptions(compilationOptions)
165156
.WithReferenceAssembliesPath(FrameworkReferenceResolver.GetDefaultReferenceAssembliesPath())

src/Tasks/Microsoft.NET.Build.Tasks/ProjectContext.cs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -176,14 +176,19 @@ public IEnumerable<LockFileTargetLibrary> GetCompileLibraries(IEnumerable<string
176176
}
177177

178178
public IEnumerable<string> GetTopLevelDependencies()
179+
{
180+
return GetTopLevelDependencies(LockFile, LockFileTarget);
181+
}
182+
183+
static public IEnumerable<string> GetTopLevelDependencies(LockFile lockFile, LockFileTarget lockFileTarget)
179184
{
180185
Dictionary<string, LockFileTargetLibrary> libraryLookup =
181-
LockFileTarget.Libraries.ToDictionary(l => l.Name, StringComparer.OrdinalIgnoreCase);
186+
lockFileTarget.Libraries.ToDictionary(l => l.Name, StringComparer.OrdinalIgnoreCase);
182187

183-
return LockFile
188+
return lockFile
184189
.ProjectFileDependencyGroups
185190
.Where(dg => dg.FrameworkName == string.Empty ||
186-
dg.FrameworkName == LockFileTarget.TargetFramework.DotNetFrameworkName)
191+
dg.FrameworkName == lockFileTarget.TargetFramework.DotNetFrameworkName)
187192
.SelectMany(g => g.Dependencies)
188193
.Select(projectFileDependency =>
189194
{

0 commit comments

Comments
 (0)