VS2010 Web Deploy:如何删除绝对路径并自动化setAcl?

Jul*_*ain 15 msbuild visual-studio-2010 msdeploy

Visual Studio 2010中的集成Web部署非常好.它可以创建一个可以在目标IIS计算机上使用MSDeploy部署的程序包.问题是,这个软件包将被重新分发给一个客户端,当安装MSDeploy时,客户端将使用IIS中的"导入应用程序"自行安装它.

创建的默认包始终包含开发计算机的完整路径,源清单文件中的"D:\ Dev\XXX\obj\Debug\Package\PackageTmp".它不会阻止安装,因为它是以这种方式设计的,但它在导入对话框中看起来很丑,对客户端没有任何意义.更糟糕的是,他会想知道这些路径是什么,看起来很混乱.

通过自定义.csproj文件(通过添加包创建任务使用的MSBuild属性),我设法向包中添加其他参数.但是,我花了大部分时间在2600行的Web.Publishing.targets中试图了解哪些参数影响了"开发路径"行为,徒劳无功.我也尝试使用setAcl在部署后自定义给定文件夹的安全性,但我只是通过使用相对路径设法使用MSBuild ...但是如果我解决了第一个问题则无关紧要.

我可以在创建后修改生成的存档,但我更喜欢使用MSBuild自动化所有存档.有谁知道这是怎么做到的吗?

Jul*_*rau 28

显示的路径由属性确定_MSDeployDirPath_FullPath.

此属性由此属性链设置:

  • <_MSDeployDirPath_FullPath>@(_MSDeployDirPath->'%(FullPath)')</_MSDeployDirPath_FullPath>
  • <_MSDeployDirPath Include="$(_PackageTempDir)" />
  • <_PackageTempDir>$(PackageTempRootDir)\PackageTmp</_PackageTempDir>
  • <PackageTempRootDir>$(IntermediateOutputPath)Package</PackageTempRootDir>

_MSDeployDirPath_FullPath <-- @(_MSDeployDirPath->'%(FullPath)') <-- _PackageTempDir <-- $(PackageTempRootDir)\PackageTmp

如您所见,您不能拥有相对路径,因为_MSDeployDirPath_FullPath它是完整路径_MSDeployDirPath.

但是,您可以通过 _PackageTempDir使用要向客户显示的路径覆盖属性来简化显示的路径.(此路径将用作包生成的临时目录)

您可以覆盖该属性:

  • 在命令行中:

    msbuild.exe projectfile.csproj /t:Package /p:_PackageTempDir=C:\Package
    
    Run Code Online (Sandbox Code Playgroud)
  • 或者直接在项目文件中:

    <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
    <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
    
    <!-- Must be after Microsoft.WebApplication.targets import -->
    <PropertyGroup>
      <_PackageTempDir>C:\Package</_PackageTempDir>
    </PropertyGroup>
    
    Run Code Online (Sandbox Code Playgroud)