6

nostro continuo fornitura di set-up, fino a poco tempo, è stato fornire pacchetti di servizio in tessuto con il seguente comando:riga di comando Service Package Fabric Application

msbuild SFApp.sfproj /t:Package 

Questo era necessario perché il bersaglio pacchetto non è disponibile al livello di soluzione. Cioè Il comando

msbuild SFSolution.sln /t:Package 

Errore, poiché la destinazione non esiste.

Con l'aumentare della rete delle dipendenze, si arriva a un punto in cui la maggior parte dei progetti di interfacce non verrà creata senza un file di soluzione (to work around the "OutputPath does not exist" red herring). Sembra che ci sia un modo per farlo according to this answer. Purtroppo, mentre gli obiettivi come Clean lavoro ...

msbuild SFSolution.sln /t:SFApplication:Clean 
(…snip…) 
Build succeeded. 
    0 Warning(s) 
    0 Error(s) 

... il pacchetto di destinazione non sarà!

msbuild SFSolution.sln /t:SFApplication:Package 
(…snip…) 
Build FAILED. 
"SFSolution.sln" (SFApplication:Package target) (1) -> SFSolution.sln.metaproj : 
     error MSB4057: The target "SFApplication:Package" does not exist in the 
     project. [SFSolution.sln] 
    0 Warning(s) 
    1 Error(s) 

(Soluzione/cartelle di progetto/nomi omessi/parafrasato per chiarezza posso fornire i log effettivi se necessario..)

Quindi la domanda è: come potrei, utilizzando la riga di comando, build un progetto utilizzando il pacchetto target e il file soluzione ?

Oppure come è possibile impacchettare in altro modo un'applicazione di Service Fabric dalla riga di comando?

risposta

1

MSBuild supporta solo una piccola serie di nomi di destinazione che possono essere specificati a livello di soluzione. Come hai scoperto, Package non è uno di questi. Dovrai eseguire due chiamate separate su MSBuild: una che costruisce la soluzione e una che chiama il target Package su sfproj. Il target Package di un sfproj ha una dipendenza dal target Build in modo da garantire che lo sfproj e le sue dipendenze del progetto siano costruite.

+0

Questo non funziona. Nessun cambiamento se ne eseguo uno esattamente dopo l'altro. Vedi http://pastebin.com/uMjdSJ1Q Linee: [1] build CLI [296] pacchetto CLI [542] first OutputPath errore [629] ultimo errore – Ekevoo

+3

In base all'output di compilazione, la configurazione della soluzione è configurata per utilizzare AnyCPU. .sfproj e i suoi progetti di riferimento sono configurati per l'uso di x64. Dovrai aggiornare la configurazione della soluzione in modo appropriato. –

+0

Ancora gli stessi problemi quando lo faccio. http://pastebin.com/k8jzm853 – Ekevoo

0

Ho avuto lo stesso problema e l'ho risolto cambiando la piattaforma nei progetti in errore per creare esplicitamente per x64.

Fare clic su >Configuration Manager e assicurarsi che gli assembly siano compilati per la piattaforma x64, che dovrebbe anche impostare i percorsi di output nei corrispondenti file .csproj. enter image description here

L'attuale azione riga di comando che è in esecuzione è questo:

"C:\Program Files (x86)\MSBuild\14.0\bin\amd64\msbuild.exe" "C:\agent\_work\1\s\Project\SFProject.sfproj" /t:Package /p:platform="x64" /p:configuration="release" /p:VisualStudioVersion="14.0"

0

Abbiamo avuto lo stesso identico problema, come hai avuto e ho cercato in giro per una soluzione in tutto il web e ha fatto alcuni esperimenti. Questi sono i passaggi che hanno funzionato per noi:

  1. Non aggiungere manualmente un obiettivo in nessun punto, come suggerito da altre risposte su StackOverflow. Non necessario. Soprattutto in un ambiente CI, vuoi comunque creare i progetti separatamente.
  2. Preparare i progetti nella Soluzione: modificare la piattaforma di destinazione per tutti i progetti per x64
  3. genera l'applicazione

msbuild.exe SFAplication.xproj /p:Configuration=Release /target:rebuild

  1. pacchetto App

msbuild.exe SFAplication.sfproj /p:Configuration=Release /target:Package

1

Utilizzare il bel ow script.

C: \ Program Files (x86) \ Microsoft Visual Studio 14.0>msbuild "Fabric.sfproj"/t: Pacchetto/p: Configurazione = Rilasciare

tessuto servizio richiede di destinazione da impostare in piattaforma x64 , Quindi cambia tutto il target di riferimento dei progetti sulla piattaforma x64.

è possibile farlo utilizzando le proprietà di configurazione della soluzione. Se x64 non è elencato in "Proprietà di configurazione", fare clic su Configuration Manager nella stessa finestra e nella colonna della piattaforma per il progetto richiesto aggiungere una nuova piattaforma di progetto come x64.

Spero che questo funzioni per voi.