Monotouch: errore dell'attività MSBuild personalizzata
-
13-11-2019 - |
Domanda
Sto cercando di creare un'attività personalizzata per generare un file .csproj intermedio (vedi questo post per il motivo.)
L'attività personalizzata è in una DLL che attualmente fa riferimento agli assembly .NET 2.0.
Il sperimentale MSBuild/xbuild L'impostazione di MonoDevelop è abilitata per forzare il monoDvivi di utilizzare XBuild per costruire il progetto.
Sono in grado di eseguirlo dalla riga di comando, tramite un progetto che fa riferimento all'attività tramite a <UsingTask>
elemento:
~/src/All/workspace/XBuildExt/bin/Debug> mono /Library/Frameworks/Mono.framework/Versions/Current/lib/mono/3.5/xbuild.exe ../../XBuildExtTest.targets XBuild Engine Version 2.10.8.0 Mono, Version 2.10.8.0 Copyright (C) Marek Sieradzki 2005-2008, Novell 2008-2011. Build started 2/27/2012 4:26:15 PM. __________________________________________________ Project "/Users/bright/src/All/workspace/XBuildExt/XBuildExtTest.targets" (default target(s)): Target Build: It works! Done building project "/Users/bright/src/All/workspace/XBuildExt/XBuildExtTest.targets". Build succeeded. 0 Warning(s) 0 Error(s)
Tuttavia, lo stesso codice in un progetto monotouch fallisce con:
Error initializing task GenerateMdToolProject: Cannot cast from source type to destination type. Task "GenerateMdToolProject" execution -- FAILED
Domande:
- ho trovato Questo vecchio post che indica che il problema è stato risolto in mono 2.8. È anche vero per Monotouch?
- Posso utilizzare la funzionalità .NET 3.5 (in particolare System.xml.Linq) per codificare l'attività personalizzata?
Soluzione
Ho trovato questo vecchio post che indica che il problema è stato risolto in mono 2.8.
Hai frainteso quel post. Dice che questo è stato risolto in Monodeviumi (non mono) all'inizio di settembre 2010. Quindi versioni recenti di Monodeviumi, come 2.8.x, avrà la correzione che menziona.
La nota su Mono 2.8 riguarda un altro requisito (della domanda sul post originale), cioè avere un runtime che supporta .NET 4.0. Avrai questo solo se stai usando Mono 2.8 (o più tardi). Lo sviluppo per MonoTouch richiede mono 2.10+, quindi questo non sarà un problema per te.
È anche vero per Monotouch?
Questo non si applica al Monotouch stesso. La versione mono utilizzata all'interno del prodotto (basata su 2.10 comunque) non è ciò che usi (tranne il smcs
compilatore) per eseguire monode sviluppare o (nel tuo caso) il xbuild
Lo strumento (compatibile con Mono-compatibile Mono).
Iwo Le parti del mono che sono incluse in monotouch sono pensate per essere utilizzate sul simulatore o sul dispositivo, non per la costruzione o l'esecuzione degli utensili.
Posso utilizzare la funzionalità .NET 3.5 (in particolare System.xml.Linq) per codificare l'attività personalizzata?
Sì. Una volta che hai un runtime .NET 4.0 avrai (attraverso il GAC) accedere ai nuovi assemblaggi, anche System.Xml.Linq
, per eseguire le tue attività MSBuild (purché i percorsi e le variabili di ambiente siano impostate correttamente, cosa che probabilmente sono se possono eseguire MonoDevelopview).
Altri suggerimenti
MonoDevelvive non utilizza XBuild per creare un progetto MonoTouch, ma codice personalizzato che comprende solo quanto necessario del file di progetto MSBuild.
Ciò significa che qualsiasi logica MSBuild speciale che aggiungi al progetto non sarà rilevata.
Ci sono piani per questo per cambiare in futuro, ma non è stato ancora deciso nulla (né c'è una sequenza temporale).