Hoe kan MSBuild een aangepast doel maken dat is opgegeven in csproj building sln?

Ik krijg te maken met een probleem met MSBuild Ik kan het zelf niet oplossen. Als gevolg daarvan vertrouw ik op de wijsheid van de gemeenschap.

The real situation I'm having troubles with

Ik heb een soluiton-bestand met verschillende projecten met afhankelijkheden van andere projecten in dezelfde oplossing. Ik zou graag een aangepast doel toevoegen aan een van de csproj-bestanden van het project en dit op de opdrachtregel bouwen. Hiermee kan ik alle benodigde uitvoerbinaire bestanden voor dit project maken voor verdere verwerking tijdens het maken van het aangepaste doel. Maar het belangrijkste is dat ik niet weet hoe ik het moet doen, ook googelen helpt niet.

Vereenvoudiging

Om het iets eenvoudiger te maken, heb ik besloten om een ​​nieuw C# -consoleproject te maken, een eenvoudig aangepast doel toe te voegen aan het projectbestand en het te laten bouwen. Nog steeds geen succes! Hier wat ik tot nu toe heb gedaan:

  1. Created a solution app with a default console project coreapp. This gaves me at least two files:

    • app.sln
    • coreapp\coreapp.csproj
  2. Modified coreapp.csproj with addition of my custom target inside of the Project tag

    
      
    
    
  3. Run on the command line the following command

    %windir%\Microsoft.NET\framework\v3.5\msbuild.exe app.sln /t:coreapp:SampleTarget

    or even

    %windir%\Microsoft.NET\framework\v3.5\msbuild.exe app.sln /t:coreapp.csproj:SampleTarget

Resultaten

Geen geluk, geconfronteerd met de fout

MSB4057: het doel "coreapp.csproj: SampleTarget" bestaat niet in het project.

Ik vermoed dat MSBuild denkt dat iets fundamenteel anders is dan wat ik wil dat het denkt ...

Daarnaast heb ik ook geprobeerd om op dezelfde opdrachtregel de omgevingsvariabele MSBuildEmitSolution = 1 in te stellen om msbuild een tijdelijk oplossingsbestand te dwingen dat het maakt tijdens het verwerken van de oplossing. In dit bestand inderdaad geen doelwit. Maar ik denk dat dit niet de reden is, want ik vroeg msbuild om coreapp.proj te bouwen waar doelwit SampleTarget echt verblijft.

De vraag is hoe je met dit oplossingsbestand SampleTarget kunt bouwen in dit vereenvoudigde scenario, omdat het mogelijk afhankelijkheden kan bevatten voor het project met dit SampleTarget-doel?

Ik zou dankbaar zijn voor elke vorm van hulp of vuur voor verder onderzoek!

5
toegevoegd de auteur Waqas Shah, de bron

2 antwoord

In plaats van een aangepast doel in uw projectbestand in te voegen, kunt u een nieuw zelfstandig msbuild-bestand maken, dat:

  • bouw het oplossingsbestand (dat projecten bouwt)
  • definieert uw extra doel

Noem het bijvoorbeeld app-custom-Debug.msbuild.


  
    $(MSBuildProjectDirectory)
    Debug
    app.sln
  

    

  
    
    
  

  
    
  


Dan voer je uit:

msbuild.exe app-custom-Debug.msbuild /t:SampleTarget
2
toegevoegd

Een optie is om uw SampleTarget te koppelen aan de standaard Build-doelen via het overschrijven van de juiste DependsOn-property. In dit geval kunt u BeforeBuild laten weten dat het afhankelijk is van SampleTarget of dat u hetzelfde doet met AfterBuild. Dit zorgt ervoor dat MSBuild uw doel verwerkt voordat het standaarddoel wordt aangegeven.

0
toegevoegd