15

次のスクリプトを使用して、ASP.NET MVC アプリを Web サーバーにデプロイします。

C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe MySolution.sln^
/p:Configuration=TeamCity-Test^
/p:OutputPath=bin^
/p:DeployOnBuild=True^
/p:DeployTarget=MSDeployPublish^
/p:MsDeployServiceUrl=https://mywebserver.com:8172/msdeploy.axd^
/p:username=MyDomain\MyUser^
/p:password=MyPassword^
/p:AllowUntrustedCertificate=True^
/p:DeployIisAppPath=mywebsitename.com^
/p:MSDeployPublishMethod=WMSVC

ここで、/uploads フォルダーを同期しないように指定する必要があります。このスクリプトでそれを指定できますか? ありがとう!

明確化: プロジェクトに Uploads フォルダーがあります。Web Deploy にフォルダーを作成してもらいたいです。ユーザーがアップロードしたコンテンツが含まれているため、フォルダー/サブフォルダー/ファイルを Web サーバーから削除したくありません。

明確化 #2:SkipExtraFilesOnServer=Trueオプションを見つけました。ただし、これをグローバルにしたくありません。単一のフォルダに設定したいと思います。

4

1 に答える 1

21

更新: どうやら、本当に必要なのは、web デプロイが宛先サーバー上の既存のディレクトリを削除するのを防ぎますが、そこにない場合に備えてフォルダーを作成します。これは次のように実行できます。

  • 次の内容のプロジェクト ファイルの隣にYourWebProjectName.wpp.targetsファイルを作成します。

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <ItemGroup>
          <MsDeploySkipRules Include="SkipELMAHFolderFiles">
          <SkipAction></SkipAction>
          <ObjectName>filePath</ObjectName>
          <AbsolutePath>$(_DestinationContentPath)\\NameOfYourFolder\\.*</AbsolutePath>
          <Apply>Destination</Apply>
          <XPath></XPath>
        </MsDeploySkipRules>
    
        <MsDeploySkipRules Include="SkipELMAHFolderChildFolders">
          <SkipAction></SkipAction>
          <ObjectName>dirPath</ObjectName>
          <AbsolutePath>$(_DestinationContentPath)\\NameOfYourFolder\\.*\\*</AbsolutePath>
          <Apply>Destination</Apply>
          <XPath></XPath>
        </MsDeploySkipRules>
      </ItemGroup>
    </Project>
    

それに応じて変更NameOfYourFolderYourWebProjectNameます。これは、ルートにあることを前提としています。そうでない場合は、相対パスを使用できると思います。

  • 最初のエントリは、 webdeploy にName_OfYourFolderMsDeploySkipRules内のファイルを削除しないように指示します。
  • 2 番目MsDeploySkipRulesは、 Name_OfYourFolder 内の子フォルダーを削除しないよう webdeploy に指示します

また、宛先サーバーに存在しない場合にフォルダーを作成するには、次の手順を実行する必要があります。

  • フォルダーをプロジェクトに含める
  • ダミーのDeployemntPlaceholder.txtファイルを追加し、プロジェクトにも含めます

DeployemntPlaceholder.txtは、MSBUild にフォルダーをパッケージに追加するように指示するために必要です。空のフォルダーは無視されます。

私はこのアプローチをテストしましたが、あなたが示した方法でパブリッシュを実行するとうまくいきます。この回答を使用して、msbuild アイテムの構文を正しくしました。これは、MSBuild Deployment Pipeline によって webdeploy に渡された、フラグをカスタマイズするための MSBuild の方法だと思います。

MSDeploy を直接実行した場合は、次の方法でスキップ引数を使用できます。

-skip:objectname='filePath',absolutepath='logs\\.*\\someNameToExclude\.txt'

更新 2

また、\Uploads フォルダーに ACL の書き込み権限を設定することもできます。これを行うための完全なガイドがあります: Web 公開でのフォルダー権限の設定

元の質問「Web Deploy で同期しないようにフォルダーを指定する」を考慮して、これを行う最も簡単な方法は次のとおりです。

発行プロファイルを作成し、次の行を追加できます。

<PropertyGroup>
  <ExcludeFilesFromDeployment>
    File1.aspx;File2.aspx
  </ExcludeFilesFromDeployment>
  <ExcludeFoldersFromDeployment>
    Folder1;Folder2
  </ExcludeFoldersFromDeployment>
</PropertyGroup> 

パブリッシュ プロファイルを使用してファイルを除外するこのアプローチをテストしました。簡単なガイドはこちらです( .pubxml ファイルを編集して robots.txtセクションを除外するまでスクロールします)。

.wpp.targets ファイルでこれを行うか、csproj を編集することもできます。詳細については、Visual Studio および ASP.NET の Web 配置に関する FAQ を参照してください。

于 2013-08-16T12:24:48.593 に答える