2013-05-17 12 views
10

MSBuild sembra davvero piacermi. Recentemente sto provando le diverse possibilità di creare e distribuire dalla riga di comando. Tuttavia, sto riscontrando un comportamento apparentemente strano quando passo un profilo di pubblicazione a MSBuild.Msbuild produce solo un pacchetto ma non lo distribuisce quando si utilizza un profilo di pubblicazione. Perché?

Ecco un esempio di quello che ho appena fatto:

schiero a un IIS locale per il momento con un comando come questo:

msbuild D:\PathToFile\DeployDBVariation01\DeployDBVariation01\DeployDBVariation01.csproj 
    /p:Configuration=Release; 
    Platform=AnyCpu; 
    DeployOnBuild=true; 
    DeployTarget=MSDeployPublish; 
    MSDeployServiceURL="localhost"; 
    DeployIisAppPath="DeployApp/DeployThis"; 
    MSDeployPublishMethod=InProc; 
    Username=thisIsNotActuallyMyUsername; 
    password=guesswhat; 
    AllowUntrustedCertificate=true 

E questo funziona! Dopo che è stato distribuito con successo e posso chiamarlo in un browser.

Tuttavia, dal momento che Visual Studio ci dà la comodità di utilizzare profili editoriali volevo provare che in combinazione con MSBuild su riga di comando e provato il seguente comando:

msbuild D:\PathToFile\DeployDBVariation01\DeployDBVariation01\DeployDBVariation01.csproj 
    /p:DeployOnBuild=true; 
    AllowUntrustedCertificate=true; 
    PublishProfile=ReleaseLocal 

ReleaseLocal è un profilo che ho creato in Visual Studio e assomiglia a questo:

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <WebPublishMethod>MSDeploy</WebPublishMethod> 
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration> 
    <LastUsedPlatform>Any CPU</LastUsedPlatform> 
    <SiteUrlToLaunchAfterPublish /> 
    <ExcludeApp_Data>False</ExcludeApp_Data> 
    <MSDeployServiceURL>localhost</MSDeployServiceURL> 
    <DeployIisAppPath>DeployApp/DeployThis</DeployIisAppPath> 
    <RemoteSitePhysicalPath /> 
    <SkipExtraFilesOnServer>True</SkipExtraFilesOnServer> 
    <MSDeployPublishMethod>InProc</MSDeployPublishMethod> 
    <EnableMSDeployBackup>False</EnableMSDeployBackup> 
    <UserName /> 
    <_SavePWD>False</_SavePWD> 
    <PublishDatabaseSettings> 
     <Objects xmlns=""> 
     <ObjectGroup Name="DefaultConnection" Order="1" Enabled="False"> 
      <Destination Path="Data Source=.\SQLEXPRESS;Initial Catalog=HorstDataProductive;User ID=sa;Password=GuessWhat" /> 
      <Object Type="DbDacFx"> 
      <PreSource Path="Data Source=.\SQLEXPRESS;Initial Catalog=HorstData;User ID=sa;Password=GuessWhat" includeData="False" /> 
      <Source Path="$(IntermediateOutputPath)AutoScripts\DefaultConnection_IncrementalSchemaOnly.dacpac" dacpacAction="Deploy" /> 
      </Object> 
      <UpdateFrom Type="Web.Config"> 
      <Source MatchValue="Data Source=.\SQLEXPRESS;Initial Catalog=HorstData;User ID=sa;Password=GuessWhat" MatchAttributes="$(UpdateFromConnectionStringAttributes)" /> 
      </UpdateFrom> 
     </ObjectGroup> 
     </Objects> 
    </PublishDatabaseSettings> 
    </PropertyGroup> 
    <ItemGroup> 
    <MSDeployParameterValue Include="$(DeployParameterPrefix)DefaultConnection-Web.config Connection String"> 
     <ParameterValue>Data Source=.\SQLEXPRESS;Initial Catalog=HorstDataProductive;User ID=sa;Password=GuessWhat</ParameterValue> 
    </MSDeployParameterValue> 
    </ItemGroup> 
</Project> 

Come si può vedere, ho qualche ulteriore sostituzione della stringa di connessione che voglio testare.

Così eseguo l'ultimo comando MSBuild che ti ho mostrato e viene eseguito senza errori. Al contrario, afferma che l'attività di distribuzione Web ha avuto esito positivo e che un pacchetto è stato creato in un determinato percorso. Questo è in realtà il pacchetto giusto. Quando lo impongo manualmente nel mio IIS è il risultato che mi aspetto, anche la sostituzione della stringa di connessione è stata eseguita.

Ma non capisco perché in realtà si tratta solo di creare il pacchetto ma non di distribuirlo in una sola esecuzione, come nel mio primo comando.

Qualcuno può spiegare? (o meglio ancora, cosa devo fare per farlo anche distribuire immediatamente quel pacchetto)

risposta

9

È necessario specificare il VS versione.

http://www.asp.net/mvc/tutorials/deployment/visual-studio-web-deployment/command-line-deployment

msbuild/P: DeployOnBuild = True /P:VisualStudioVersion=11.0 /P:PublishProfile=Dev.pubxml

Non dimenticare di permettere certs non attendibili se si sta utilizzando un 'falso 'certificato interno

+3

fyi .../P:VisualStudioVersion=11.0 si applica a VS2012 – dtmnash

+0

che sembra farlo, grazie per l'input, al momento anche se sto riscontrando altri errori quando lo sto provando, tornerò qui più avanti per aggiornare sulla domanda/risposta – DrCopyPaste

1

Sembra che manchi l'obiettivo di distribuzione .. ha tutte le informazioni necessarie, ma non sa cosa tu voglio che lo faccia. Prova questo;

msbuild D: \ PercorsoFile \ DeployDBVariation01 \ DeployDBVariation01 \ DeployDBVariation01.csproj /p: DeployOnBuild = true; DeployTarget = MSDeployPublish; AllowUntrustedCertificate = true; PublishProfile = ReleaseLocal

+0

Ho lo stesso problema, la distribuzione del mio sito Web sta producendo un pacchetto ma non un sito Web pubblicato, Il comando utilizzato è msbuild C: \ Test.csproj/p: DeployOnBuild = true/p: PublishProfile = Test/p : VisualStudioVersion = 10.0 – user476566

+0

Prova ad aggiungere DeployTarget = MSDeployPublish; – keithl8041

+0

l'opzione DeployTarget = MSDeployPublish disabilita l'uso se il profilo di pubblicazione – fantastory