将空目录发布到VS2010 Web项目中的Web应用程序

时间:2010-11-23 15:27:32

标签: visual-studio-2010 directory publish webproject

通常我需要发布一个保留目录树的Web项目,即使目录是空的,例如,用于保存上载文件的目录。 如果我使用VS2010发布命令发布我的应用程序,则不会在远程文件系统上,Web服务器上创建空目录。

有没有办法强制VS在目标目录上创建某些文件夹,尽管是空的? 谢谢!

5 个答案:

答案 0 :(得分:40)

不,这是不可能的,我担心我们遇到同样的问题。如果希望预编译工具生成这些空文件夹,则需要在每个空目录中创建一个placeholder.txt文件。如果不能创建一个命令行应用程序,它将在后期构建事件中创建文件夹(但仅当您使用的是Web应用程序项目而非网站项目时)。

希望这有帮助。

答案 1 :(得分:8)

我知道这个问题提到了Visual Studio 2010,但我来到这里寻找同样的问题......

我使用Visual Studio 2012并找到了一种很好/优雅的方法来克服这种烦人的情况。我认为它也可以在VS 2010中工作,并且比在空文件夹中添加虚拟空文件更好。

使用VS 2012创建发布配置文件时,它会在MyPublishProfile.pubxml文件夹(Properties\PublishProfiles for VB)中生成My Project\PublishProfiles文件。这些是MSBuild个文件,可以编辑它们来自定义发布过程。在我们的例子中,我们可以在发布实际发生之前将目标注入发布过程:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <AfterAddIisSettingAndFileContentsToSourceManifest>CreateEmptyFolders
    </AfterAddIisSettingAndFileContentsToSourceManifest>
  </PropertyGroup>
  <Target Name="CreateEmptyFolders">
    <Message Text="Adding empty folder to hold Files" />
    <MakeDir Directories="$(_MSDeployDirPath_FullPath)\Files\MyEmptyFolder"/>
  </Target>
</Project>

属性AfterAddIisSettingAndFileContentsToSourceManifest包含在准备好部署包的内容之后将调用的目标的名称。这是将更多文件或文件夹添加到包中的最佳时机。


代码和文字混合来自:

How to execute a PowerShell script only before a web deploy Publish task in VS 2012?

Web Deploy : Customizing a deployment package

答案 2 :(得分:3)

微软有一个关于此的错误报告,他们说他们不会修复它。 http://connect.microsoft.com/VisualStudio/feedback/details/546356/publish-deploy-does-not-deploy-empty-folders

太糟糕了。因为它曾经在Visual Studio 2008中工作。

请注意,没有必要实际部署虚拟文件。它只需要在构建环境中作为项目的一部分存在。

答案 3 :(得分:2)

这个对我有用:

编辑visual studio生成的发布pubxml文件,如Leniel Macaferi所提到的,然后添加: Visual Studio已经生成了像

这样的属性
SELECT *
FROM investors i
JOIN users u ON i.ID = u.investor_id

SELECT *
FROM accounts

SELECT *
FROM login_logs

中的

<publishUrl>f:\publish_web</publishUrl>

部分,所以我像这样使用它: 添加到部分:

<PropertyGroup>    

并补充说:

 <PipelineDependsOn>
      CustomBeforePublish;
      $(PipelineDependsOn);
    </PipelineDependsOn>  

答案 4 :(得分:1)

在空文件夹内添加Default.aspx文件。您可以将其留空,然后在预编译版本中创建文件夹。