Msbuild只生成一个包,但在使用发布配置文件时不会部署它.为什么?

DrC*_*ste 10 msbuild web-deployment msdeploy webdeploy

MSBuild似乎真的很喜欢我.最近,我正在尝试从命令行构建和部署的不同可能性.但是,当我将发布配置文件传递给MSBuild时,我遇到了一些看似奇怪的行为.

这是我刚刚做的一个例子:

我暂时使用以下命令部署到本地IIS:

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
Run Code Online (Sandbox Code Playgroud)

这有效!之后它已成功部署,我可以在浏览器中调用它.

但是,由于Visual Studio使我们能够轻松使用发布配置文件,因此我想通过命令行与MSBuild一起尝试,并尝试使用以下命令:

msbuild D:\PathToFile\DeployDBVariation01\DeployDBVariation01\DeployDBVariation01.csproj
    /p:DeployOnBuild=true;
    AllowUntrustedCertificate=true;
    PublishProfile=ReleaseLocal
Run Code Online (Sandbox Code Playgroud)

ReleaseLocal是我在Visual Studio中创建的配置文件,它看起来像这样:

<?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>
Run Code Online (Sandbox Code Playgroud)

正如您所看到的那样,我想要测试一些额外的连接字符串替换.

所以我执行了我向你展示的最后一个MSBuild命令,它执行时没有任何错误.相反,它表示Web部署任务成功,并且已在某个路径中创建了一个包.现在这实际上是正确的包.当我在我的IIS中手动导入它时,它是我期望的结果,也已完成连接字符串替换.

但我不明白为什么它实际上只是创建包而不是在一次运行中部署它,就像在我的第一个命令中一样.

谁能解释一下?(或者甚至更好,我还需要做些什么才能让它立即部署该软件包)

dtm*_*ash 9

您需要指定VS版本.

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

如果您使用的是"假的"内部证书,请不要忘记允许不受信任的证书

  • fyi .../P:VisualStudioVersion = 11.0适用于VS2012 (3认同)