Lorsque le code suivant est exécuté dans MSBuild, j'obtiens une exception InvalidOperationException. Je me demandais pourquoi c'est?Pourquoi ne puis-je pas utiliser MsBuild TaskLoggingHelper dans un constructeur de tâches personnalisé?
public class SimpleTask3 : Task
{
public SimpleTask3()
{
Log.LogMessage(MessageImportance.High, "A MESSAGE");
}
public override bool Execute()
{
return true;
}
}
L'erreur complète reçue est la suivante
error MSB4061: The "SimpleTask3" task could not be instantiated from ...ConsoleApplication1.dll
error MSB4061: System.InvalidOperationException: Task attempted to log before it was initialized. Message was: A MESSAGE
error MSB4061: at Microsoft.Build.Shared.ErrorUtilities.ThrowInvalidOperation(String resourceName, Object[] args)
error MSB4061: at Microsoft.Build.Utilities.TaskLoggingHelper.LogMessage(MessageImportance importance, String message, Object[] messageArgs)
error MSB4061: at SimpleTask3.SimpleTask3..ctor() in SimpleTask.cs:line 10
error MSB4060: The "SimpleTask3" task hasbeen declared or used incorrectly, or failed during construction. Check the spelling of the task name and the assembly name.
Merci pour votre explication. Pourriez-vous expliquer le comment et pourquoi? Je comprends que cela ne m'aide pas mais je demandais plus par intérêt. Merci encore. –
Je ne sais pas vraiment pourquoi cela est fait comme ça n'est pas expliqué dans le code mais une raison possible est que le constructeur reste simple pour que vous puissiez écrire votre constructeur sans paramètre sans avoir à passer des arguments à la classe de base constructeur, et le reste du code prend soin de configurer le BuildEngine sans que vous ayez à vous en soucier. Ce qui est fait ici: https://github.com/Microsoft/msbuild/blob/master/src/Build/BackEnd/TaskExecutionHost/TaskExecutionHost.cs#L369 – stijn