Sto assumendo che hai configurato il server correttamente per WebDeploy 2.0 di cui al presente articolo:
Configure Web Deploy (IIS.NET)
Nota: MS hanno rilasciato un aggiornamento di Web Deploy 2.0 e il link isn originale' È davvero più valido. L'ho aggiornato, ma penso che sarà un obiettivo mobile nel tempo.
È inoltre necessario installare Web Deploy 2.0 sul computer di sviluppo/build/CI.
Se si sta ancora utilizzando 1.0, quindi consiglio l'aggiornamento, ci sono alcuni enormi miglioramenti in 2.0.
utilizzando Visual Studio 2010 di Pubblica Caratteristica:
Visual Studio può pubblicare un sito facendo clic destro sul sito e selezionando "Pubblica".Questo fa apparire il seguente dialogo:
Ci sono un paio di gotcha con Visual Studio 2010 e WebDeploy 2.0. La prima è che VS2010 non è WebDeploy/MSDeploy 2.0 consapevoli. Quindi, se si tenta di pubblicare otterrete un errore come il seguente:
Error 1 Web deployment task failed.((04/02/2011 12:30:40) An error occurred when the request was processed on the remote computer.)
Si vedrà anche il seguente errore nel Richiesta non riuscita Tracing per il servizio di gestione Web sul server in C:\inetpub\logs\wmsvc\TracingLogFiles\W3SVC1
supponendo di avere questo acceso:
AspNetModuleDiagErrorEvent
Uri /msdeploy.axd
eventData Tracing deployment agent exception. Request ID ''. Request Timestamp: '02/04/2011
System.UnauthorizedAccessException: Access to the path 'D:\' is denied.
La lettera dell'unità varierà sulla struttura su cui si trova il tuo sito IIS.
Fuori dalla scatola, l'in-GUI Pubblica default meccanismo per utilizzare la versione sbagliata di MSDeploy (1.0). Vogliamo dire a VS2010 di usare MSDeploy 2.0. È possibile farlo modificando Visual Studio file di devenv.exe.config
2010 che si trova nella (supponendo che hai fatto un disco di default c:\
installare):
Per i sistemi a 64 bit: c:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE
per 32 sistemi di bit: c:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE
Open Up devenv.exe.config
nel vostro editor XML preferito (ho appena usato Visual Studio 2010 stesso) e copiare il seguente codice XML:
<dependentAssembly>
<assemblyIdentity
name="Microsoft.Web.Deployment"
publicKeyToken="31bf3856ad364e35" culture="neutral"/>
<bindingRedirect oldVersion="7.1.0.0" newVersion="8.0.0.0"/>
</dependentAssembly>
Aggiungere questo alla sezione /configuration/runtime/assemblyBinding
:
Dopo averlo chiuso tutte le istanze di Visual Studio 2010 per rendere effettiva questa modifica. Riavviare VS2010, aprire un progetto Web e quindi provare a pubblicare nuovamente. Questa volta dovrebbe avere successo.
Publishing utilizzando una generazione pacchetto:
Visual Studio può produrre una generazione pacchetto che può essere eseguito da linea di comando. Questo viene generato utilizzando Project -> Build Deployment Package
. Pratico per l'integrazione continua e simili (il pacchetto può anche essere generato usando msbuild con l'interruttore /t:Package
).
La cartella di output per il pacchetto di solito il default è obj\Package
.
Purtroppo Visual Studio 2010 ottiene questo un po 'sbagliata e genera uno script batch msdeploy involucro rivolte a 1.0 e targeting distribuzione al server anziché livello di sito.
Non esiste una soluzione rapida per questo oltre a creare la propria riga di comando msdeploy.exe. Ho diviso questo tra diverse linee per rendere questo un po 'più leggibile .:
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe"
-source:archiveDir='d:\sites\DemoApp\obj\Package\Archive'
-dest:
auto,
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
userName='demosite',
password='somepassword',
authtype='basic',
includeAcls='False'
-verb:sync
-disableLink:AppPoolExtension
-disableLink:ContentExtension
-disableLink:CertificateExtension
-setParamFile:"d:\sites\DemoApp\obj\Package\Archive.SetParameters.xml"
-allowuntrusted
La prima cosa da notare è il percorso msdeploy.exe
. Visual Studio genera un percorso per la versione 1.0. Ho cambiato questo per usare 2.0.
parametri degni di nota:
-source:archiveDir=
dice msdeploy stiamo distribuzione di un pacchetto e fornisce la posizione locale
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename'
- questo dice MSDeploy per distribuire ad un sito specifico su IIS7. yoursitename
dovrebbe corrispondere esattamente al nome del sito in IIS.
userName
e password
sono il nome dell'utente gestore delegato per il sito. Questo è configurato utilizzando la funzionalità "Autorizzazioni di Gestione IIS" a livello di sito. L'account deve essere un account utente Windows locale.
-authtype='basic'
- questo impone l'autenticazione di base, altrimenti viene tentata l'autenticazione NTLM.
-allowuntrusted
- questo ignora qualsiasi errore del certificato SSL se si utilizza il certificato SSL autofirmato incorporato.
Se si utilizza tale riga di comando, è possibile eseguire correttamente la distribuzione su un server IIS7 remoto.
Raw Content Publishing:
A volte vogliamo pubblicare solo alcuni contenuti statici (o forse anche un ASP classico o di un sito PHP) direttamente da una cartella locale. Possiamo farlo utilizzando la seguente riga di comando msdeploy.exe
:
"C:\Program Files\IIS\Microsoft Web Deploy v2\\msdeploy.exe"
-source:contentPath='d:\websites\mysite'
-dest:
contentPath='yoursitename',
computerName='https://yoursite.com:8172/msdeploy.axd?site=yoursitename',
userName='demosite',
password='somepassword',
authtype='basic',
includeAcls='False'
-verb:sync
-allowuntrusted
Anche in questo caso valgono le stesse regole di prima per -dest:contentPath
e computerName
.
Credo che i problemi della versione di MSDeploy saranno risolti in SP1 (che non ho ancora avuto modo di vedere).
Un finale VS2010 Gotcha:
Quando si pubblica utilizzando Visual Studio 2010, la "Pubblica" costruire pacchetto fa sì che l'ACL dispone di account anonimo del sito di modificare a sola lettura per tutti i file e le cartelle ad eccezione di la cartella App_Data
che è stata modificata in Lettura e Scrittura.
Questo può essere lavorato intorno aggiungendo la seguente impostazione al file .csproj
sotto ogni <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
:
<IncludeSetAclProviderOnDestination>False</IncludeSetAclProviderOnDestination>
Oppure, se si sta utilizzando msbuild:
msbuild.exe myproject.csproj /t:Package /p:IncludeSetAclProviderOnDestination=False
ho scoperto che pepita utili da qui:
Skipping setting an ACL in a Visual Studio 2010 deployment package (WayBackMachine link because the original content is no longer available)
Questo è un ottimo post Kev - informazioni davvero utili qui. Per il mio problema, tuttavia, ho ancora visto 401 errori di autenticazione a meno che non utilizzi l'account amministratore del computer (spiegato nella mia risposta di seguito). –
msdeploy.axd? Site = yoursitename è ciò che ha risolto per me. Se ho lasciato il parametro del sito ho ottenuto un 401. Grazie – Schneider
Grazie per questa risposta impressionante. ? site = ... è quello che ho appena trascorso 3 ore della mia vita! :) – Ragesh