0

在带有更新 2 的 VS 2012 中,我有一个我发布的网站。新的发布向导配置为将站点发布到我磁盘上的文件夹。在检查我的临时文件夹中的某些内容时,我发布了我的网站。我看到发布者在 %TEMP%\WebSitePublish 上创建了一个文件夹,并在其中创建了该站点的 3 个副本:

r:\temp\WebSitePublish\web-1279598559\obj\Debug\AspnetCompileMerge\Source\
r:\temp\WebSitePublish\web-1279598559\obj\Debug\AspnetCompileMerge\TempBuildDir\
r:\temp\WebSitePublish\web-1279598559\obj\Debug\Package\

因为我的网站很大(1.6GB),每个文件夹总共占用 1.6GB 和 4.8GB。虽然我认为即使在发布期间这也在浪费磁盘空间,但我无法与 MS 争论他们实施发布的方式。唯一困扰我的是,即使在关闭 VS IDE 之后,r:\temp\WebSitePublish\web-1279598559 文件夹仍然存在并且仍然占用 4.8GB。如何让发布者在完成发布后删除它的临时文件?

我这个网站的 pubxml 是这样的:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <WebPublishMethod>FileSystem</WebPublishMethod>
    <LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
    <LastUsedPlatform>x86</LastUsedPlatform>
    <SiteUrlToLaunchAfterPublish />
    <ExcludeApp_Data>False</ExcludeApp_Data>
    <publishUrl>C:\PrecompiledWeb\Site</publishUrl>
    <DeleteExistingFiles>True</DeleteExistingFiles>
    <PrecompileBeforePublish>True</PrecompileBeforePublish>
    <EnableUpdateable>True</EnableUpdateable>
    <DebugSymbols>True</DebugSymbols>
    <WDPMergeOption>CreateSeparateAssembly</WDPMergeOption>
    <UseFixedNames>True</UseFixedNames>
  </PropertyGroup>
</Project>
4

1 回答 1

1

我认为您可以在文件中设置“构建目标” .csproj(也许在.pubxml文件中?),例如为什么 MSBuild 会忽略我的 BeforePublish 目标?如何防止从 _bin_deployableAssemblies 文件夹中复制隐藏的 .svn 文件夹?. @sayed-ibrahim-hashimi有很多关于构建目标的答案。

根据我的经验,很难确定要附加到哪个目标,因为不同的 Visual Studio 版本之间存在一些变动,但我认为你想要类似的东西:

  <!-- these are your instructions; name is arbitrary, `AfterTargets` says when -->
  <Target Name="CleanTempDirectory" AfterTargets="AfterPublish">
    <!-- use 'importance=high' to show in the Output window (?) -->
    <Message Text="Cleaning up publish temp directories" Importance="high" />

    <!-- here, specify the directory(ies) to clear; can use build event macros -->
    <CreateItem Include="$(ProjectDir)App_Data\*\*">
      <Output ItemName="GeneratedFiles" TaskParameter="Include" />
    </CreateItem>
    <Delete Files="@(GeneratedFiles)" />
  </Target>

这里的重要部分是:

  • AfterTargets-- 指定何时运行此任务(并且AfterPublish应该是不言自明的;我认为这是正确的)
  • CreateItem-- 扫描给定的目录 glob 并为变量设置一个列表@(GeneratedFiles)
  • Delete-- 删除创建的列表CreateItem
于 2014-02-13T14:58:47.647 回答