在VS 2012中使用Update 2,我有一个我发布的网站。新发布向导配置为将站点发布到磁盘上的文件夹。在检查我的临时文件夹上的内容时,我运行了我的网站发布。我看到发布者在%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>
答案 0 :(得分:1)
我认为您可以在.csproj
文件中设置“构建目标”(可能在.pubxml
文件中?),例如Why does MSBuild ignore my BeforePublish target?或How can I prevent hidden .svn folder from being copied from the _bin_deployableAssemblies folder?。 @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