Skip to content

LibMan runs before dependent project targets #808

@AlexanderRydberg

Description

@AlexanderRydberg

Problem
ProjectB generates files in a Target

<Target Name="RunLBeforeBuildStepgen" BeforeTargets="BeforeBuild" >
	<Message Text="=== Generating localizations ===" Importance="high" />
       <WriteLinesToFile File="Localizations.js" Lines="Localization data generated before build." />
</Target>

ProjectA have this in its libman.json

{
  "version": "1.0",
  "defaultProvider": "filesystem",
  "libraries": [
    {
      "library": "../../ProjectB/",
        "files": [ "Localizations.js" ],
      "destination": "wwwroot/assets/l10n/"
    }
  ]
}

dotnet build .\ProjectA\ProjectA\ProjectA.csproj fails:

Restore complete (0.3s)
    info NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotnet-support-policy
  ProjectA net8.0 failed with 2 error(s) (0.1s)
    D:\Nuget\microsoft.web.librarymanager.build\3.0.71\build\Microsoft.Web.LibraryManager.Build.targets(35,9): error
      System.AggregateException: One or more errors occurred. (The "../../ProjectB/" library could not be resolved by th
      e "filesystem" provider)
       ---> Microsoft.Web.LibraryManager.Contracts.InvalidLibraryException: The "../../ProjectB/" library could not be r
      esolved by the "filesystem" provider
         at Microsoft.Web.LibraryManager.Providers.FileSystem.FileSystemProvider.GetStreamAsync(ILibraryInstallationStat
      e state, String file, CancellationToken cancellationToken)
         --- End of inner exception stack trace ---
         at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
         at System.Threading.Tasks.Task`1.GetResultCore(Boolean waitCompletionNotification)
         at Microsoft.Web.LibraryManager.Providers.FileSystem.FileSystemProvider.<>c__DisplayClass9_1.<InstallAsync>b__0
      ()
         at Microsoft.Web.LibraryManager.Build.Contracts.HostInteraction.WriteFileAsync(String path, Func`1 content, ILi
      braryInstallationState state, CancellationToken cancellationToken)
         at Microsoft.Web.LibraryManager.Providers.FileSystem.FileSystemProvider.InstallAsync(ILibraryInstallationState
      desiredState, CancellationToken cancellationToken)
    libman.json : error LIB000: An unknown exception occurred

#642 describes a similar problem. But in my case its a target in a referenced project. And yes, also tried BeforeTargets="LibraryManagerRestore"

Created a little repo https://github.com/AlexanderRydberg/LibraryManagerTargetIssue

Expected behavior
Targets in referenced project being run before libman.

Is this behavior by design?
Any suggestions on how I could solve this without:
manually building ProjectB first and then ProjectA
or
Copy Target from ProjectB to ProjectA's csproj and have BeforeTargets="LibraryManagerRestore"

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions