J'ai configuré un projet d'application Web avec une étape supplémentaire de post-construction pour compresser certains fichiers résultants en versions de version. Pour ce faire, j'ai ajouté le package MSBuild Community Tasks NuGet. Cela fonctionne correctement lorsque je compile dans Visual Studio et j'ai confirmé que le fichier zip est créé. La partie pertinente du fichier de csproj est:Échec de la génération de projet par programmation en raison d'une tâche de génération tierce
<PropertyGroup>
<MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath>
<ZipFile>$(SolutionName).zip</ZipFile>
</PropertyGroup>
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.targets" />
<Target Name="Zip" AfterTargets="Build" Condition="'$(Configuration)' == 'Release'">
<ItemGroup>
<ZipFiles Include="$(ProjectDir)\*.js; $(ProjectDir)\manifest.json" Exclude="$(ProjectDir)\*.map.js" />
</ItemGroup>
<Delete Files="$(ZipFile)" />
<Zip Files="@(ZipFiles)" WorkingDirectory="$(ProjectDir)" ZipFileName="$(ZipFile)" ZipLevel="9" />
</Target>
J'ai un code dans un autre projet qui tente de construire automatiquement le projet ci-dessus. Voici le code:
var projectInstance = new ProjectInstance(project.File.AbsolutePath);
projectInstance.SetProperty("Configuration", "Release");
projectInstance.SetProperty("SolutionDir", project.Solution.Directory.AbsolutePath);
projectInstance.Build("Build", Enumerable.Empty<ILogger>());
Le code ci-dessus échoue avec le message d'erreur suivant:
La tâche "Zip" n'a pas été trouvé. Vérifiez les points suivants: 1.) Le nom de la tâche dans le fichier de projet est le même que le nom de la classe de tâche. 2.) La classe de tâche est "public" et implémente l'interface Microsoft.Build.Framework.ITask. 3.) La tâche est correctement déclarée dans le fichier de projet ou dans les fichiers * .tasks situés dans le répertoire "C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319".
Si je supprime la tâche Zip
, cela fonctionne parfaitement. Pourquoi cela échoue-t-il lorsque je crée par programmation, mais pas quand je construis dans VS? Comment puis-je le réparer?
Avez-vous essayé la même chose à partir de l'invite de commande Visual Studio, en utilisant la commande msbuild'. Si non, pouvez-vous l'essayer une fois et afficher le résultat? – RinoTom
@RinoTom, j'ai juste essayé ça, et ça a produit le même résultat. Il comportait également un numéro d'erreur: * erreur MSB4036 *. – Sam