既存のwpp.targetsファイルを使用してWebフォームアプリケーション(Visual Studio 2010)を使用して、LESS前処理、リソースの縮小/バンドル、web.config暗号化などを正常に実行しています。
Webアプリを右クリックし、[公開]-[ファイルシステム]オプションを選択するだけで、常に問題なくデプロイできました。
最近、アプリ内の特定のフォルダーでACL権限の設定を自動化することにしました。これにより、ファイルシステムの公開オプションからWeb配置オプションに変更することになりました(サーバーにWeb配置3をインストールして構成した後も正常に機能します)。
Web配置に切り替えた理由は、Web配置オプションを使用することで、wpp.targetsファイルに追加の手順を追加して、必要なフォルダーのアクセス許可を設定できるようになることを理解しているためです。
私はこのテーマに関する多くの記事、ブログ、フォーラムの投稿などを見てきましたが、それはかなり簡単なようです。
「IDAutomation」という名前のフォルダのドメインユーザーに読み取り/書き込み/変更アクセスを許可しようとしているので、基本的に、既存のwpp.targetsファイルの最後に次を追加しました。
<Target Name="SetupCustomAcls" AfterTargets="AddIisSettingAndFileContentsToSourceManifest">
<ItemGroup>
<MsDeploySourceManifest Include="setAcl">
<Path>$(_MSDeployDirPath_FullPath)\IDAutomation</Path>
<setAclAccess>Read,Write,Modify</setAclAccess>
<setAclUser>Domain Users</setAclUser>
<setAclResourceType>Directory</setAclResourceType>
<AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
</MsDeploySourceManifest>
</ItemGroup>
</Target>
<Target Name="DeclareCustomParameters" AfterTargets="AddIisAndContentDeclareParametersItems">
<ItemGroup>
<MsDeployDeclareParameters Include="IDAutomationSetAclParam">
<Kind>ProviderPath</Kind>
<Scope>setAcl</Scope>
<Match>^$(_EscapeRegEx_MSDeployDirPath)\\IDAutomation$</Match>
<Value>$(_DestinationContentPath)/IDAutomation</Value>
<ExcludeFromSetParameter>True</ExcludeFromSetParameter>
</MsDeployDeclareParameters>
</ItemGroup>
</Target>
しかし、[公開]-> [Web配置]をクリックして、その処理を実行させると、アクセス許可がフォルダーに適用されないため、明らかに何かが欠けています。アプリは正常にデプロイされ、すべてが良好に見えます。フォルダーにアクセス許可が設定されていないだけです。
デプロイ出力の最後からの抜粋を次に示します。
Target "Package" skipped, due to false condition; ($(_CreatePackage)) was evaluated as (false).
Target "MSDeployPublish" in file ..... from project .....
Start Web Deploy Publish the Application/package to....
...
Starting Web deployment task from source:manifest(.....) to Destination:auto().
Updating setAcl (Site/app).
Updating setAcl (Site/app).
Updating setAcl (Site/app/IDAutomation). <-- Appears to be doing something??
Updating filePath......
....
Updating setAcl (Site/app).
Updating setAcl (Site/app).
Updating setAcl (Site/app/IDAutomation). <-- Appears to be doing something??
Successfully executed Web deployment task.
Publish is successfully deployed.
Task "MSdeploy" skipped, due to false condition; ($(UseMsdeployExe)) was evaluated as (False).
Done building target "MSDeployPublish" in project ...
Done building project ...
ご覧のとおり、フォルダにaclを設定しているように見えますが(何らかの理由で2回)、リモートサーバー上のフォルダを見ると、アクセス許可が適用されていません。
ここで何が欠けていますか?
後で/手動で展開するためのパッケージや、ビルドサーバーに関連するものをビルドしようとはしていません。手動で[公開]->[Web配置]を試しています。
また、Web Deploy 3.0は、私のマシン(win7)とWebサーバー(Win2008R2 / IIS7.5)にインストールされています。
- アップデート -
setAclUser要素に何を設定したかに関係なく、sitemanifest.xmlファイルには常にフォルダーのsetAclUser属性(省略形のパス)がないことがわかりました。
<sitemanifest>
<IisApp path="C:\...\obj\...\Package\PackageTmp" managedRuntimeVersion="v4.0" />
<setAcl path="C:\...\obj\...\Package\PackageTmp" setAclResourceType="Directory" />
<setAcl path="C:\...\obj\...\Package\PackageTmp" setAclUser="anonymousAuthenticationUser" setAclResourceType="Directory" />
<setAcl path="C:\...\obj\...\Package\PackageTmp\IDAutomation" setAclResourceType="Directory" setAclAccess="Read,Write" />
</sitemanifest>
したがって、IDAutomationフォルダーのsetAcl要素にsetAclUserがないことがわかります。うまくいけば、それは誰かへの手がかりになるでしょうか?
再度、感謝します-