1

私は MSBuild にかなり慣れていませんが、多くのプロセスを自動化しながら、MSBuild が非常に強力であることを発見しました。私は現在、Web プロジェクト用に TARGETS ファイルをセットアップしています。また、アプリケーションが DEBUG モードでビルドされたときのグローバル許可 ACL を設定しようとしています。

これらは Debug.pubxml にある必要があることを理解しています (公開プロファイルの名前などを挿入)

VS では、IIS Express を使用してアプリケーションを実行すると、アプリケーション全体が書き込み可能になり、デバッグに適しています。DEBUG プロファイルで WebDeploy を使用してアプリケーションを IIS にデプロイするときに、同じ動作を提供したいと考えています。

フォルダーのアクセス許可を設定する方法の概要を説明しているSayed のブログに従い、最終的に次のソリューションに移行しました。これにより、任意のフォルダーにアクセス許可を設定するための再利用可能な適切なパターンが得られます。Microsoft IIS フォーラムの投稿

ただし、これらの 2 つの例から学んだことから、デプロイ ディレクトリに 'Read,Write' aclAccess を正常に設定できませんでした。$(_MSDeployDirPath_FullPath) であるべきだと思います。

サブノートとして、これらの MSBuild ファイルを構造化するための推奨事項はありますか? たとえば、コンポーネントを分割して再利用できるようにしたり、パターンに名前を付けて、開発者が何が起こっているのかを理解しやすくしたりしますか?

よろしくお願いします、ローレンス

4

2 に答える 2

1

以下の投稿とTwitterを介したSayedのヘルプは、解決策と両方の解決策のより良い理解につながります。

この場合のMSBuildルールは、「Debug.pubxml」ファイル内に配置されます。これは、IISディレクトリ全体を書き込み可能にする必要がある公開プロファイルです。これを{project-name}.wpp.targetsファイル内のプロジェクトの場所全体で「デフォルト」の動作にするため。

さらに読む:プロファイルの公開に関するMSDNの記事(.pubxml)

上記のように+1すると、MSBuild*.targetsファイルを読み取ると非常に便利です。

<!-- Make entire IIS directory writable -->
<Target Name="SetupCustomAcls" AfterTargets="AddIisSettingAndFileContentsToSourceManifest">
<Message Text="SetupCustomAcls" Importance="high"/>
<ItemGroup>
  <MsDeploySourceManifest Include="setAcl">
    <Path>$(_MSDeployDirPath_FullPath)</Path>
    <setAclAccess>Modify</setAclAccess>
    <setAclResourceType>Directory</setAclResourceType>
    <AdditionalProviderSettings>setAclResourceType;setAclAccess</AdditionalProviderSettings>
  </MsDeploySourceManifest>
</ItemGroup>
 </Target>

 <Target Name="DeclareCustomParameters" AfterTargets="AddIisAndContentDeclareParametersItems">
<Message Text="DeclareCustomParameters" Importance="high"/>
<ItemGroup>
  <MsDeployDeclareParameters Include="CustomSetAclParam">
    <Kind>ProviderPath</Kind>
    <Scope>setAcl</Scope>
    <Match>^$(_EscapeRegEx_MSDeployDirPath)$</Match>
    <Description>Add write permission to the root folder.</Description>
    <DefaultValue>{$(_MsDeployParameterNameForContentPath)}</DefaultValue>
    <Value>$(_DestinationContentPath)</Value>
    <Tags>Hidden</Tags>
    <Priority>$(VsSetAclPriority)</Priority>
    <ExcludeFromSetParameter>True</ExcludeFromSetParameter>
  </MsDeployDeclareParameters>
</ItemGroup>
  </Target>
于 2013-03-13T16:11:01.727 に答える
1

私は MsDeploy タスクに問題があり、Msdeploy 実行可能ファイルを直接オプトアウトしました。これが私のために働いたものです。

 <Exec Command="msdeploy -verb:sync -source:setacl -dest:setacl=&quot;%(FoldersWithSpecialPermissions.Identity)&quot;,setAclUser=NetworkService,setAclAccess=Modify,computerName=$(ComputerName),UserName=$(UserName),password=$(Password),authtype=basic -allowUntrusted" WorkingDirectory="$(MSDeployPath)" />

パターンについては、オープンにすることが最善の方法です

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0***.targets

Microsoft がビルド テンプレートをどのように編成しているかを確認してください。

それが役立つことを願っています

于 2013-02-23T00:12:21.747 に答える