当使用发布配置文件时,Msbuild只生成软件包而不部署它。为什么?

11

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

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

但是,由于Visual Studio为我们提供了使用发布配置文件的便利,我想尝试与命令行中的MSBuild结合使用,并尝试了以下命令:

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

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>

如您所见,我有一些其他的连接字符串替换需要测试。

因此,我执行了我向您展示的最后一个MSBuild命令,并且它没有出现任何错误。相反,它会显示Web部署任务成功,并在某个路径中创建了一个包。这实际上就是正确的包。当我手动将其导入到我的IIS中时,它是我预期的结果,同时连接字符串替换也已经完成。

但我不明白为什么它只是创建了包而没有像我第一个命令那样直接部署它。

有人能解释一下吗? (或者更好的是,我该怎么做才能立即部署该包)

2个回答

9

3
FYI.../P:VisualStudioVersion=11.0适用于VS2012。(说明:FYI是“供您参考”或“仅供信息”的意思,而“/P:VisualStudioVersion=11.0”是一个参数,指明了Visual Studio的版本号。因此,整个句子的意思是:“供您参考,/P:VisualStudioVersion=11.0适用于VS2012。”) - dtmnash
看起来已经解决了,感谢您的输入。不过目前在尝试时遇到了其他错误,稍后我会回来更新问题/答案。 - DrCopyPaste

1

看起来你缺少部署目标.. 它拥有所有必要的信息,但不知道你想要它做什么。尝试这个;

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


我有同样的问题,我的网站部署正在生成一个包而不是已发布的网站。使用的命令是msbuild C:\Test.csproj /p:DeployOnBuild=true /p:PublishProfile=Test /p:VisualStudioVersion=10.0。 - user476566
尝试添加 DeployTarget=MSDeployPublish; - keithl8041
选项DeployTarget=MSDeployPublish禁用了使用发布配置文件的功能。 - Fantastory

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接