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:

  1. ho trovato Questo vecchio post che indica che il problema è stato risolto in mono 2.8. È anche vero per Monotouch?
  2. Posso utilizzare la funzionalità .NET 3.5 (in particolare System.xml.Linq) per codificare l'attività personalizzata?
È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top